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/22 14:32:01 UTC

svn commit: r1412548 - 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: Thu Nov 22 13:32:00 2012
New Revision: 1412548

URL: http://svn.apache.org/viewvc?rev=1412548&view=rev
Log:
reverting OPENEJB-1939 the fixed was not elegant and it broke TCKs. There are other solution so waiting for user feedback before going further on this topic.

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/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=1412548&r1=1412547&r2=1412548&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 Thu Nov 22 13:32:00 2012
@@ -112,9 +112,6 @@ public class AutoConfig implements Dynam
     private static Set<String> ignoredReferenceTypes = new TreeSet<String>();
     public static final String AUTOCREATE_JTA_DATASOURCE_FROM_NON_JTA_ONE_KEY = "openejb.autocreate.jta-datasource-from-non-jta-one";
 
-    public static final ThreadLocal<Collection<String>> PROVIDED_RESOURCES = new ThreadLocal<Collection<String>>();
-    public static final ThreadLocal<String> PROVIDED_RESOURCES_PREFIX = new ThreadLocal<String>();
-
     static{
         // Context objects are automatically handled
         ignoredReferenceTypes.add("javax.ejb.SessionContext");
@@ -187,25 +184,20 @@ public class AutoConfig implements Dynam
 
         resolvePersistenceRefs(appModule);
 
-        try {
-            for (EjbModule ejbModule : appModule.getEjbModules()) {
-                deploy(ejbModule, appResources);
-            }
-            for (ClientModule clientModule : appModule.getClientModules()) {
-                deploy(clientModule, appResources);
-            }
-            for (ConnectorModule connectorModule : appModule.getConnectorModules()) {
-                deploy(connectorModule);
-            }
-            for (WebModule webModule : appModule.getWebModules()) {
-                deploy(webModule, appResources);
-            }
-            for (PersistenceModule persistenceModule : appModule.getPersistenceModules()) {
-                deploy(appModule, persistenceModule);
-            }
-        } finally {
-            PROVIDED_RESOURCES.remove();
-            PROVIDED_RESOURCES_PREFIX.remove();
+        for (EjbModule ejbModule : appModule.getEjbModules()) {
+            deploy(ejbModule, appResources);
+        }
+        for (ClientModule clientModule : appModule.getClientModules()) {
+            deploy(clientModule, appResources);
+        }
+        for (ConnectorModule connectorModule : appModule.getConnectorModules()) {
+            deploy(connectorModule);
+        }
+        for (WebModule webModule : appModule.getWebModules()) {
+            deploy(webModule, appResources);
+        }
+        for (PersistenceModule persistenceModule : appModule.getPersistenceModules()) {
+            deploy(appModule, persistenceModule);
         }
         return appModule;
     }
@@ -713,12 +705,6 @@ public class AutoConfig implements Dynam
     }
 
     private void processJndiRefs(String moduleId, JndiConsumer jndiConsumer, AppResources appResources, ClassLoader classLoader) throws OpenEJBException {
-        final Collection<String> ignoredResources = PROVIDED_RESOURCES.get();
-        String ignoredResourcesPrefix = PROVIDED_RESOURCES_PREFIX.get();
-        if (ignoredResourcesPrefix == null) {
-            ignoredResourcesPrefix = "";
-        }
-
         // Resource reference
         for (ResourceRef ref : jndiConsumer.getResourceRef()) {
             // skip destinations with lookup name
@@ -740,21 +726,16 @@ public class AutoConfig implements Dynam
             }
 
             String destinationId = (mappedName.length() == 0) ? ref.getName() : mappedName;
-            if (ignoredResources != null && ignoredResources.contains(destinationId)) {
-                ref.setLookupName(ignoredResourcesPrefix + destinationId);
-                ref.setName("openejb/" + moduleId + "/" + destinationId);
-            } else {
-                try {
-                    destinationId = getResourceId(moduleId, destinationId, refType, appResources);
-                } catch (OpenEJBException ex) {
-                    if (!(ref instanceof ContextRef)) {
-                        throw ex;
-                    } else { // let jaxrs provider manage it
-                        continue;
-                    }
+            try {
+                destinationId = getResourceId(moduleId, destinationId, refType, appResources);
+            } catch (OpenEJBException ex) {
+                if (!(ref instanceof ContextRef)) {
+                    throw ex;
+                } else { // let jaxrs provider manage it
+                    continue;
                 }
-                ref.setMappedName(destinationId);
             }
+            ref.setMappedName(destinationId);
         }
 
         // Resource env reference
@@ -1044,20 +1025,6 @@ public class AutoConfig implements Dynam
         }
     }
 
