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;