Class Lifecycle
- java.lang.Object
-
- org.apache.druid.java.util.common.lifecycle.Lifecycle
-
public class Lifecycle extends Object
A manager of object Lifecycles. This object has methods for registering objects that should be started and stopped. The Lifecycle allows for four stages:Lifecycle.Stage.INIT
,Lifecycle.Stage.NORMAL
,Lifecycle.Stage.SERVER
, andLifecycle.Stage.ANNOUNCEMENTS
. Things added atLifecycle.Stage.INIT
will be started first (in the order that they are added to the Lifecycle instance) and then things added atLifecycle.Stage.NORMAL
, thenLifecycle.Stage.SERVER
, and finally,Lifecycle.Stage.ANNOUNCEMENTS
will be started. The close operation goes in reverse order, starting with the last thing added atLifecycle.Stage.ANNOUNCEMENTS
and working backwards. Conceptually, the stages have the following purposes: -Lifecycle.Stage.INIT
: Currently, this stage is used exclusively for log4j initialization, since almost everything needs logging and it should be the last thing to shutdown. Any sort of bootstrapping object that provides something that should be initialized before nearly all other Lifecycle objects could also belong here (if it doesn't need logging during start or stop). -Lifecycle.Stage.NORMAL
: This is the default stage. Most objects will probably make the most sense to be registered at this level, with the exception of any form of server or service announcements -Lifecycle.Stage.SERVER
: This lifecycle stage is intended for all 'server' objects, for example, org.apache.druid.server.initialization.jetty.JettyServerModule, but any sort of 'server' that expects most (or some specific) Lifecycle objects to be initialized by the time it starts, and still available at the time it stops can logically live in this stage. -Lifecycle.Stage.ANNOUNCEMENTS
: Any object which announces to a cluster this servers location belongs in this stage. By being last, we can be sure that all servers are initialized before we advertise the endpoint locations, and also can be sure that we un-announce these advertisements prior to the Stage.SERVER objects stop. There are two sets of methods to add things to the Lifecycle. One set that will just add instances and enforce that start() has not been called yet. The other set will add instances and, if the lifecycle is already started, start them.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
Lifecycle.Handler
static class
Lifecycle.Stage
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description <T extends Closeable>
TaddCloseableInstance(T o)
Adds a Closeable instance to the lifecycle atLifecycle.Stage.NORMAL
stage, doesn't try to call any "start" method on it, useaddStartCloseInstance(Object)
instead if you need the latter behaviour.void
addHandler(Lifecycle.Handler handler)
Adds a handler to the Lifecycle at the Stage.NORMAL stage.void
addHandler(Lifecycle.Handler handler, Lifecycle.Stage stage)
Adds a handler to the Lifecycle.<T> T
addManagedInstance(T o)
Adds a "managed" instance (annotated withLifecycleStart
andLifecycleStop
) to the Lifecycle at Stage.NORMAL.<T> T
addManagedInstance(T o, Lifecycle.Stage stage)
Adds a "managed" instance (annotated withLifecycleStart
andLifecycleStop
) to the Lifecycle.void
addMaybeStartHandler(Lifecycle.Handler handler)
Adds a handler to the Lifecycle at the Stage.NORMAL stage and starts it if the lifecycle has already been started.void
addMaybeStartHandler(Lifecycle.Handler handler, Lifecycle.Stage stage)
Adds a handler to the Lifecycle and starts it if the lifecycle has already been started.<T> T
addMaybeStartManagedInstance(T o)
Adds a "managed" instance (annotated withLifecycleStart
andLifecycleStop
) to the Lifecycle at Stage.NORMAL and starts it if the lifecycle has already been started.<T> T
addMaybeStartManagedInstance(T o, Lifecycle.Stage stage)
Adds a "managed" instance (annotated withLifecycleStart
andLifecycleStop
) to the Lifecycle and starts it if the lifecycle has already been started.<T> T
addMaybeStartStartCloseInstance(T o)
Adds an instance with a start() and/or close() method to the Lifecycle at Stage.NORMAL and starts it if the lifecycle has already been started.<T> T
addMaybeStartStartCloseInstance(T o, Lifecycle.Stage stage)
Adds an instance with a start() and/or close() method to the Lifecycle and starts it if the lifecycle has already been started.<T> T
addStartCloseInstance(T o)
Adds an instance with a start() and/or close() method to the Lifecycle at Stage.NORMAL.<T> T
addStartCloseInstance(T o, Lifecycle.Stage stage)
Adds an instance with a start() and/or close() method to the Lifecycle.void
ensureShutdownHook()
void
join()
void
start()
void
stop()
-
-
-
Constructor Detail
-
Lifecycle
public Lifecycle()
-
Lifecycle
public Lifecycle(String name)
-
-
Method Detail
-
addManagedInstance
public <T> T addManagedInstance(T o)
Adds a "managed" instance (annotated withLifecycleStart
andLifecycleStop
) to the Lifecycle at Stage.NORMAL. If the lifecycle has already been started, it throws anISE
- Parameters:
o
- The object to add to the lifecycle- Throws:
ISE
-addHandler(Handler, Stage)
-
addManagedInstance
public <T> T addManagedInstance(T o, Lifecycle.Stage stage)
Adds a "managed" instance (annotated withLifecycleStart
andLifecycleStop
) to the Lifecycle. If the lifecycle has already been started, it throws anISE
- Parameters:
o
- The object to add to the lifecyclestage
- The stage to add the lifecycle at- Throws:
ISE
-addHandler(Handler, Stage)
-
addStartCloseInstance
public <T> T addStartCloseInstance(T o)
Adds an instance with a start() and/or close() method to the Lifecycle at Stage.NORMAL. If the lifecycle has already been started, it throws anISE
- Parameters:
o
- The object to add to the lifecycle- Throws:
ISE
-addHandler(Handler, Stage)
-
addStartCloseInstance
public <T> T addStartCloseInstance(T o, Lifecycle.Stage stage)
Adds an instance with a start() and/or close() method to the Lifecycle. If the lifecycle has already been started, it throws anISE
- Parameters:
o
- The object to add to the lifecyclestage
- The stage to add the lifecycle at- Throws:
ISE
-addHandler(Handler, Stage)
-
addHandler
public void addHandler(Lifecycle.Handler handler)
Adds a handler to the Lifecycle at the Stage.NORMAL stage. If the lifecycle has already been started, it throws anISE
- Parameters:
handler
- The hander to add to the lifecycle- Throws:
ISE
-addHandler(Handler, Stage)
-
addHandler
public void addHandler(Lifecycle.Handler handler, Lifecycle.Stage stage)
Adds a handler to the Lifecycle. If the lifecycle has already been started, it throws anISE
- Parameters:
handler
- The hander to add to the lifecyclestage
- The stage to add the lifecycle at- Throws:
ISE
- indicates that the lifecycle has already been started and thus cannot be added to
-
addMaybeStartManagedInstance
public <T> T addMaybeStartManagedInstance(T o) throws Exception
Adds a "managed" instance (annotated withLifecycleStart
andLifecycleStop
) to the Lifecycle at Stage.NORMAL and starts it if the lifecycle has already been started.- Parameters:
o
- The object to add to the lifecycle- Throws:
Exception
-addMaybeStartHandler(Handler, Stage)
-
addMaybeStartManagedInstance
public <T> T addMaybeStartManagedInstance(T o, Lifecycle.Stage stage) throws Exception
Adds a "managed" instance (annotated withLifecycleStart
andLifecycleStop
) to the Lifecycle and starts it if the lifecycle has already been started.- Parameters:
o
- The object to add to the lifecyclestage
- The stage to add the lifecycle at- Throws:
Exception
-addMaybeStartHandler(Handler, Stage)
-
addMaybeStartStartCloseInstance
public <T> T addMaybeStartStartCloseInstance(T o) throws Exception
Adds an instance with a start() and/or close() method to the Lifecycle at Stage.NORMAL and starts it if the lifecycle has already been started.- Parameters:
o
- The object to add to the lifecycle- Throws:
Exception
-addMaybeStartHandler(Handler, Stage)
-
addMaybeStartStartCloseInstance
public <T> T addMaybeStartStartCloseInstance(T o, Lifecycle.Stage stage) throws Exception
Adds an instance with a start() and/or close() method to the Lifecycle and starts it if the lifecycle has already been started.- Parameters:
o
- The object to add to the lifecyclestage
- The stage to add the lifecycle at- Throws:
Exception
-addMaybeStartHandler(Handler, Stage)
-
addCloseableInstance
public <T extends Closeable> T addCloseableInstance(T o)
Adds a Closeable instance to the lifecycle atLifecycle.Stage.NORMAL
stage, doesn't try to call any "start" method on it, useaddStartCloseInstance(Object)
instead if you need the latter behaviour.
-
addMaybeStartHandler
public void addMaybeStartHandler(Lifecycle.Handler handler) throws Exception
Adds a handler to the Lifecycle at the Stage.NORMAL stage and starts it if the lifecycle has already been started.- Parameters:
handler
- The hander to add to the lifecycle- Throws:
Exception
-addMaybeStartHandler(Handler, Stage)
-
addMaybeStartHandler
public void addMaybeStartHandler(Lifecycle.Handler handler, Lifecycle.Stage stage) throws Exception
Adds a handler to the Lifecycle and starts it if the lifecycle has already been started.- Parameters:
handler
- The hander to add to the lifecyclestage
- The stage to add the lifecycle at- Throws:
Exception
- an exception thrown from handler.start(). If an exception is thrown, the handler is *not* added
-
stop
public void stop()
-
ensureShutdownHook
public void ensureShutdownHook()
-
join
public void join() throws InterruptedException
- Throws:
InterruptedException
-
-