-    private void set(Properties properties, String key, String value) {
-        if (value == null || value.length() == 0) return;
-        properties.put(key, value);
-    }
-
-    private void set(Properties properties, String key, int value) {
-        set(properties, key, value, 0);
-    }
-
-    private void set(Properties properties, String key, int value, int min) {
-        if (value < min) return;
-        properties.put(key, value);
-    }
-
     private String createContainer(Class<? extends ContainerInfo> containerInfoType, EjbDeployment ejbDeployment, EnterpriseBean bean) throws OpenEJBException {
         if (!autoCreateContainers) {
             throw new OpenEJBException("A container of type " + getType(bean) + " must be declared in the configuration file for bean: " + bean.getEjbName());
@@ -1085,12 +1052,6 @@ public class AutoConfig implements Dynam
                                     EjbDeployment ejbDeployment, 
                                     AppResources appResources,
                                     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;
@@ -1122,13 +1083,6 @@ 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());
                 }
@@ -1151,25 +1105,6 @@ 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/TomcatJndiBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java?rev=1412548&r1=1412547&r2=1412548&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 Thu Nov 22 13:32:00 2012
@@ -70,6 +70,7 @@ import javax.ejb.spi.HandleDelegate;
 import javax.naming.Binding;
 import javax.naming.Context;
 import javax.naming.LinkRef;
+import javax.naming.NameNotFoundException;
 import javax.naming.NamingException;
 import javax.naming.RefAddr;
 import javax.persistence.EntityManager;
@@ -132,7 +133,7 @@ public class TomcatJndiBuilder {
         this.useCrossClassLoaderRef = useCrossClassLoaderRef;
     }
 
-    public void mergeJndi(final Collection<String> tomcatResources) throws OpenEJBException {
+    public void mergeJndi() throws OpenEJBException {
 
         NamingResources naming = standardContext.getNamingResources();
 
@@ -159,17 +160,6 @@ 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) {
@@ -232,8 +222,16 @@ public class TomcatJndiBuilder {
                     }
 
                     Object value = normalize(entry.getValue());
-                    if (ignoreNames.contains(removeCompEnv(key))) {
-                        continue;
+                    if (ignoreNames.contains(removeCompEnv(key))) { // keep tomcat resources
+                        try {
+                            // tomcat can get the reference but the bound value
+                            // can come from OpenEJB (ejb-jar.xml for instance)
+                            // so check the lookup can be resolved before skipping it
+                            root.lookup(key);
+                            continue;
+                        } catch (NameNotFoundException nnfe) {
+                            // no-op: let it be rebound or bound
+                        }
                     }
 
                     Contexts.createSubcontexts(root, key);
@@ -346,6 +344,7 @@ public class TomcatJndiBuilder {
             }
 
         } catch (Exception e) {
+            // no-op
         }
 
         return value;

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=1412548&r1=1412547&r2=1412548&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 Thu Nov 22 13:32:00 2012
@@ -39,9 +39,7 @@ import org.apache.catalina.core.Standard
 import org.apache.catalina.deploy.ApplicationParameter;
 import org.apache.catalina.deploy.ContextEnvironment;
 import org.apache.catalina.deploy.ContextResource;
-import org.apache.catalina.deploy.ContextResourceEnvRef;
 import org.apache.catalina.deploy.ContextResourceLink;
-import org.apache.catalina.deploy.ContextService;
 import org.apache.catalina.deploy.ContextTransaction;
 import org.apache.catalina.deploy.NamingResources;
 import org.apache.catalina.ha.CatalinaCluster;
@@ -50,7 +48,6 @@ import org.apache.catalina.loader.Webapp
 import org.apache.catalina.session.StandardManager;
 import org.apache.catalina.startup.Constants;
 import org.apache.catalina.startup.ContextConfig;
-import org.apache.catalina.startup.ContextRuleSet;
 import org.apache.catalina.startup.HostConfig;
 import org.apache.catalina.startup.RealmRuleSet;
 import org.apache.catalina.startup.SetAllPropertiesRule;
@@ -77,7 +74,6 @@ import org.apache.openejb.assembler.clas
 import org.apache.openejb.assembler.classic.WebAppInfo;
 import org.apache.openejb.cdi.CdiBuilder;
 import org.apache.openejb.config.AppModule;
-import org.apache.openejb.config.AutoConfig;
 import org.apache.openejb.config.ConfigurationFactory;
 import org.apache.openejb.config.DeploymentLoader;
 import org.apache.openejb.config.WebModule;
@@ -90,12 +86,10 @@ import org.apache.openejb.jee.EnvEntry;
 import org.apache.openejb.jee.WebApp;
 import org.apache.openejb.loader.IO;
 import org.apache.openejb.loader.SystemInstance;
-import org.apache.openejb.util.LinkResolver;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 import org.apache.tomcat.InstanceManager;
 import org.apache.tomcat.util.digester.Digester;
-import org.apache.tomcat.util.digester.RuleSet;
 import org.apache.tomee.catalina.cluster.ClusterObserver;
 import org.apache.tomee.catalina.cluster.TomEEClusterListener;
 import org.apache.tomee.catalina.event.AfterApplicationCreated;
@@ -114,7 +108,6 @@ import javax.el.ELResolver;
 import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
-import javax.persistence.EntityManagerFactory;
 import javax.servlet.ServletContext;
 import javax.servlet.SessionTrackingMode;
 import javax.servlet.jsp.JspApplicationContext;
@@ -364,7 +357,7 @@ public class TomcatWebAppBuilder impleme
         digester.addSetNext("Context/Manager/Store", "setStore", "org.apache.catalina.Store");
         digester.addRuleSet(new RealmRuleSet("Context/"));
         digester.addCallMethod("Context/WatchedResource", "addWatchedResource", 0);
-        digester.addObjectCreate("Context/Resource","org.apache.catalina.deploy.ContextResource");
+        digester.addObjectCreate("Context/Resource", "org.apache.catalina.deploy.ContextResource");
         digester.addRule("Context/Resource", new SetAllPropertiesRule());
         digester.addRule("Context/Resource", new SetNextNamingRule("addResource", "org.apache.catalina.deploy.ContextResource"));
 
@@ -913,19 +906,6 @@ public class TomcatWebAppBuilder impleme
         ContextInfo contextInfo = getContextInfo(standardContext);
         ClassLoader classLoader = standardContext.getLoader().getClassLoader();
 
-        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) {
@@ -959,8 +939,6 @@ public class TomcatWebAppBuilder impleme
         } else {
             contextInfo.standardContext = standardContext;
         }
-        contextInfo.resourceNames = tomcatResources;
-
 
         final String id = getId(standardContext);
         WebAppInfo webAppInfo = null;
@@ -1019,7 +997,7 @@ public class TomcatWebAppBuilder impleme
                 final TomcatJndiBuilder jndiBuilder = new TomcatJndiBuilder(standardContext, webAppInfo, injections);
                 NamingUtil.setCurrentContext(standardContext);
                 try {
-                    jndiBuilder.mergeJndi(tomcatResources);
+                    jndiBuilder.mergeJndi();
                 } finally {
                     NamingUtil.setCurrentContext(null);
                 }
@@ -1069,41 +1047,6 @@ public class TomcatWebAppBuilder impleme
         }
     }
 
