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 2012/11/17 23:46:44 UTC

svn commit: r1410800 - in /openejb/trunk/openejb: container/openejb-core/src/main/java/org/apache/openejb/config/ tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/

Author: rmannibucau
Date: Sat Nov 17 22:46:43 2012
New Revision: 1410800

URL: http://svn.apache.org/viewvc?rev=1410800&view=rev
Log:
OPENEJB-1939 trying to keep tomcat resources and not throw an exception when openejb doesnt find it

Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
    openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.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

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java?rev=1410800&r1=1410799&r2=1410800&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java Sat Nov 17 22:46:43 2012
@@ -850,7 +850,7 @@ public class AutoConfig implements Dynam
 
             // Resource reference
             for (ResourceRef ref : bean.getResourceRef()) {
-                processResourceRef(ref, ejbDeployment, appResources, ejbModule.getClassLoader());
+                processResourceRef(ref, ejbDeployment, appResources, ejbModule);
             }
 
             // Resource env reference
@@ -1084,7 +1084,13 @@ public class AutoConfig implements Dynam
     private void processResourceRef(ResourceRef ref, 
                                     EjbDeployment ejbDeployment, 
                                     AppResources appResources,
-                                    ClassLoader classLoader) throws OpenEJBException {
+                                    EjbModule ejbModule) throws OpenEJBException {
+        final Collection<String> ignoredResources = PROVIDED_RESOURCES.get();
+        String ignoredResourcesPrefix = PROVIDED_RESOURCES_PREFIX.get();
+        if (ignoredResourcesPrefix == null) {
+            ignoredResourcesPrefix = "";
+        }
+
         // skip destinations with lookup name
         if (ref.getLookupName() != null) {
             return;
@@ -1096,7 +1102,7 @@ public class AutoConfig implements Dynam
         }
 
         String refName = ref.getName();
-        String refType = getType(ref, classLoader); 
+        String refType = getType(ref, ejbModule.getClassLoader());
 
         // skip references such as URLs which are automatically handled by the server
         if (ignoredReferenceTypes.contains(refType)) {
@@ -1104,7 +1110,7 @@ public class AutoConfig implements Dynam
         }
 
         try {
-            final Class<?> clazz = classLoader.loadClass(refType);
+            final Class<?> clazz = ejbModule.getClassLoader().loadClass(refType);
             if (clazz.isAnnotationPresent(ManagedBean.class)) {
                 return;
             }
@@ -1116,6 +1122,13 @@ public class AutoConfig implements Dynam
             ResourceLink link = ejbDeployment.getResourceLink(refName);
             if (link == null) {
                 String id = (mappedName.length() == 0) ? ref.getName() : mappedName;
+                if (ignoredResources != null && (ignoredResources.contains(id) || ignoredResources.contains(correctedId(ignoredResourcesPrefix, id)))) {
+                    final String correctedId = ignoredResourcesPrefix + correctedId(ignoredResourcesPrefix, id);
+                    ref.setLookupName(correctedId);
+                    ref.setName(correctedId);
+                    return;
+                }
+
                 if (id.startsWith("java:")) {
                     id = id.substring("java:".length());
                 }
@@ -1138,6 +1151,25 @@ public class AutoConfig implements Dynam
         }
     }
 
+    private static String correctedId(final String ignoredResourcesPrefix, final String id) {
+        String newId = id;
+        String ignoredId = ignoredResourcesPrefix;
+
+        // first unify beginning of the jndi name (we can get this / after java:)
+        if (newId.startsWith("java:/")) {
+            newId = "java:" + newId.substring("java:/".length());
+        }
+        if (ignoredResourcesPrefix.startsWith("java:/")) {
+            ignoredId = "java:" + ignoredResourcesPrefix.substring("java:/".length());
+        }
+
+        // remove prefix if necessary
+        if (newId.startsWith(ignoredId)) {
+            return newId.substring(ignoredId.length());
+        }
+        return newId;
+    }
+
     private void processResourceEnvRef(JndiReference ref, 
                                        EjbDeployment ejbDeployment, 
                                        AppResources appResources, 

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=1410800&r1=1410799&r2=1410800&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 Sat Nov 17 22:46:43 2012
@@ -48,6 +48,7 @@ public class OpenEJBContextConfig extend
     private static final String TOMEE_MYFACES_CONTEXT_LISTENER = "org.apache.tomee.myfaces.TomEEMyFacesContextListener";
 
     private TomcatWebAppBuilder.StandardContextInfo info;
+    private boolean configureStartOk = false;
 
     // processAnnotationXXX is called for each folder of WEB-INF
     // since we store all classes in WEB-INF we will do it only once so use this boolean to avoid multiple processing
@@ -59,6 +60,15 @@ public class OpenEJBContextConfig extend
     }
 
     @Override
+    public void configureStart() {
+        if (configureStartOk) {
+            return;
+        }
+        super.configureStart();
+        configureStartOk = true;
+    }
+
+    @Override
     protected WebXml createWebXml() {
         String prefix = "";
         if (context instanceof StandardContext) {

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=1410800&r1=1410799&r2=1410800&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 Sat Nov 17 22:46:43 2012
@@ -68,7 +68,6 @@ import org.omg.CORBA.ORB;
 
 import javax.ejb.spi.HandleDelegate;
 import javax.naming.Context;
-import javax.naming.InitialContext;
 import javax.naming.LinkRef;
 import javax.naming.NamingException;
 import javax.naming.RefAddr;
@@ -83,7 +82,6 @@ import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -132,7 +130,7 @@ public class TomcatJndiBuilder {
         this.useCrossClassLoaderRef = useCrossClassLoaderRef;
     }
 
-    public void mergeJndi() throws OpenEJBException {
+    public void mergeJndi(final Collection<String> tomcatResources) throws OpenEJBException {
 
         NamingResources naming = standardContext.getNamingResources();
 
@@ -159,6 +157,17 @@ public class TomcatJndiBuilder {
             mergeRef(naming, ref, moduleUri);
         }
         for (ResourceReferenceInfo ref : webAppInfo.jndiEnc.resourceRefs) {
+            String id = ref.referenceName;
+            if (id == null) {
+                id = ref.resourceID;
+            }
+            if (id != null && id.startsWith("comp/env/")) {
+                id = id.substring("comp/env/".length());
+            }
+            if (id != null && tomcatResources != null && tomcatResources.contains(id)) {
+                continue;
+            }
+
             mergeRef(naming, ref);
         }
         for (ResourceEnvReferenceInfo ref : webAppInfo.jndiEnc.resourceEnvRefs) {
@@ -202,6 +211,16 @@ public class TomcatJndiBuilder {
             }
         }
 
+        final TomcatWebAppBuilder builder = (TomcatWebAppBuilder) SystemInstance.get().getComponent(WebAppBuilder.class);
+        TomcatWebAppBuilder.ContextInfo contextInfo = null;
+        if (builder != null) {
+            contextInfo = builder.getContextInfo(standardContext);
+        }
+        Collection<String> ignoreNames = null;
+        if (contextInfo != null) {
+            ignoreNames = contextInfo.resourceNames;
+        }
+
         if (webContext != null && webContext.getBindings() != null && root != null) {
             for (Map.Entry<String, Object> entry : webContext.getBindings().entrySet()) {
                 try {
@@ -210,7 +229,11 @@ public class TomcatJndiBuilder {
                         continue;
                     }
 
-                    final Object value = normalize(entry.getValue());
+                    Object value = normalize(entry.getValue());
+                    if (ignoreNames.contains(removeCompEnv(key))) {
+                        continue;
+                    }
+
                     Contexts.createSubcontexts(root, key);
                     root.rebind(key, value);
                 } catch (NamingException e) {
@@ -272,6 +295,13 @@ public class TomcatJndiBuilder {
         ContextAccessController.setReadOnly(standardContext.getNamingContextListener().getName());
     }
 
+    private static String removeCompEnv(final String key) {
+        if (key.startsWith("comp/env/")) {
+            return key.substring("comp/env/".length());
+        }
+        return key;
+    }
+
     /**
      * LinkRef addresses need to be prefixed with java: or they won't resolve
      *

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=1410800&r1=1410799&r2=1410800&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 Sat Nov 17 22:46:43 2012
@@ -124,6 +124,7 @@ import java.lang.reflect.Field;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -904,11 +905,21 @@ public class TomcatWebAppBuilder impleme
         //Look for context info, maybe context is already scanned
         ContextInfo contextInfo = getContextInfo(standardContext);
         ClassLoader classLoader = standardContext.getLoader().getClassLoader();
-        if (contextInfo == null) {
-            final Collection<String> tomcatResources = getResourcesNames(standardContext.getNamingResources());
-            AutoConfig.PROVIDED_RESOURCES.set(tomcatResources);
-            AutoConfig.PROVIDED_RESOURCES_PREFIX.set("java:/comp/env/");
 
+        final LifecycleListener[] listeners = standardContext.findLifecycleListeners();
+        if (listeners != null) { // force init of tomcat resources
+            for (LifecycleListener listener : listeners) {
+                if (OpenEJBContextConfig.class.isInstance(listener)) {
+                    ((OpenEJBContextConfig) listener).configureStart();
+                }
+            }
+        }
+
+        final Collection<String> tomcatResources = getResourcesNames(standardContext.getNamingResources());
+        AutoConfig.PROVIDED_RESOURCES.set(tomcatResources);
+        AutoConfig.PROVIDED_RESOURCES_PREFIX.set("java:/comp/env/");
+
+        if (contextInfo == null) {
             final AppModule appModule = loadApplication(standardContext);
             if (appModule != null) {
                 try {
@@ -941,6 +952,7 @@ public class TomcatWebAppBuilder impleme
         } else {
             contextInfo.standardContext = standardContext;
         }
+        contextInfo.resourceNames = tomcatResources;
 
 
         final String id = getId(standardContext);
@@ -1000,7 +1012,7 @@ public class TomcatWebAppBuilder impleme
                 final TomcatJndiBuilder jndiBuilder = new TomcatJndiBuilder(standardContext, webAppInfo, injections);
                 NamingUtil.setCurrentContext(standardContext);
                 try {
-                    jndiBuilder.mergeJndi();
+                    jndiBuilder.mergeJndi(tomcatResources);
                 } finally {
                     NamingUtil.setCurrentContext(null);
                 }
@@ -1878,6 +1890,7 @@ public class TomcatWebAppBuilder impleme
         public HostConfig deployer;
         public Host host;
         public LinkResolver<EntityManagerFactory> emfLinkResolver;
+        public Collection<String> resourceNames = Collections.emptyList();
 
         @Override
         public String toString() {