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 2011/10/19 22:27:57 UTC

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

Author: rmannibucau
Date: Wed Oct 19 20:27:56 2011
New Revision: 1186457

URL: http://svn.apache.org/viewvc?rev=1186457&view=rev
Log:
TOMEE-38 in tomcat comp/ is not always available so trying to do bindings in configure_start event

Modified:
    openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java
    openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java

Modified: openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java?rev=1186457&r1=1186456&r2=1186457&view=diff
==============================================================================
--- openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java (original)
+++ openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java Wed Oct 19 20:27:56 2011
@@ -26,12 +26,15 @@ 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.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;
@@ -59,6 +62,7 @@ import org.apache.openejb.assembler.clas
 import org.apache.openejb.assembler.classic.WebAppInfo;
 import org.apache.openejb.assembler.classic.WsBuilder;
 import org.apache.openejb.core.WebContext;
+import org.apache.openejb.core.ivm.naming.SystemComponentReference;
 import org.apache.openejb.core.webservices.HandlerChainData;
 import org.apache.openejb.core.webservices.PortRefData;
 import org.apache.openejb.loader.SystemInstance;
@@ -73,10 +77,13 @@ import org.apache.tomee.common.NamingUti
 import org.apache.tomee.common.PersistenceContextFactory;
 import org.apache.tomee.common.PersistenceUnitFactory;
 import org.apache.tomee.common.ResourceFactory;
+import org.apache.tomee.common.SystemComponentFactory;
 import org.apache.tomee.common.UserTransactionFactory;
 import org.apache.tomee.common.WsFactory;
+import org.omg.CORBA.ORB;
 
 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;
 import static org.apache.tomee.common.NamingUtil.EXTENDED;
 import static org.apache.tomee.common.NamingUtil.EXTERNAL;
@@ -193,6 +200,23 @@ public class TomcatJndiBuilder {
             }
         }
 
+        // try to force some binding which probably failed earlier (see in TomcatWebappBuilder)
+        try {
+            Context comp = (Context) ContextBindings.getClassLoader().lookup("comp");
+            TransactionManager transactionManager = SystemInstance.get().getComponent(TransactionManager.class);
+            comp.rebind("TransactionManager", transactionManager);
+
+            // bind TransactionSynchronizationRegistry
+            TransactionSynchronizationRegistry synchronizationRegistry = SystemInstance.get().getComponent(TransactionSynchronizationRegistry.class);
+            comp.rebind("TransactionSynchronizationRegistry", synchronizationRegistry);
+
+            comp.rebind("ORB", new SystemComponentReference(ORB.class));
+            comp.rebind("HandleDelegate", new SystemComponentReference(HandleDelegate.class));
+        } catch (Exception ignored) {
+            ignored.printStackTrace();
+            // no-op
+        }
+
         ContextAccessController.setReadOnly(standardContext.getNamingContextListener().getName());
     }
 
@@ -540,13 +564,24 @@ public class TomcatJndiBuilder {
             addEntry = true;
         }
 
+        resourceEnv.setType(ref.resourceEnvRefType);
         if (UserTransaction.class.getName().equals(ref.resourceEnvRefType)) {
             resourceEnv.setProperty(Constants.FACTORY, UserTransactionFactory.class.getName());
-            resourceEnv.setType(ref.resourceEnvRefType);
+        } else if (TransactionManager.class.getName().equals(ref.resourceEnvRefType)) {
+            resourceEnv.setProperty(Constants.FACTORY, SystemComponentFactory.class.getName());
+            resourceEnv.setProperty(COMPONENT_TYPE, TransactionManager.class.getName());
+        } else if (TransactionSynchronizationRegistry.class.getName().equals(ref.resourceEnvRefType)) {
+            resourceEnv.setProperty(Constants.FACTORY, SystemComponentFactory.class.getName());
+            resourceEnv.setProperty(COMPONENT_TYPE, TransactionSynchronizationRegistry.class.getName());
+        } else if (ORB.class.getName().equals(ref.resourceEnvRefType)) {
+            resourceEnv.setProperty(Constants.FACTORY, SystemComponentFactory.class.getName());
+            resourceEnv.setProperty(COMPONENT_TYPE, ORB.class.getName());
+        } else if (HandleDelegate.class.getName().equals(ref.resourceEnvRefType)) {
+            resourceEnv.setProperty(Constants.FACTORY, SystemComponentFactory.class.getName());
+            resourceEnv.setProperty(COMPONENT_TYPE, HandleDelegate.class.getName());
         } else {
             resourceEnv.setProperty(Constants.FACTORY, ResourceFactory.class.getName());
             resourceEnv.setProperty(NAME, ref.referenceName.replaceAll("^comp/env/", ""));
-            resourceEnv.setType(ref.resourceEnvRefType);
 
             if (ref.resourceID != null) {
                 resourceEnv.setProperty(RESOURCE_ID, ref.resourceID);

Modified: openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java?rev=1186457&r1=1186456&r2=1186457&view=diff
==============================================================================
--- openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java (original)
+++ openejb/trunk/openejb/assembly/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java Wed Oct 19 20:27:56 2011
@@ -562,7 +562,7 @@ public class TomcatWebAppBuilder impleme
             openejbContext = (Context) openejbContext.lookup("openejb");
 
             Context root = (Context) ContextBindings.getClassLoader().lookup("");
-            Context comp = (Context) ContextBindings.getClassLoader().lookup("comp");
+            Context comp = (Context) ContextBindings.getClassLoader().lookup("comp"); // usually fails
 
             // Context root = ncl.getNamingContext();
             // Context comp = (Context) root.lookup("comp");