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/09/05 08:54:23 UTC

svn commit: r1381030 - in /openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina: TomcatJndiBuilder.java TomcatLoader.java TomcatWebAppBuilder.java

Author: rmannibucau
Date: Wed Sep  5 06:54:22 2012
New Revision: 1381030

URL: http://svn.apache.org/viewvc?rev=1381030&view=rev
Log:
using getId instead of context in tomee (to try to manage multiple hosts)

Modified:
    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/TomcatLoader.java
    openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java

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=1381030&r1=1381029&r2=1381030&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 Sep  5 06:54:22 2012
@@ -17,26 +17,6 @@
  */
 package org.apache.tomee.catalina;
 
-import java.net.MalformedURLException;
-import java.net.URI;
-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;
-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;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.transaction.TransactionManager;
-import javax.transaction.TransactionSynchronizationRegistry;
-import javax.transaction.UserTransaction;
 import org.apache.catalina.core.NamingContextListener;
 import org.apache.catalina.core.StandardContext;
 import org.apache.catalina.core.StandardServer;
@@ -62,6 +42,7 @@ import org.apache.openejb.assembler.clas
 import org.apache.openejb.assembler.classic.ResourceInfo;
 import org.apache.openejb.assembler.classic.ResourceReferenceInfo;
 import org.apache.openejb.assembler.classic.ServiceReferenceInfo;
+import org.apache.openejb.assembler.classic.WebAppBuilder;
 import org.apache.openejb.assembler.classic.WebAppInfo;
 import org.apache.openejb.assembler.classic.WsBuilder;
 import org.apache.openejb.core.WebContext;
@@ -85,6 +66,27 @@ import org.apache.tomee.common.UserTrans
 import org.apache.tomee.common.WsFactory;
 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;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.transaction.TransactionManager;
+import javax.transaction.TransactionSynchronizationRegistry;
+import javax.transaction.UserTransaction;
+import java.net.MalformedURLException;
+import java.net.URI;
+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;
+
 import static org.apache.tomee.common.EnumFactory.ENUM_VALUE;
 import static org.apache.tomee.common.NamingUtil.COMPONENT_TYPE;
 import static org.apache.tomee.common.NamingUtil.DEPLOYMENT_ID;
@@ -105,8 +107,6 @@ import static org.apache.tomee.common.Na
 import static org.apache.tomee.common.NamingUtil.setStaticValue;
 
 public class TomcatJndiBuilder {
-    private static final Map<Context, Map<String, ContextValueHelper>> CONTEXT_VALUES = new HashMap<Context, Map<String, ContextValueHelper>>();
-
     private final StandardContext standardContext;
     private final WebAppInfo webAppInfo;
     private final Collection<Injection> injections;
@@ -202,7 +202,7 @@ public class TomcatJndiBuilder {
             }
         }
 
