@ManagedObject(value="Implementation of Container and LifeCycle") public class ContainerLifeCycle extends AbstractLifeCycle implements Container, Destroyable, Dumpable
LifeCycle
implementation for a collection of contained beans.
Beans can be added to the ContainerLifeCycle either as managed beans or as unmanaged beans.
A managed bean is started, stopped and destroyed with the aggregate.
An unmanaged bean is associated with the aggregate for the purposes of dump()
, but its
lifecycle must be managed externally.
When a LifeCycle
bean is added without a managed state being specified the state is
determined heuristically:
When stopping the container, a contained bean will be stopped by this aggregate only if it is started by this aggregate.
The methods addBean(Object, boolean)
, manage(Object)
and unmanage(Object)
can be used to
explicitly control the life cycle relationship.
If adding a bean that is shared between multiple ContainerLifeCycle
instances, then it should be started
before being added, so it is unmanaged, or the API must be used to explicitly set it as unmanaged.
This class also provides utility methods to dump deep structures of objects. In the dump, the following symbols are used to indicate the type of contained object:
SomeContainerLifeCycleInstance +- contained POJO instance += contained MANAGED object, started and stopped with this instance +~ referenced UNMANAGED object, with separate lifecycle +? referenced AUTO object that could become MANAGED or UNMANAGED.
AbstractLifeCycle.AbstractLifeCycleListener
Container.InheritedListener, Container.Listener
LifeCycle.Listener
Constructor and Description |
---|
ContainerLifeCycle() |
Modifier and Type | Method and Description |
---|---|
boolean |
addBean(Object o)
Adds the given bean, detecting whether to manage it or not.
|
boolean |
addBean(Object o,
boolean managed)
Adds the given bean, explicitly managing it or not.
|
void |
addEventListener(Container.Listener listener)
Add an event listener.
|
void |
addManaged(LifeCycle lifecycle)
Adds a managed lifecycle.
|
boolean |
contains(Object bean) |
void |
destroy()
Destroys the managed Destroyable beans in the reverse order they were added.
|
String |
dump() |
void |
dump(Appendable out)
Dump this object to an Appendable with no indent.
|
void |
dump(Appendable out,
String indent)
Dump this object (and children) into an Appendable using the provided indent after any new lines.
|
static void |
dump(Appendable out,
String indent,
Collection<?>... collections)
Deprecated.
|
static String |
dump(Dumpable dumpable)
Deprecated.
use
Dumpable.dump(Dumpable) instead |
static void |
dumpObject(Appendable out,
Object obj)
Deprecated.
use
Dumpable.dumpObject(Appendable, Object) instead |
void |
dumpStdErr()
Dumps to
System.err . |
<T> T |
getBean(Class<T> clazz) |
Collection<Object> |
getBeans() |
<T> Collection<T> |
getBeans(Class<T> clazz) |
<T> Collection<T> |
getContainedBeans(Class<T> clazz) |
boolean |
isAuto(Object bean) |
boolean |
isManaged(Object bean)
Test if this container manages a bean
|
boolean |
isUnmanaged(Object bean) |
void |
manage(Object bean)
Manages a bean already contained by this aggregate, so that it is started/stopped/destroyed with this
aggregate.
|
boolean |
removeBean(Object o)
Removes the given bean.
|
void |
removeBeans()
Removes all bean
|
void |
removeEventListener(Container.Listener listener)
Remove an event listener.
|
void |
setBeans(Collection<Object> beans) |
void |
setStopTimeout(long stopTimeout) |
void |
unmanage(Object bean)
Unmanages a bean already contained by this aggregate, so that it is not started/stopped/destroyed with this
aggregate.
|
void |
updateBean(Object oldBean,
Object newBean) |
void |
updateBean(Object oldBean,
Object newBean,
boolean managed) |
void |
updateBeans(Object[] oldBeans,
Object[] newBeans) |
addLifeCycleListener, getState, getState, getStopTimeout, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, start, stop, toString
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
dumpContainer, dumpIterable, dumpMapEntries, dumpObjects, dumpSelf, named
public void destroy()
destroy
in interface Destroyable
public boolean contains(Object bean)
bean
- the bean to testpublic boolean isManaged(Object bean)
Container
public boolean isAuto(Object bean)
bean
- the bean to testpublic boolean isUnmanaged(Object bean)
bean
- the bean to testpublic boolean addBean(Object o)
LifeCycle
, then it will be managed if it is not
already started and not managed if it is already started.
The addBean(Object, boolean)
method should be used if this is not correct, or the manage(Object)
and unmanage(Object)
methods may be used after an add to change the status.public boolean addBean(Object o, boolean managed)
public void addManaged(LifeCycle lifecycle)
This is a convenience method that uses addBean(lifecycle,true) and then ensures that the added bean is started iff this container is running. Exception from nested calls to start are caught and wrapped as RuntimeExceptions
lifecycle
- the managed lifecycle to addpublic void addEventListener(Container.Listener listener)
Container
addEventListener
in interface Container
listener
- the listener to addContainer.addBean(Object)
public void manage(Object bean)
public void unmanage(Object bean)
public Collection<Object> getBeans()
getBeans
in interface Container
Container.getBean(Class)
public void setBeans(Collection<Object> beans)
public <T> Collection<T> getBeans(Class<T> clazz)
getBeans
in interface Container
T
- the Bean typeclazz
- the class of the beansContainer.getBeans()
,
Container.getContainedBeans(Class)
public <T> T getBean(Class<T> clazz)
public void removeBeans()
public boolean removeBean(Object o)
Container
Container.Listener
, then also do an implicit Container.removeEventListener(Listener)
.removeBean
in interface Container
o
- the bean to removepublic void removeEventListener(Container.Listener listener)
Container
removeEventListener
in interface Container
listener
- the listener to removeContainer.removeBean(Object)
public void setStopTimeout(long stopTimeout)
setStopTimeout
in class AbstractLifeCycle
@ManagedOperation(value="Dump the object to stderr") public void dumpStdErr()
System.err
.dump()
@ManagedOperation(value="Dump the object to a string") public String dump()
@Deprecated public static String dump(Dumpable dumpable)
Dumpable.dump(Dumpable)
insteadDumpable
Dumpable.dump()
by calling Dumpable.dump(Appendable, String)
public void dump(Appendable out, String indent) throws IOException
Dumpable
dump
in interface Dumpable
out
- The appendable to dump toindent
- The indent to apply after any new lines.IOException
- if unable to write to Appendablepublic void dump(Appendable out) throws IOException
out
- The appendable to dump to.IOException
- May be thrown by the Appendable@Deprecated public static void dumpObject(Appendable out, Object obj) throws IOException
Dumpable.dumpObject(Appendable, Object)
insteadDumpable
dumpObject
in interface Dumpable
out
- The Appendable to dump toobj
- The object to dumpIOException
- May be thrown by the Appendable@Deprecated public static void dump(Appendable out, String indent, Collection<?>... collections) throws IOException
IOException
public <T> Collection<T> getContainedBeans(Class<T> clazz)
getContainedBeans
in interface Container
T
- the Bean typeclazz
- the class of the beansCopyright © 2010 - 2020 Adobe. All Rights Reserved