return instance_;
//
ExoContainer exocontainer = (ExoContainer)container;
Component component = null;
ConfigurationManager manager;
String componentKey;
try
{
InitParams params = null;
boolean debug = false;
synchronized (this)
{
// Avoid to create duplicate instances if it is called at the same time by several threads
if (instance_ != null)
return instance_;
// Get the component
Object key = getComponentKey();
if (key instanceof String)
componentKey = (String)key;
else
componentKey = ((Class)key).getName();
manager = (ConfigurationManager)exocontainer.getComponentInstanceOfType(ConfigurationManager.class);
component = manager.getComponent(componentKey);
if (component != null)
{
params = component.getInitParams();
debug = component.getShowDeployInfo();
}
// Please note that we cannot fully initialize the Object "instance_" before releasing other
// threads because it could cause StackOverflowError due to recursive calls
Object instance = exocontainer.createComponent(getComponentImplementation(), params);
if (instance_ != null)
{
// Avoid instantiating twice the same component in case of a cyclic reference due
// to component plugins
return instance_;
}
instance_ = instance;
}
if (debug)
log.debug("==> create component : " + instance_);
if (component != null && component.getComponentPlugins() != null)
{
addComponentPlugin(debug, instance_, component.getComponentPlugins(), exocontainer);
}
ExternalComponentPlugins ecplugins = manager.getConfiguration().getExternalComponentPlugins(componentKey);
if (ecplugins != null)
{
addComponentPlugin(debug, instance_, ecplugins.getComponentPlugins(), exocontainer);
}
// check if component implement the ComponentLifecycle