* <code>BeanDeploymentArchive</code>s.
*/
public void event(Event event) {
if ( event.is(org.glassfish.internal.deployment.Deployment.APPLICATION_LOADED) ) {
ApplicationInfo appInfo = (ApplicationInfo)event.hook();
WeldBootstrap bootstrap = (WeldBootstrap)appInfo.getTransientAppMetaData(WELD_BOOTSTRAP,
WeldBootstrap.class);
if( bootstrap != null ) {
DeploymentImpl deploymentImpl = (DeploymentImpl) appInfo.getTransientAppMetaData(
WELD_DEPLOYMENT, DeploymentImpl.class);
List<BeanDeploymentArchive> archives = deploymentImpl.getBeanDeploymentArchives();
for (BeanDeploymentArchive archive : archives) {
ResourceLoaderImpl loader = new ResourceLoaderImpl(
((BeanDeploymentArchiveImpl) archive).getModuleClassLoaderForBDA());
archive.getServices().add(ResourceLoader.class, loader);
}
deploymentImpl.buildDeploymentGraph();
if (_logger.isLoggable(Level.FINE)) {
_logger.fine(deploymentImpl.toString());
}
//get Current TCL
ClassLoader oldTCL = Thread.currentThread().getContextClassLoader();
try {
bootstrap.startContainer(Environments.SERVLET, deploymentImpl/*, new ConcurrentHashMapBeanStore()*/);
bootstrap.startInitialization();
fireProcessInjectionTargetEvents(bootstrap, deploymentImpl);
bootstrap.deployBeans();
} catch (Throwable t) {
DeploymentException de = new DeploymentException(t.getMessage());
de.initCause(t);
throw(de);
} finally {
//The TCL is originally the EAR classloader
//and is reset during Bean deployment to the
//corresponding module classloader in BeanDeploymentArchiveImpl.getBeans
//for Bean classloading to succeed. The TCL is reset
//to its old value here.
Thread.currentThread().setContextClassLoader(oldTCL);
}
}
} else if ( event.is(org.glassfish.internal.deployment.Deployment.APPLICATION_STARTED) ) {
ApplicationInfo appInfo = (ApplicationInfo)event.hook();
WeldBootstrap bootstrap = (WeldBootstrap)appInfo.getTransientAppMetaData(WELD_BOOTSTRAP,
WeldBootstrap.class);
if( bootstrap != null ) {
try {
bootstrap.validateBeans();
bootstrap.endInitialization();
} catch (Throwable t) {
DeploymentException de = new DeploymentException(t.getMessage());
de.initCause(t);
throw(de);
}
}
} else if ( event.is(org.glassfish.internal.deployment.Deployment.APPLICATION_STOPPED) ||
event.is(org.glassfish.internal.deployment.Deployment.APPLICATION_UNLOADED)) {
ApplicationInfo appInfo = (ApplicationInfo)event.hook();
Application app = appInfo.getMetaData(Application.class);
if( app != null ) {
for(BundleDescriptor next : app.getBundleDescriptors()) {
if( next instanceof EjbBundleDescriptor || next instanceof WebBundleDescriptor ) {
bundleToBeanDeploymentArchive.remove(next);
}
}
appToBootstrap.remove(app);
}
String shutdown = appInfo.getTransientAppMetaData(WELD_SHUTDOWN, String.class);
if (Boolean.valueOf(shutdown) == Boolean.TRUE) {
return;
}
WeldBootstrap bootstrap = (WeldBootstrap)appInfo.getTransientAppMetaData(WELD_BOOTSTRAP,
WeldBootstrap.class);
if (bootstrap != null) {
try {
bootstrap.shutdown();
} catch(Exception e) {
_logger.log(Level.WARNING, "JCDI shutdown error", e);
}
appInfo.addTransientAppMetaData(WELD_SHUTDOWN, "true");
}