Repository: tomee
Updated Branches:
  refs/heads/master e60f92340 -> 2cd020560


more aggressive test to know if we need CDI filters, reworking the way cdi 
conversation filter is added to avoid earger init if no cdi is used in the app


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

Branch: refs/heads/master
Commit: 2cd020560b661eea7bd4a60a076ef796a39b5167
Parents: e60f923
Author: Romain Manni-Bucau <rmannibu...@apache.org>
Authored: Tue Jun 16 19:11:43 2015 +0200
Committer: Romain Manni-Bucau <rmannibu...@apache.org>
Committed: Tue Jun 16 19:11:43 2015 +0200

----------------------------------------------------------------------
 .../openejb/server/httpd/HttpRequestImpl.java   |  5 +-
 .../openejb/server/httpd/WebBeansFilter.java    | 17 +++--
 .../tomee/catalina/OpenEJBContextConfig.java    | 67 +++++++++++---------
 3 files changed, 51 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/2cd02056/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 3ce5c37..28274d3 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
@@ -25,6 +25,7 @@ import org.apache.openejb.server.httpd.session.SessionManager;
 import org.apache.openejb.spi.SecurityService;
 import org.apache.openejb.util.ArrayEnumeration;
 import org.apache.openejb.util.Logger;
+import org.apache.webbeans.config.WebBeansContext;
 
 import java.io.BufferedReader;
 import java.io.ByteArrayOutputStream;
@@ -1023,7 +1024,9 @@ public class HttpRequestImpl implements HttpRequest {
         final OpenEJBAsyncContext asyncContext = new 
OpenEJBAsyncContext(HttpServletRequest.class.cast(servletRequest) /* TODO */, 
servletResponse, contextPath);
         asyncContext.internalStartAsync();
         asyncStarted = true;
-        return new WebBeansFilter.AsynContextWrapper(asyncContext, 
servletRequest);
+        final WebBeansContext webBeansContext = 
WebBeansContext.currentInstance();
+        return webBeansContext != null ?
+                new WebBeansFilter.AsynContextWrapper(asyncContext, 
servletRequest, webBeansContext) : asyncContext;
     }
 
     public String getParameter(String name) {

http://git-wip-us.apache.org/repos/asf/tomee/blob/2cd02056/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/WebBeansFilter.java
----------------------------------------------------------------------
diff --git 
a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/WebBeansFilter.java
 
b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/WebBeansFilter.java
index 0cffa27..68ad46c 100644
--- 
a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/WebBeansFilter.java
+++ 
b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/WebBeansFilter.java
@@ -48,7 +48,9 @@ public class WebBeansFilter implements Filter { // its pupose 
is to start/stop r
             filterChain.doFilter(servletRequest, servletResponse);
             return;
         }
-        filterChain.doFilter(servletRequest.isAsyncSupported() ? new 
CdiRequest(HttpServletRequest.class.cast(servletRequest)) : servletRequest, 
servletResponse);
+        WebBeansContext ctx = null;
+        filterChain.doFilter(servletRequest.isAsyncSupported() &&  (ctx = 
WebBeansContext.currentInstance()) != null ?
+                new CdiRequest(HttpServletRequest.class.cast(servletRequest), 
ctx) : servletRequest, servletResponse);
     }
 
     @Override
