Author: rmannibucau
Date: Wed Dec 19 20:03:51 2012
New Revision: 1424067

URL: http://svn.apache.org/viewvc?rev=1424067&view=rev
Log:
TOMEE-668 custom skipped context for webservice without web associated + 
respecting FORCE_LOAD/SKIP var in our classtransformer

Added:
    
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/IgnoredStandardContext.java
Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceUnitInfoImpl.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java
    
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/GlobalListenerSupport.java
    
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java
    
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
    
openejb/trunk/openejb/tomee/tomee-webservices/src/main/java/org/apache/tomee/webservices/TomcatWsRegistry.java

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceUnitInfoImpl.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceUnitInfoImpl.java?rev=1424067&r1=1424066&r2=1424067&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceUnitInfoImpl.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceUnitInfoImpl.java
 Wed Dec 19 20:03:51 2012
@@ -17,6 +17,8 @@
 package org.apache.openejb.persistence;
 
 
+import org.apache.openejb.util.classloader.URLClassLoaderFirst;
+
 import javax.persistence.SharedCacheMode;
 import javax.persistence.ValidationMode;
 import javax.persistence.spi.ClassTransformer;
@@ -325,6 +327,17 @@ public class PersistenceUnitInfoImpl imp
     // not the shouldSkip() method from UrlClassLoaderFirst since we skip more 
here
     // we just need JPA stuff so all the tricks we have for the server part 