-        if (webContext != null && webContext.getBindings() != null) {
+        if (webContext != null && webContext.getBindings() != null && root != null) {
             for (Map.Entry<String, Object> entry : webContext.getBindings().entrySet()) {
                 try {
                     final String key = entry.getKey();
@@ -230,6 +230,10 @@ 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());
             }
         } catch (Exception ignored) {
             ignored.printStackTrace();
@@ -301,6 +305,7 @@ public class TomcatJndiBuilder {
                 return;
             }
         } catch (Throwable e) {
+            // no-op
         }
 
         if (isLookupRef(naming, ref)) return;
@@ -467,9 +472,7 @@ public class TomcatJndiBuilder {
             }
 
             JtaEntityManagerRegistry jtaEntityManagerRegistry = SystemInstance.get().getComponent(JtaEntityManagerRegistry.class);
-            JtaEntityManager jtaEntityManager = new JtaEntityManager(ref.persistenceUnitName, jtaEntityManagerRegistry, factory, ref.properties, ref.extended);
-            Object object = jtaEntityManager;
-            setResource(resource, object);
+            setResource(resource, new JtaEntityManager(ref.persistenceUnitName, jtaEntityManagerRegistry, factory, ref.properties, ref.extended));
         }
 
         if (addEntry) {
@@ -724,6 +727,7 @@ public class TomcatJndiBuilder {
         try {
             wsdlUrl = new URL(ref.wsdlFile);
         } catch (MalformedURLException e) {
+            // no-op
         }
 
         if (wsdlUrl == null) {
@@ -734,6 +738,7 @@ public class TomcatJndiBuilder {
             try {
                 wsdlUrl = standardContext.getServletContext().getResource("/" + ref.wsdlFile);
             } catch (MalformedURLException e) {
+                // no-op
             }
         }
 
@@ -754,13 +759,6 @@ public class TomcatJndiBuilder {
 
     public static void importOpenEJBResourcesInTomcat(final Collection<ResourceInfo> resources, final StandardServer server) {
         final NamingResources naming = server.getGlobalNamingResources();
-        final Context ctx;
-        try {
-            ctx = new InitialContext();
-        } catch (NamingException e) {
-            e.printStackTrace();
-            return;
-        }
 
         for (ResourceInfo info : resources) {
             final String name = info.id;
@@ -790,21 +788,4 @@ public class TomcatJndiBuilder {
             contextResource.setProperty(name, value);
         }
     }
-
-
-    private static class ContextValueHelper {
-        public ContextValue contextValue;
-        public Collection<String> keys = new ArrayList<String>();
-
-        public ContextValueHelper(String name) {
-            contextValue = new ContextValue(name);
-        }
-
-        public void addValue(String name, String link) {
-            if (!keys.contains(name)) {
-                contextValue.addValue(link);
-                keys.add(name);
-            } // else some magic could be done here, probably for ears...
-        }
-    }
 }

Modified: openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java?rev=1381030&r1=1381029&r2=1381030&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java (original)
+++ openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatLoader.java Wed Sep  5 06:54:22 2012
@@ -363,6 +363,15 @@ public class TomcatLoader implements Loa
             ejbServer = null;
         }
 
+        TomcatWebAppBuilder tomcatWebAppBuilder = (TomcatWebAppBuilder) SystemInstance.get().getComponent(WebAppBuilder.class);
+        if (tomcatWebAppBuilder != null) {
+            try {
+                tomcatWebAppBuilder.stop();
+            } catch (Exception ignored) {
+                // no-op
+            }
+        }
+
         //Destroy OpenEJB system
         OpenEJB.destroy();
     }

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=1381030&r1=1381029&r2=1381030&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 Sep  5 06:54:22 2012
@@ -44,6 +44,7 @@ import org.apache.catalina.deploy.Naming
 import org.apache.catalina.ha.CatalinaCluster;
 import org.apache.catalina.loader.WebappClassLoader;
 import org.apache.catalina.loader.WebappLoader;
+import org.apache.catalina.session.StandardManager;
 import org.apache.catalina.startup.Constants;
 import org.apache.catalina.startup.ContextConfig;
 import org.apache.catalina.startup.HostConfig;
@@ -585,6 +586,7 @@ public class TomcatWebAppBuilder impleme
                     sessionManagerClass = TomcatHelper.getServer().getParentClassLoader().loadClass(sessionManager);
                 } catch (ClassNotFoundException e) {
                     logger.error("can't find '" + sessionManager + "', StandardManager will be used", e);
+                    sessionManagerClass = StandardManager.class;
                 }
             }
 
@@ -672,16 +674,15 @@ public class TomcatWebAppBuilder impleme
                 return null;
             }
 
+            final String id = getId(standardContext);
             for (final WebAppInfo webApp : contextInfo.appInfo.webApps) {
-
                 if (webApp == null) {
                     logger.debug("ContextInfo.appInfo.webApps entry is null StandardContext " + standardContext.getName());
                     continue;
                 }
 
-                if (standardContext.getName().equals("/" + webApp.contextRoot)
-                        || standardContext.getName().equals(webApp.contextRoot)  // ROOT for instance
-                        || standardContext.getName().isEmpty() && webApp.contextRoot.equals("/")) { // possible when user config it manually to be ROOT
+                final String wId = getId(webApp.host, webApp.contextRoot);
+                if (id.equals(wId)) {
                     return webApp;
                 }
             }
@@ -800,11 +801,13 @@ public class TomcatWebAppBuilder impleme
         }
 
 