@@ -57,18 +59,21 @@ public class WebBeansFilter implements Filter { // its 
pupose is to start/stop r
     }
 
     public static class CdiRequest extends HttpServletRequestWrapper {
-        public CdiRequest(final HttpServletRequest cast) {
+        private final WebBeansContext webBeansContext;
+
+        public CdiRequest(final HttpServletRequest cast, final WebBeansContext 
webBeansContext) {
             super(cast);
+            this.webBeansContext = webBeansContext;
         }
 
         @Override
         public AsyncContext startAsync() throws IllegalStateException {
-            return new AsynContextWrapper(super.startAsync(), getRequest());
+            return new AsynContextWrapper(super.startAsync(), getRequest(), 
webBeansContext);
         }
 
         @Override
         public AsyncContext startAsync(final ServletRequest servletRequest, 
final ServletResponse servletResponse) throws IllegalStateException {
-            return new AsynContextWrapper(super.startAsync(servletRequest, 
servletResponse), servletRequest);
+            return new AsynContextWrapper(super.startAsync(servletRequest, 
servletResponse), servletRequest, webBeansContext);
         }
     }
 
@@ -78,9 +83,9 @@ public class WebBeansFilter implements Filter { // its pupose 
is to start/stop r
         private final ServletRequest request;
         private volatile ServletRequestEvent event;
 
-        public AsynContextWrapper(final AsyncContext asyncContext, final 
ServletRequest request) {
+        public AsynContextWrapper(final AsyncContext asyncContext, final 
ServletRequest request, final WebBeansContext webBeansContext) {
             this.delegate = asyncContext;
-            this.service = 
CdiAppContextsService.class.cast(WebBeansContext.currentInstance().getService(ContextsService.class));
+            this.service = 
CdiAppContextsService.class.cast(webBeansContext.getService(ContextsService.class));
             this.event = null;
             this.request = request;
         }

http://git-wip-us.apache.org/repos/asf/tomee/blob/2cd02056/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
----------------------------------------------------------------------
diff --git 
a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
 
b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
index e5c163a..357a912 100644
--- 
a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
+++ 
b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
@@ -59,12 +59,10 @@ import org.apache.tomee.common.NamingUtil;
 import org.apache.tomee.common.ResourceFactory;
 import org.apache.tomee.jasper.TomEEJasperInitializer;
 import org.apache.tomee.loader.TomcatHelper;
+import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.web.context.WebConversationFilter;
 import org.apache.xbean.finder.IAnnotationFinder;
 
-import javax.servlet.ServletContainerInitializer;
-import javax.servlet.http.HttpServlet;
-import javax.ws.rs.core.Application;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -85,6 +83,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
+import javax.servlet.ServletContainerInitializer;
+import javax.servlet.http.HttpServlet;
+import javax.ws.rs.core.Application;
 
 public class OpenEJBContextConfig extends ContextConfig {
     private static Logger logger = Logger.getInstance(LogCategory.OPENEJB, 
OpenEJBContextConfig.class);
@@ -351,34 +352,6 @@ public class OpenEJBContextConfig extends ContextConfig {
             }
         }
 
-        final AppInfo app = info.app();
-        if (app == null || 
!"false".equals(app.properties.getProperty("openejb.cdi.activated"))) {
-            {
-                final FilterDef filter = new FilterDef();
-                filter.setAsyncSupported("true");
-                filter.setDescription("OpenEJB CDI Filter - to propagate 
@RequestScoped in async tasks");
-                filter.setDisplayName("OpenEJB CDI");
-                filter.setFilterClass(WebBeansFilter.class.getName());
-                filter.setFilterName(WebBeansFilter.class.getName());
-                webXml.addFilter(filter);
-
-                final FilterMap mapping = new FilterMap();
-                mapping.setFilterName(filter.getFilterName());
-                mapping.addURLPattern("/*");
-                webXml.addFilterMapping(mapping);
-            }
-
-            {
-                final FilterDef filter = new FilterDef();
-                filter.setAsyncSupported("true");
-                filter.setDescription("CDI Conversation Filter");
-                filter.setDisplayName("CDI Conversation Filter");
-                filter.setFilterName("CDI Conversation Filter");
-                filter.setFilterClass(WebConversationFilter.class.getName());
-                webXml.addFilter(filter);
-            }
-        }
-
         return webXml;
     }
 
@@ -386,6 +359,7 @@ public class OpenEJBContextConfig extends ContextConfig {
         public static final String OPENEJB_WEB_XML_MAJOR_VERSION_PROPERTY = 
"openejb.web.xml.major";
 
         private String prefix;
+        private boolean cdiConversation = false;
 
         public OpenEJBWebXml(final String prefix) {
             this.prefix = prefix;
@@ -396,6 +370,22 @@ public class OpenEJBContextConfig extends ContextConfig {
             return SystemInstance.get().getOptions().get(prefix + "." + 
OPENEJB_WEB_XML_MAJOR_VERSION_PROPERTY,
                     
SystemInstance.get().getOptions().get(OPENEJB_WEB_XML_MAJOR_VERSION_PROPERTY, 
super.getMajorVersion()));
         }
+
+        @Override
+        public void addFilterMapping(final FilterMap filterMap) {
+            // we need to add this one before the mapping cause of tomcat 
validation (ie dont make deployment fail)
+            if ("CDI Conversation Filter".equals(filterMap.getFilterName()) && 
!cdiConversation) {
+                final FilterDef conversationFilter = new FilterDef();
+                conversationFilter.setAsyncSupported("true");
+                conversationFilter.setDescription("CDI Conversation Filter");
+                conversationFilter.setDisplayName("CDI Conversation Filter");
+                conversationFilter.setFilterName("CDI Conversation Filter");
+                
conversationFilter.setFilterClass(WebConversationFilter.class.getName());
+                addFilter(conversationFilter);
+                cdiConversation = true;
+            }
+            super.addFilterMapping(filterMap);
+        }
     }
 
     @Override
@@ -409,6 +399,21 @@ public class OpenEJBContextConfig extends ContextConfig {
             return;
         }
 
+        if (WebBeansContext.currentInstance() != null) {
+            final FilterDef asyncOwbFilter = new FilterDef();
+            asyncOwbFilter.setAsyncSupported("true");
+            asyncOwbFilter.setDescription("OpenEJB CDI Filter - to propagate 
@RequestScoped in async tasks");
+            asyncOwbFilter.setDisplayName("OpenEJB CDI");
+            asyncOwbFilter.setFilterClass(WebBeansFilter.class.getName());
+            asyncOwbFilter.setFilterName(WebBeansFilter.class.getName());
+            context.addFilterDef(asyncOwbFilter);
+
+            final FilterMap asyncOwbMapping = new FilterMap();
+            asyncOwbMapping.setFilterName(asyncOwbFilter.getFilterName());
+            asyncOwbMapping.addURLPattern("/*");
+            context.addFilterMap(asyncOwbMapping);
+        }
+
         if 
("true".equalsIgnoreCase(SystemInstance.get().getProperty("tomee.jsp-development",
 "false"))) {
             for (final Container c : context.findChildren()) {
                 if (Wrapper.class.isInstance(c)) {

Reply via email to