You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/12/23 21:15:45 UTC

[1/2] tomee git commit: @Initialized(SessionScoped.class) @Destroyed(SessionScoped.class)

Repository: tomee
Updated Branches:
  refs/heads/develop 7b293f9e8 -> e7fd305a8


@Initialized(SessionScoped.class) @Destroyed(SessionScoped.class)


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/1d1b3fec
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/1d1b3fec
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/1d1b3fec

Branch: refs/heads/develop
Commit: 1d1b3fec8967dd0413d1978d2e19d32882bf1296
Parents: 7b293f9
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Tue Dec 23 20:56:28 2014 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Tue Dec 23 20:56:28 2014 +0100

----------------------------------------------------------------------
 .../openejb/OpenEJBConfiguration.java           |  9 +++++++++
 .../openejb/OpenEJBDeployableContainer.java     |  8 ++++++--
 .../openejb/cdi/CdiAppContextsService.java      | 11 ++++++++---
 .../org/apache/openejb/cdi/ScopeHelper.java     |  4 ----
 .../server/httpd/HttpListenerRegistry.java      | 20 ++++++++++++--------
 .../openejb/server/httpd/HttpRequestImpl.java   | 10 +++++-----
 tck/cdi-embedded/pom.xml                        |  1 +
 .../src/test/resources/arquillian.xml           |  1 +
 tck/cdi-embedded/src/test/resources/failing.xml |  3 ++-
 9 files changed, 44 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/1d1b3fec/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBConfiguration.java