+        final String id = getId(standardContext);
         WebAppInfo webAppInfo = null;
         // appInfo is null when deployment fails
         if (contextInfo.appInfo != null) {
             for (final WebAppInfo w : contextInfo.appInfo.webApps) {
-                if (("/" + w.contextRoot).equals(standardContext.getPath()) || isRootApplication(standardContext)) {
+                final String wId = getId(w.host, w.contextRoot);
+                if (id.equals(wId)) {
                     webAppInfo = w;
 
                     if (appContext == null) {
@@ -821,6 +824,10 @@ public class TomcatWebAppBuilder impleme
                 appContext = getContainerSystem().getAppContext(contextInfo.appInfo.appId);
             }
 
+            // ensure matching (see getId() usage)
+            webAppInfo.host = standardContext.getHostname();
+            webAppInfo.contextRoot = standardContext.getName();
+
             // save jsf stuff
             final Map<String, Set<String>> scannedJsfClasses = new HashMap<String, Set<String>>();
             for (final ClassListInfo info : webAppInfo.jsfAnnotatedClasses) {
@@ -1005,10 +1012,11 @@ public class TomcatWebAppBuilder impleme
             return;
         }
 
+        final String id = getId(standardContext);
         WebAppInfo currentWebAppInfo = null;
         for (final WebAppInfo webAppInfo : contextInfo.appInfo.webApps) {
-            final boolean isRoot = isRootApplication(standardContext);
-            if (("/" + webAppInfo.contextRoot).equals(standardContext.getPath()) || isRoot) {
+            final String wId = getId(webAppInfo.host, webAppInfo.contextRoot);
+            if (id.equals(wId)) {
                 currentWebAppInfo = webAppInfo;
                 break;
             }
@@ -1071,6 +1079,7 @@ public class TomcatWebAppBuilder impleme
             safeBind(comp, "ORB", new SystemComponentReference(ORB.class));
             safeBind(comp, "HandleDelegate", new SystemComponentReference(HandleDelegate.class));
         } catch (NamingException e) {
+            // no-op
         }
         ContextAccessController.setReadOnly(listenerName);
 
@@ -1400,17 +1409,6 @@ public class TomcatWebAppBuilder impleme
     }
 
     /**
-     * Returns true if given context is root web appliction
-     * false otherwise.
-     *
-     * @param standardContext tomcat context
-     * @return true if given context is root web appliction
-     */
-    private boolean isRootApplication(final StandardContext standardContext) {
-        return "".equals(standardContext.getPath());
-    }
-
-    /**
      * Returns application base of the given host.
      *
      * @param standardHost tomcat host
@@ -1571,11 +1569,21 @@ public class TomcatWebAppBuilder impleme
      * @return id of the context
      */
     private String getId(final StandardContext standardContext) {
-        String contextRoot = standardContext.getName();
+        return getId(standardContext.getHostname(), standardContext.getName());
+    }
+
+    private String getId(final String host, final String context) {
+        String contextRoot = context;
+        if ("ROOT".equals(contextRoot)) {
+            contextRoot = "";
+        }
         if (!contextRoot.startsWith("/")) {
             contextRoot = "/" + contextRoot;
         }
-        return standardContext.getHostname() + contextRoot;
+        if (host != null) {
+            return host + contextRoot;
+        }
+        return defaultHost + contextRoot;
     }
 
     /**
@@ -1584,7 +1592,7 @@ public class TomcatWebAppBuilder impleme
      * @param standardContext context
      * @return context info
      */
-    private ContextInfo getContextInfo(final StandardContext standardContext) {
+    public ContextInfo getContextInfo(final StandardContext standardContext) {
         final String id = getId(standardContext);
         return infos.get(id);
     }
@@ -1635,7 +1643,7 @@ public class TomcatWebAppBuilder impleme
         infos.remove(id);
     }
 
-    private static class ContextInfo {
+    public static class ContextInfo {
 
         public AppInfo appInfo;
         public StandardContext standardContext;