Author: rmannibucau
Date: Mon Aug 6 13:52:51 2012
New Revision: 1369846
URL: http://svn.apache.org/viewvc?rev=1369846&view=rev
Log:
OPENEJB-1884 stopping application (from a cdi point of view) when destroying
application (openejb point of view) - needs to be ran agains cdi tcks
Added:
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/cdi/WebbeansContextInEmbeddedModeTest.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiBuilder.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OWBContextThreadListener.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1369846&r1=1369845&r2=1369846&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
Mon Aug 6 13:52:51 2012
@@ -43,6 +43,7 @@ import org.apache.openejb.assembler.clas
import org.apache.openejb.assembler.monitoring.JMXContainer;
import org.apache.openejb.cdi.CdiAppContextsService;
import org.apache.openejb.cdi.CdiBuilder;
+import org.apache.openejb.cdi.CdiPlugin;
import org.apache.openejb.cdi.CdiResourceInjectionService;
import org.apache.openejb.cdi.CdiScanner;
import org.apache.openejb.cdi.CustomELAdapter;
@@ -101,6 +102,7 @@ import org.apache.openejb.util.SafeToolk
import org.apache.openejb.util.proxy.ProxyFactory;
import org.apache.openejb.util.proxy.ProxyManager;
import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.spi.ContainerLifecycle;
import org.apache.webbeans.spi.ContextsService;
import org.apache.webbeans.spi.LoaderService;
import org.apache.webbeans.spi.ResourceInjectionService;
@@ -1172,6 +1174,11 @@ public class Assembler extends Assembler
return;
} else {
+ final WebBeansContext webBeansContext =
appContext.getWebBeansContext();
+ if (webBeansContext != null &&
webBeansContext.getBeanManagerImpl().isInUse()) {
+
webBeansContext.getService(ContainerLifecycle.class).stopApplication(null);
+ }
+
final Map<String, Object> cb = appContext.getBindings();
for (Map.Entry<String, Object> value : cb.entrySet()) {
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java?rev=1369846&r1=1369845&r2=1369846&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
Mon Aug 6 13:52:51 2012
@@ -25,6 +25,7 @@ import org.apache.webbeans.el.ELContextS
import org.apache.webbeans.spi.ContextsService;
import org.apache.webbeans.web.context.ServletRequestContext;
import org.apache.webbeans.web.context.SessionContextManager;
+import org.apache.webbeans.web.intercept.RequestScopedBeanInterceptorHandler;
import javax.enterprise.context.*;
import javax.enterprise.context.spi.Context;
@@ -77,7 +78,7 @@ public class CdiAppContextsService exten
startContext(Singleton.class, initializeObject);
}
- public void destroy(Object destroyObject) {
+ public void destroy(Object destroyObjectUnused) {
// //Destroy application context
// endContext(ApplicationScoped.class, destroyObject);
//
@@ -242,6 +243,8 @@ public class CdiAppContextsService exten
conversationContext.set(null);
conversationContext.remove();
}
+
+ RequestScopedBeanInterceptorHandler.removeThreadLocals();
}
/**
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiBuilder.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiBuilder.java?rev=1369846&r1=1369845&r2=1369846&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiBuilder.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiBuilder.java
Mon Aug 6 13:52:51 2012
@@ -16,6 +16,7 @@
*/
package org.apache.openejb.cdi;
+import java.lang.reflect.Field;
import java.util.List;
import org.apache.openejb.AppContext;
@@ -34,6 +35,7 @@ import org.apache.webbeans.config.WebBea
*/
public class CdiBuilder {
private static final Logger logger =
Logger.getInstance(LogCategory.OPENEJB_CDI, CdiBuilder.class);
+ private static final ThreadSingletonService SINGLETON_SERVICE = new
ThreadSingletonServiceImpl();
public CdiBuilder() {
}
@@ -67,21 +69,21 @@ public class CdiBuilder {
return false;
}
- public static ThreadSingletonService initializeOWB(ClassLoader
classLoader) {
- ThreadSingletonService singletonService = new
ThreadSingletonServiceImpl();
- logger.info("Created new singletonService " + singletonService);
- SystemInstance.get().setComponent(ThreadSingletonService.class,
singletonService);
+ public static ThreadSingletonService initializeOWB(final ClassLoader
classLoader) {
+ logger.info("Created new singletonService " + SINGLETON_SERVICE);
+ SystemInstance.get().setComponent(ThreadSingletonService.class,
SINGLETON_SERVICE);
try {
- WebBeansFinder.setSingletonService(singletonService);
+ WebBeansFinder.setSingletonService(SINGLETON_SERVICE);
logger.info("Succeeded in installing singleton service");
} catch (Exception e) {
//ignore
// not logging the exception since it is nto an error
- logger.info("Could not install our singleton service");
+ logger.debug("Could not install our singleton service");
}
+
//TODO there must be a better place to initialize this
ThreadContext.addThreadContextListener(new OWBContextThreadListener());
- return singletonService;
+ return SINGLETON_SERVICE;
}
}
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OWBContextThreadListener.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OWBContextThreadListener.java?rev=1369846&r1=1369845&r2=1369846&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OWBContextThreadListener.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OWBContextThreadListener.java
Mon Aug 6 13:52:51 2012
@@ -31,7 +31,7 @@ import org.apache.webbeans.config.WebBea
*/
public class OWBContextThreadListener implements ThreadContextListener {
- ThreadSingletonService singletonService =
SystemInstance.get().getComponent(ThreadSingletonService.class);
+ private ThreadSingletonService singletonService =
SystemInstance.get().getComponent(ThreadSingletonService.class);
@Override
public void contextEntered(ThreadContext oldContext, ThreadContext
newContext) {
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java?rev=1369846&r1=1369845&r2=1369846&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
Mon Aug 6 13:52:51 2012
@@ -16,8 +16,6 @@
*/
package org.apache.openejb.cdi;
-import java.util.LinkedHashMap;
-import java.util.Map;
import org.apache.openejb.AppContext;
import org.apache.openejb.BeanContext;
import org.apache.openejb.OpenEJBRuntimeException;
@@ -59,7 +57,9 @@ import java.io.IOException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashSet;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.Executors;
@@ -425,13 +425,13 @@ public class OpenEJBLifecycle implements
try
{
//Sub-classes operations
- beforeStopApplication(endObject);
+ beforeStopApplication(null);
//Fire shut down
this.beanManager.fireEvent(new BeforeShutdownImpl(),
BeansDeployer.EMPTY_ANNOTATION_ARRAY);
//Destroys context
- this.contextsService.destroy(endObject);
+ this.contextsService.destroy(null);
//Unbind BeanManager
if (jndiService != null) {
@@ -454,7 +454,7 @@ public class OpenEJBLifecycle implements
webBeansContext.getAnnotatedElementFactory().clear();
//After Stop
- afterStopApplication(endObject);
+ afterStopApplication(null);
// Clear BeanManager
this.beanManager.clear();
@@ -605,11 +605,7 @@ public class OpenEJBLifecycle implements
this.cleanupShutdownThreadLocals();
- if (logger.isInfoEnabled())
- {
- stopObject = getServletContext(stopObject);
- logger.info("OpenWebBeans Container has stopped for context
path,", stopObject instanceof ServletContext?
((ServletContext)stopObject).getContextPath() : stopObject);
- }
+ WebBeansFinder.clearInstances(WebBeansUtil.getCurrentClassLoader());
}
/**
@@ -619,7 +615,6 @@ public class OpenEJBLifecycle implements
private void cleanupShutdownThreadLocals()
{
// TODO maybe there are more to cleanup
-
InjectionPointBean.removeThreadLocal();
}
Added:
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/cdi/WebbeansContextInEmbeddedModeTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/cdi/WebbeansContextInEmbeddedModeTest.java?rev=1369846&view=auto
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/cdi/WebbeansContextInEmbeddedModeTest.java
(added)
+++
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/cdi/WebbeansContextInEmbeddedModeTest.java
Mon Aug 6 13:52:51 2012
@@ -0,0 +1,33 @@
+package org.apache.openejb.cdi;
+
+import org.apache.openejb.AppContext;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.junit.Module;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+import org.apache.webbeans.config.WebBeansContext;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+
+@RunWith(ApplicationComposer.class)
+public class WebbeansContextInEmbeddedModeTest {
+ @Module
+ public EjbJar jar() {
+ return new EjbJar();
+ }
+
+ @Test
+ public void checkWebbeansContext() {
+ final WebBeansContext ctx1 = WebBeansContext.currentInstance();
+ final List<AppContext> appCtxs =
SystemInstance.get().getComponent(ContainerSystem.class).getAppContexts();
+ assertEquals(1, appCtxs.size());
+ final WebBeansContext ctx2 =
appCtxs.iterator().next().getWebBeansContext();
+ assertSame(ctx1, ctx2);
+ }
+}
Modified:
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java?rev=1369846&r1=1369845&r2=1369846&view=diff
==============================================================================
---
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
(original)
+++
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
Mon Aug 6 13:52:51 2012
@@ -41,7 +41,7 @@ public class OpenEJBContextConfig extend
private TomcatWebAppBuilder.StandardContextInfo info;
public OpenEJBContextConfig(TomcatWebAppBuilder.StandardContextInfo
standardContextInfo) {
- logger.info("OpenEJBContextConfig("+standardContextInfo.toString());
+ logger.debug("OpenEJBContextConfig({0})",
standardContextInfo.toString());
info = standardContextInfo;
}
@@ -82,7 +82,7 @@ public class OpenEJBContextConfig extend
@Override
protected void processAnnotationsFile(File file, WebXml fragment,
boolean handlesTypesOnly) {
- logger.debug("processAnnotationsFile "+ file.getAbsolutePath() );
+ logger.debug("processAnnotationsFile {0}", file.getAbsolutePath() );
try {
final WebAppInfo webAppInfo = info.get();
@@ -92,7 +92,7 @@ public class OpenEJBContextConfig extend
return;
}
- logger.debug("Optimized Scan of File " + file.getAbsolutePath());
+ logger.debug("Optimized Scan of File {0}", file.getAbsolutePath());
// TODO We should just remember which jars each class came from
// then we wouldn't need to lookup the class from the URL in this
@@ -108,12 +108,12 @@ public class OpenEJBContextConfig extend
continue;
}
- logger.debug("Found " + webAnnotatedClassName);
+ logger.debug("Found {0}", webAnnotatedClassName);
final InputStream inputStream = classUrl.openStream();
try {
processAnnotationsStream(inputStream, fragment,
handlesTypesOnly);
- logger.debug("Succeeded " + webAnnotatedClassName);
+ logger.debug("Succeeded {0}", webAnnotatedClassName);
} catch (IOException e) {
e.printStackTrace();
} finally {