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>