are useless
     public static boolean isServerClass(final String name) {
+        for (String prefix : URLClassLoaderFirst.FORCED_SKIP) {
+            if (name.startsWith(prefix)) {
+                return true;
+            }
+        }
+        for (String prefix : URLClassLoaderFirst.FORCED_LOAD) {
+            if (name.startsWith(prefix)) {
+                return false;
+            }
+        }
+
         if (name.startsWith("java.")) return true;
         if (name.startsWith("javax.")) return true;
         if (name.startsWith("sun.")) return true;

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java?rev=1424067&r1=1424066&r2=1424067&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java
 Wed Dec 19 20:03:51 2012
@@ -36,8 +36,8 @@ public class URLClassLoaderFirst extends
     private static final boolean SKIP_COMMONS_NET = 
skipLib("org.apache.commons.net.pop3.POP3Client");
 
     // - will not match anything, that's the desired default behavior
-    private static final Collection<String> FORCED_SKIP = new 
ArrayList<String>();
-    private static final Collection<String> FORCED_LOAD = new 
ArrayList<String>();
+    public static final Collection<String> FORCED_SKIP = new 
ArrayList<String>();
+    public static final Collection<String> FORCED_LOAD = new 
ArrayList<String>();
 
     static {
         reloadConfig();

Modified: 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/GlobalListenerSupport.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/GlobalListenerSupport.java?rev=1424067&r1=1424066&r2=1424067&view=diff
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/GlobalListenerSupport.java
 (original)
+++ 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/GlobalListenerSupport.java
 Wed Dec 19 20:03:51 2012
@@ -89,8 +89,12 @@ public class GlobalListenerSupport imple
     public void lifecycleEvent(LifecycleEvent event) {
         Object source = event.getSource();
         if (source instanceof StandardContext) {
-            StandardContext standardContext = (StandardContext) source;
-            String type = event.getType();
+            final StandardContext standardContext = (StandardContext) source;
+            if (standardContext instanceof IgnoredStandardContext) {
+                return;
+            }
+
+            final String type = event.getType();
 
             if (INIT_EVENT.equals(type) || 
Lifecycle.BEFORE_INIT_EVENT.equals(type)) {
                 contextListener.init(standardContext);

Added: 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/IgnoredStandardContext.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/IgnoredStandardContext.java?rev=1424067&view=auto
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/IgnoredStandardContext.java
 (added)
+++ 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/IgnoredStandardContext.java
 Wed Dec 19 20:03:51 2012
@@ -0,0 +1,41 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.tomee.catalina;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.Lifecycle;
+import org.apache.catalina.LifecycleEvent;
+import org.apache.catalina.LifecycleListener;
+import org.apache.catalina.core.StandardContext;
+
+public class IgnoredStandardContext extends StandardContext {
+    public IgnoredStandardContext() {
+        // Tomcat has a stupid rule where a life cycle listener must set
+        // configured true, or it will treat it as a failed deployment
+        addLifecycleListener(new LifecycleListener() {
+            public void lifecycleEvent(LifecycleEvent event) {
+                Context context = (Context) event.getLifecycle();
+                if (event.getType().equals(Lifecycle.START_EVENT)
+                        || event.getType().equals(Lifecycle.BEFORE_START_EVENT)
+                        || 
event.getType().equals(Lifecycle.CONFIGURE_START_EVENT)) {
+                    context.setConfigured(true);
+                }
+            }
+        });
+    }
+}

Modified: 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java?rev=1424067&r1=1424066&r2=1424067&view=diff
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java
 (original)
+++ 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java
 Wed Dec 19 20:03:51 2012
@@ -207,7 +207,7 @@ public class TomcatJndiBuilder {
         TomcatWebAppBuilder.ContextInfo contextInfo = null;
         if (builder != null) {
             contextInfo = builder.getContextInfo(standardContext);
-            if (webContext == null && contextInfo.appInfo != null) { // can 
happen if deployed from apps/
+            if (webContext == null && contextInfo != null && 
contextInfo.appInfo != null) { // can happen if deployed from apps/
                 for (WebAppInfo webAppInfo : contextInfo.appInfo.webApps) {
                     if (webAppInfo.path != null && 
webAppInfo.path.equals(standardContext.getDocBase())) {
                         webContext = cs.getWebContext(webAppInfo.moduleId);
@@ -292,10 +292,8 @@ public class TomcatJndiBuilder {
 
             if (webContext != null) {
                 comp.rebind("BeanManager", 
webContext.getAppContext().getBeanManager());
-            } else { // possible?
-                comp.rebind("BeanManager", cs.getAppContext(
-                        ((TomcatWebAppBuilder) 
SystemInstance.get().getComponent(WebAppBuilder.class))
-                            
.getContextInfo(standardContext).appInfo.appId).getBeanManager());
+            } else if (contextInfo != null) {
+                comp.rebind("BeanManager", 
cs.getAppContext(contextInfo.appInfo.appId).getBeanManager());
             }
         } catch (Exception ignored) {
             ignored.printStackTrace();

Modified: 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java?rev=1424067&r1=1424066&r2=1424067&view=diff
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
 (original)
+++ 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
 Wed Dec 19 20:03:51 2012
@@ -687,6 +687,8 @@ public class TomcatWebAppBuilder impleme
      */
     @Override
     public void init(final StandardContext standardContext) {
+        if (isIgnored(standardContext)) return;
+
         // just adding a carriage return to get logs more readable
         logger.info("-------------------------\nTomcatWebAppBuilder.init " + 
finalName(standardContext.getPath()));
 
@@ -1485,7 +1487,9 @@ public class TomcatWebAppBuilder impleme
         // useful to disable web applications deployment
         // it can be placed in the context.xml file, server.xml, ...
         // see 
http://tomcat.apache.org/tomcat-5.5-doc/config/context.html#Context_Parameters
-        return 
standardContext.getServletContext().getAttribute(IGNORE_CONTEXT) != null || 
standardContext.getServletContext().getInitParameter(IGNORE_CONTEXT) != null;
+        return 
standardContext.getServletContext().getAttribute(IGNORE_CONTEXT) != null
+                || 
standardContext.getServletContext().getInitParameter(IGNORE_CONTEXT) != null
+                || standardContext instanceof IgnoredStandardContext;
     }
 
     /**

Modified: 
openejb/trunk/openejb/tomee/tomee-webservices/src/main/java/org/apache/tomee/webservices/TomcatWsRegistry.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webservices/src/main/java/org/apache/tomee/webservices/TomcatWsRegistry.java?rev=1424067&r1=1424066&r2=1424067&view=diff
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-webservices/src/main/java/org/apache/tomee/webservices/TomcatWsRegistry.java
 (original)
+++ 
openejb/trunk/openejb/tomee/tomee-webservices/src/main/java/org/apache/tomee/webservices/TomcatWsRegistry.java
 Wed Dec 19 20:03:51 2012
@@ -21,9 +21,6 @@ import org.apache.catalina.Container;
 import org.apache.catalina.Context;
 import org.apache.catalina.Engine;
 import org.apache.catalina.Host;
-import org.apache.catalina.Lifecycle;
-import org.apache.catalina.LifecycleEvent;
-import org.apache.catalina.LifecycleListener;
 import org.apache.catalina.Service;
 import org.apache.catalina.Wrapper;
 import org.apache.catalina.authenticator.BasicAuthenticator;
@@ -40,6 +37,7 @@ import org.apache.openejb.loader.SystemI
 import org.apache.openejb.server.httpd.HttpListener;
 import org.apache.openejb.server.webservices.WsRegistry;
 import org.apache.openejb.server.webservices.WsServlet;
+import org.apache.tomee.catalina.IgnoredStandardContext;
 import org.apache.tomee.catalina.OpenEJBValve;
 import org.apache.tomee.catalina.TomEERuntimeException;
 import org.apache.tomee.loader.TomcatHelper;
@@ -53,7 +51,6 @@ import java.util.Map;
 import java.util.TreeMap;
 
 import static org.apache.tomee.catalina.BackportUtil.getServlet;
-import static org.apache.tomee.catalina.TomcatWebAppBuilder.IGNORE_CONTEXT;
 
 public class TomcatWsRegistry implements WsRegistry {
     private static final String WEBSERVICE_SUB_CONTEXT = 
forceSlash(SystemInstance.get().getOptions().get("tomee.jaxws.subcontext", 
"/webservices"));
@@ -206,29 +203,12 @@ public class TomcatWsRegistry implements
     }
 
     private static Context createNewContext(String path, ClassLoader 
classLoader, String authMethod, String transportGuarantee, String realmName) {
-        StandardContext context = new StandardContext();
+        final StandardContext context = new IgnoredStandardContext();
         context.setPath(path);
         context.setDocBase("");
         context.setParentClassLoader(classLoader);
         context.setDelegate(true);
 
-        // Tomcat has a stupid rule where a life cycle listener must set
-        // configured true, or it will treat it as a failed deployment
-        context.addLifecycleListener(new LifecycleListener() {
-            public void lifecycleEvent(LifecycleEvent event) {
-                Context context = (Context) event.getLifecycle();
-
-                if (event.getType().equals(Lifecycle.BEFORE_START_EVENT)) {
-                    context.getServletContext().setAttribute(IGNORE_CONTEXT, 
"true");
-                }
-
-
-                if (event.getType().equals(Lifecycle.START_EVENT) || 
event.getType().equals(Lifecycle.BEFORE_START_EVENT) || 
event.getType().equals("configure_start")) {
-                    context.setConfigured(true);
-                }
-            }
-        });
-
         // Configure security
         if (authMethod != null) {
             authMethod = authMethod.toUpperCase();


Reply via email to