----------------------------------------------------------------------
diff --git a/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBConfiguration.java b/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBConfiguration.java
index 23cdb2f..093caca 100644
--- a/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBConfiguration.java
+++ b/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBConfiguration.java
@@ -29,6 +29,7 @@ import static java.util.Arrays.asList;
 public class OpenEJBConfiguration implements ContainerConfiguration {
     private String properties = "";
     private String preloadClasses;
+    private boolean startDefaultScopes;
     private Collection<String> singleDeploymentByArchiveName = Collections.emptyList();
 
     @Override
@@ -36,6 +37,14 @@ public class OpenEJBConfiguration implements ContainerConfiguration {
         // no-op
     }
 
+    public boolean isStartDefaultScopes() {
+        return startDefaultScopes;
+    }
+
+    public void setStartDefaultScopes(final boolean startDefaultScopes) {
+        this.startDefaultScopes = startDefaultScopes;
+    }
+
     public String getProperties() {
         return properties;
     }

http://git-wip-us.apache.org/repos/asf/tomee/blob/1d1b3fec/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
----------------------------------------------------------------------
diff --git a/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java b/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
index 17875fa..d9cf807 100644
--- a/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
+++ b/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
@@ -288,7 +288,9 @@ public class OpenEJBDeployableContainer implements DeployableContainer<OpenEJBCo
                 final ServletContext appServletContext = new MockServletContext();
                 final HttpSession appSession = new MockHttpSession();
 
-                startContexts(appCtx.getWebBeansContext().getContextsService(), appServletContext, appSession);
+                if (configuration.isStartDefaultScopes()) {
+                    startContexts(appCtx.getWebBeansContext().getContextsService(), appServletContext, appSession);
+                }
 
                 info = new DeploymentInfo(appServletContext, appSession, appInfo, appCtx);
                 if (configuration.isSingleDeploymentByArchiveName(name)) {
@@ -327,7 +329,9 @@ public class OpenEJBDeployableContainer implements DeployableContainer<OpenEJBCo
             if (!configuration.isSingleDeploymentByArchiveName(archive.getName())) {
                 assembler.destroyApplication(info.get().path);
             }
-            stopContexts(ctx.getWebBeansContext().getContextsService(), servletContext.get(), session.get());
+            if (configuration.isStartDefaultScopes()) {
+                stopContexts(ctx.getWebBeansContext().getContextsService(), servletContext.get(), session.get());
+            }
         } catch (final Exception e) {
             throw new DeploymentException("can't undeploy " + archive.getName(), e);
         }

http://git-wip-us.apache.org/repos/asf/tomee/blob/1d1b3fec/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
index 0e6db75..c519838 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
@@ -53,6 +53,7 @@ import javax.servlet.ServletRequest;
 import javax.servlet.ServletRequestEvent;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpSessionEvent;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Constructor;
 import java.util.ArrayList;
@@ -342,14 +343,13 @@ public class CdiAppContextsService extends AbstractContextsService implements Co
         if (currentSessionContext == null) {
             currentSessionContext = newSessionContext(session);
             sessionCtxManager.addNewSessionContext(sessionId, currentSessionContext);
+            webBeansContext.getBeanManagerImpl().fireEvent(session, InitializedLiteral.SESSION);
         }
         //Activate
         currentSessionContext.setActive(true);
 
         //Set thread local
         sessionContext.set(currentSessionContext);
-
-        webBeansContext.getBeanManagerImpl().fireEvent(session, InitializedLiteral.SESSION);
     }
 
     private SessionContext newSessionContext(final HttpSession session) {
@@ -385,8 +385,13 @@ public class CdiAppContextsService extends AbstractContextsService implements Co
             //Destroy context
             if (context != null) {
                 context.destroy();
+                pushRequestReleasable(new Runnable() { // call it at the end of the request
+                    @Override
+                    public void run() {
+                        webBeansContext.getBeanManagerImpl().fireEvent(session, DestroyedLiteral.SESSION);
+                    }
+                });
             }
-            webBeansContext.getBeanManagerImpl().fireEvent(session, DestroyedLiteral.SESSION);
 
             //Clear thread locals
             sessionContext.set(null);

http://git-wip-us.apache.org/repos/asf/tomee/blob/1d1b3fec/container/openejb-core/src/main/java/org/apache/openejb/cdi/ScopeHelper.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/ScopeHelper.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/ScopeHelper.java
index ba6b335..b7b328e 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/ScopeHelper.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/ScopeHelper.java
@@ -34,16 +34,12 @@ public final class ScopeHelper {
     }
 
     public static void startContexts(final ContextsService contextsService, final ServletContext servletContext, final HttpSession session) throws Exception {
-        contextsService.startContext(Singleton.class, null);
-        contextsService.startContext(ApplicationScoped.class, null);
         contextsService.startContext(SessionScoped.class, session);
         contextsService.startContext(RequestScoped.class, null);
         contextsService.startContext(ConversationScoped.class, null);
     }
 
     public static void stopContexts(final ContextsService contextsService, final ServletContext servletContext, final HttpSession session) throws Exception {
-        contextsService.endContext(Singleton.class, null);
-        contextsService.endContext(ApplicationScoped.class, null);
         contextsService.endContext(SessionScoped.class, session);
         contextsService.endContext(RequestScoped.class, null);
         contextsService.endContext(ConversationScoped.class, null);

http://git-wip-us.apache.org/repos/asf/tomee/blob/1d1b3fec/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java
index dc7439e..5e59086 100644
--- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java
+++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java
@@ -39,19 +39,23 @@ public class HttpListenerRegistry implements HttpListener {
     private final ThreadLocal<HttpRequest> request = new ThreadLocal<>();
 
     public HttpListenerRegistry() {
+        HttpServletRequest mock = null;
         final SystemInstance systemInstance = SystemInstance.get();
-        HttpRequestImpl mockRequest = null;
-        try {
-            mockRequest = new HttpRequestImpl(new URI("http://mock/"));
-            mockRequest.parseURI(new StringTokenizer("mock\n"));  // will do http://mock/mock, we don't really care
-        } catch (final Exception e) {
-            // no-op
+        if ("true".equalsIgnoreCase(systemInstance.getProperty("openejb.http.mock-request", "false"))) {
+            HttpRequestImpl mockRequest = null;
+            try {
+                mockRequest = new HttpRequestImpl(new URI("http://mock/"));
+                mockRequest.parseURI(new StringTokenizer("mock\n"));  // will do http://mock/mock, we don't really care
+                mock = mockRequest;
+            } catch (final Exception e) {
+                // no-op
+            }
         }
         if (systemInstance.getComponent(HttpServletRequest.class) == null) {
-            systemInstance.setComponent(HttpServletRequest.class, Proxys.threadLocalProxy(HttpServletRequest.class, request, mockRequest));
+            systemInstance.setComponent(HttpServletRequest.class, Proxys.threadLocalProxy(HttpServletRequest.class, request, mock));
         }
         if (systemInstance.getComponent(HttpSession.class) == null) {
-            systemInstance.setComponent(javax.servlet.http.HttpSession.class, Proxys.threadLocalRequestSessionProxy(request, mockRequest.getSession()));
+            systemInstance.setComponent(javax.servlet.http.HttpSession.class, Proxys.threadLocalRequestSessionProxy(request, mock != null ? mock.getSession() : null));
         }
         if (systemInstance.getComponent(ServletContext.class) == null) { // a poor impl but at least we set something
             systemInstance.setComponent(ServletContext.class, new EmbeddedServletContext());

http://git-wip-us.apache.org/repos/asf/tomee/blob/1d1b3fec/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java
index 10320a9..8106485 100644
--- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java
+++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java
@@ -836,15 +836,15 @@ public class HttpRequestImpl implements HttpRequest {
     public HttpSession getSession(boolean create) {
         if (session == null && create) {
             session = new HttpSessionImpl(SESSIONS);
+            if (begin != null) {
+                begin.sessionCreated(new HttpSessionEvent(session));
+                session = new SessionInvalidateListener(session, end);
+            }
+
             final HttpSession previous = SESSIONS.putIfAbsent(session.getId(), session);
             if (previous != null) {
                 session = previous;
             }
-
-            if (begin != null) {
-                begin.sessionCreated(new HttpSessionEvent(session));
-                return new SessionInvalidateListener(session, end);
-            }
         }
         return session;
     }

http://git-wip-us.apache.org/repos/asf/tomee/blob/1d1b3fec/tck/cdi-embedded/pom.xml
----------------------------------------------------------------------
diff --git a/tck/cdi-embedded/pom.xml b/tck/cdi-embedded/pom.xml
index 799b3a3..9229a50 100644
--- a/tck/cdi-embedded/pom.xml
+++ b/tck/cdi-embedded/pom.xml
@@ -164,6 +164,7 @@
             <openejb.cdi.producer.interception>false</openejb.cdi.producer.interception>
             <openejb.cdi.filter.classloader>false</openejb.cdi.filter.classloader>
 
+            <openejb.http.mock-request>true</openejb.http.mock-request>
             <openejb.deploymentId.format>{appId}/{ejbJarId}/{ejbName}</openejb.deploymentId.format>
             <org.apache.openejb.assembler.classic.WebAppBuilder>org.apache.openejb.web.LightweightWebAppBuilder</org.apache.openejb.assembler.classic.WebAppBuilder>
           </systemPropertyVariables>

http://git-wip-us.apache.org/repos/asf/tomee/blob/1d1b3fec/tck/cdi-embedded/src/test/resources/arquillian.xml
----------------------------------------------------------------------
diff --git a/tck/cdi-embedded/src/test/resources/arquillian.xml b/tck/cdi-embedded/src/test/resources/arquillian.xml
index 3742ce9..0b46313 100644
--- a/tck/cdi-embedded/src/test/resources/arquillian.xml
+++ b/tck/cdi-embedded/src/test/resources/arquillian.xml
@@ -23,6 +23,7 @@
 
   <container qualifier="openejb" default="true">
     <configuration>
+      <property name="startDefaultScopes">false</property>
       <property name="properties">
         Default\ JMS\ Resource\ Adapter = new://Resource?type=ActiveMQResourceAdapter
 

http://git-wip-us.apache.org/repos/asf/tomee/blob/1d1b3fec/tck/cdi-embedded/src/test/resources/failing.xml
----------------------------------------------------------------------
diff --git a/tck/cdi-embedded/src/test/resources/failing.xml b/tck/cdi-embedded/src/test/resources/failing.xml
index 56d4e5d..86ff055 100644
--- a/tck/cdi-embedded/src/test/resources/failing.xml
+++ b/tck/cdi-embedded/src/test/resources/failing.xml
@@ -17,8 +17,9 @@
   -->
 <suite name="CDI TCK" verbose="0">
   <test name="CDI TCK">
+    <!-- -Dopenejb.cdi.filter.classloader=false -Dorg.apache.openejb.assembler.classic.WebAppBuilder=org.apache.openejb.web.LightweightWebAppBuilder -Dopenejb.cdi.debug=true -Dopenejb.http.mock-request=true  -->
     <classes>
-      <class name="org.jboss.cdi.tck.tests.context.request.event.RequestScopeEventTest" />
+      <class name="org.jboss.cdi.tck.tests.context.session.event.SessionScopeEventTest" />
     </classes>
   </test>
 </suite>


[2/2] tomee git commit: validation of EJB impl classes - asked on the cdi list if this test makes any sense

Posted by rm...@apache.org.
validation of EJB impl classes - asked on the cdi list if this test makes any sense


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/e7fd305a
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/e7fd305a
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/e7fd305a

Branch: refs/heads/develop
Commit: e7fd305a8acb598cf3a333d25c9bff6cfa85a397
Parents: 1d1b3fe
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Tue Dec 23 21:15:30 2014 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Tue Dec 23 21:15:30 2014 +0100

----------------------------------------------------------------------
 .../java/org/apache/openejb/BeanContext.java    | 37 ++++++++++++++++++++
 tck/cdi-embedded/src/test/resources/failing.xml |  2 +-
 2 files changed, 38 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/e7fd305a/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java b/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
index 7d45925..9ba9c73 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
@@ -70,13 +70,16 @@ import javax.ejb.Timer;
 import javax.enterprise.context.ConversationScoped;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Decorator;
+import javax.enterprise.inject.spi.DeploymentException;
 import javax.enterprise.inject.spi.Interceptor;
 import javax.naming.Context;
 import javax.persistence.EntityManagerFactory;
+import java.io.Serializable;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
+import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -119,6 +122,7 @@ public class BeanContext extends DeploymentContext {
             return;
         }
 
+        boolean hasInterceptor = false;
         for (final Map.Entry<Method, InterceptorResolutionService.BusinessMethodInterceptorInfo> entry : info.getBusinessMethodsInfo().entrySet()) {
             final Interceptor<?>[] interceptors = entry.getValue().getCdiInterceptors();
             if (interceptors == null) {
@@ -128,10 +132,43 @@ public class BeanContext extends DeploymentContext {
             for (final Interceptor<?> i : interceptors) {
                 addCdiMethodInterceptor(entry.getKey(), InterceptorData.scan(i.getBeanClass()));
             }
+            hasInterceptor = hasInterceptor || interceptors.length > 0;
             entry.getValue().setEjbInterceptors(new ArrayList<Interceptor<?>>());
             entry.getValue().setCdiInterceptors(new ArrayList<Interceptor<?>>());
         }
 
+        if (hasInterceptor) { // 100% for TCKs, doesn't make any sense
+            for (final Method m : getManagedClass().getDeclaredMethods()) {
+                boolean inApi = false;
+                final Set<Type> types = cdiEjbBean.getTypes();
+                for (final Type t : types) {
+                    if (t == Object.class || t == Serializable.class) {
+                        continue;
+                    }
+                    if (m.getDeclaringClass() == t) {
+                        inApi = true;
+                        break;
+                    }
+                    if (Class.class.isInstance(t)) {
+                        try {
+                            Class.class.cast(t).getMethod(m.getName(), m.getParameterTypes());
+                            inApi = true;
+                            break;
+                        } catch (final NoSuchMethodException e) {
+                            // no-op
+                        }
+                    }
+                }
+                if (inApi) {
+                    continue;
+                }
+                final int modifiers = m.getModifiers();
+                if (Modifier.isFinal(modifiers) && !Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers)) {
+                    throw new DeploymentException("We need to proxy " + getManagedClass() + " but " + m + " is final");
+                }
+            }
+        }
+
         if (info.getSelfInterceptorBean() != null) { // handled by openejb
             try {
                 final Field field = InterceptorResolutionService.BeanInterceptorInfo.class.getDeclaredField("selfInterceptorBean");

http://git-wip-us.apache.org/repos/asf/tomee/blob/e7fd305a/tck/cdi-embedded/src/test/resources/failing.xml
----------------------------------------------------------------------
diff --git a/tck/cdi-embedded/src/test/resources/failing.xml b/tck/cdi-embedded/src/test/resources/failing.xml
index 86ff055..d9a8ded 100644
--- a/tck/cdi-embedded/src/test/resources/failing.xml
+++ b/tck/cdi-embedded/src/test/resources/failing.xml
@@ -19,7 +19,7 @@
   <test name="CDI TCK">
     <!-- -Dopenejb.cdi.filter.classloader=false -Dorg.apache.openejb.assembler.classic.WebAppBuilder=org.apache.openejb.web.LightweightWebAppBuilder -Dopenejb.cdi.debug=true -Dopenejb.http.mock-request=true  -->
     <classes>
-      <class name="org.jboss.cdi.tck.tests.context.session.event.SessionScopeEventTest" />
+      <class name="org.jboss.cdi.tck.tests.interceptors.definition.broken.finalClassInterceptor.FinalMethodClassLevelInterceptorTest" />
     </classes>
   </test>
 </suite>