Class AbstractLifecycleRunnable

  • All Implemented Interfaces:
    java.lang.Runnable

    public abstract class AbstractLifecycleRunnable
    extends AbstractRunnable
    AbstractLifecycleRunnable is a service-lifecycle aware AbstractRunnable.

    This simplifies the running and rescheduling of Lifecycle-based Runnables.

    • Method Summary

      Modifier and Type Method Description
      protected void doRun()
      This method has the same semantics as Runnable.run()
      protected abstract void doRunInLifecycle()
      Perform runnable logic, but only if the lifecycle is not stopped or closed.
      void onAfter()
      This method is called in a finally block after successful execution or on a rejection.
      protected void onAfterInLifecycle()
      This method is invoked in the finally block of the run method, but it is only executed if the lifecycle is not stopped or closed.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • AbstractLifecycleRunnable

        public AbstractLifecycleRunnable​(Lifecycle lifecycle,
                                         org.apache.logging.log4j.Logger logger)
        AbstractLifecycleRunnable must be aware of the actual lifecycle to react properly.
        Parameters:
        lifecycle - The lifecycle to react too
        logger - The logger to use when logging
        Throws:
        java.lang.NullPointerException - if any parameter is null
    • Method Detail

      • doRun

        protected final void doRun()
                            throws java.lang.Exception
        This method has the same semantics as Runnable.run()

        This invokes doRunInLifecycle() only if the lifecycle is not stopped or closed. Otherwise it exits immediately.

        Specified by:
        doRun in class AbstractRunnable
        Throws:
        java.lang.InterruptedException - if the run method throws an InterruptedException
        java.lang.Exception
      • doRunInLifecycle

        protected abstract void doRunInLifecycle()
                                          throws java.lang.Exception
        Perform runnable logic, but only if the lifecycle is not stopped or closed.
        Throws:
        java.lang.InterruptedException - if the run method throws an InterruptedException
        java.lang.Exception
      • onAfter

        public final void onAfter()
        This method is called in a finally block after successful execution or on a rejection.

        This overrides the default behavior of onAfter to add the caveat that it only runs if the lifecycle is not stopped or closed.

        Note: this does not guarantee that it won't be stopped concurrently as it invokes onAfterInLifecycle(), but it's a solid attempt at preventing it. For those that use this for rescheduling purposes, the next invocation would be effectively cancelled immediately if that's the case.

        Overrides:
        onAfter in class AbstractRunnable
        See Also:
        onAfterInLifecycle()
      • onAfterInLifecycle

        protected void onAfterInLifecycle()
        This method is invoked in the finally block of the run method, but it is only executed if the lifecycle is not stopped or closed.

        This method is most useful for rescheduling the next iteration of the current runnable.