-    private Collection<String> getResourcesNames(final NamingResources namingResources) {
-        final Collection<String> names = new ArrayList<String>();
-        for (ContextResource resource : namingResources.findResources()) {
-            final String name = resource.getName();
-            if (name != null) {
-                names.add(resource.getName());
-            }
-        }
-        for (ContextEnvironment resource : namingResources.findEnvironments()) {
-            final String name = resource.getName();
-            if (name != null) {
-                names.add(resource.getName());
-            }
-        }
-        for (ContextResourceLink resource : namingResources.findResourceLinks()) {
-            final String name = resource.getName();
-            if (name != null) {
-                names.add(resource.getName());
-            }
-        }
-        for (ContextService resource : namingResources.findServices()) {
-            final String name = resource.getName();
-            if (name != null) {
-                names.add(resource.getName());
-            }
-        }
-        for (ContextResourceEnvRef resource : namingResources.findResourceEnvRefs()) {
-            final String name = resource.getName();
-            if (name != null) {
-                names.add(resource.getName());
-            }
-        }
-        return names;
-    }
-
     private static void updateInjections(final Collection<Injection> injections, final ClassLoader classLoader, final boolean keepInjection) {
         final Iterator<Injection> it = injections.iterator();
         final List<Injection> newOnes = new ArrayList<Injection>();
@@ -1144,10 +1087,7 @@ public class TomcatWebAppBuilder impleme
                 }
                 container = container.getParent();
             }
-            if (container != null) {
-                return undeploy(standardContext, container);
-            }
-            return false;
+            return container != null && undeploy(standardContext, container);
         }
     }
 
@@ -1315,6 +1255,7 @@ public class TomcatWebAppBuilder impleme
                     }
                 }
             } catch (NamingException e) {
+                // no-op
             }
         }
 
@@ -1657,8 +1598,6 @@ public class TomcatWebAppBuilder impleme
      * @return a openejb application module
      */
     private AppModule loadApplication(final StandardContext standardContext) {
-        final ServletContext servletContext = standardContext.getServletContext();
-
         // don't use getId since the app id shouldnt get the host (jndi)
         // final TomcatDeploymentLoader tomcatDeploymentLoader = new TomcatDeploymentLoader(standardContext, getId(standardContext));
 
@@ -1896,7 +1835,6 @@ public class TomcatWebAppBuilder impleme
         public StandardContext standardContext;
         public HostConfig deployer;
         public Host host;
-        public LinkResolver<EntityManagerFactory> emfLinkResolver;
         public Collection<String> resourceNames = Collections.emptyList();
 
         @Override