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/09/18 22:20:17 UTC
svn commit: r1172335 - in
/openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina:
ContextValue.java TomcatJndiBuilder.java
Author: rmannibucau
Date: Sun Sep 18 20:20:17 2011
New Revision: 1172335
URL: http://svn.apache.org/viewvc?rev=1172335&view=rev
Log:
avoiding too much bindings for webapps in tomcat
Modified:
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/ContextValue.java
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiBuilder.java
Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/ContextValue.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/ContextValue.java?rev=1172335&r1=1172334&r2=1172335&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/ContextValue.java (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/ContextValue.java Sun Sep 18 20:20:17 2011
@@ -1,12 +1,10 @@
package org.apache.openejb.tomcat.catalina;
-import org.apache.openejb.BeanContext;
-import org.apache.openejb.core.ThreadContext;
-
+import java.util.Collection;
+import java.util.TreeSet;
import javax.naming.LinkRef;
import javax.naming.NamingException;
-import java.util.ArrayList;
-import java.util.Collection;
+import org.apache.openejb.core.ThreadContext;
/**
* @author rmannibucau
@@ -14,7 +12,7 @@ import java.util.Collection;
public class ContextValue extends LinkRef {
public static final String MODULES_PREFIX = "openejb/modules/";
- private final Collection<String> links = new ArrayList<String>();
+ private final Collection<String> links = new TreeSet<String>();
public ContextValue(String linkName) {
super(linkName);
@@ -25,7 +23,7 @@ public class ContextValue extends LinkRe
return "java:" + links.iterator().next();
}
- // else try to get BeanContextN to get linkname
+ // else try to get BeanContext to get linkname
ThreadContext tc = ThreadContext.getThreadContext();
if (tc != null && tc.getBeanContext() != null) {
return "java:" + linkName(tc.getBeanContext().getModuleID(), super.getLinkName());
@@ -39,6 +37,10 @@ public class ContextValue extends LinkRe
links.add(link);
}
+ public boolean hasLink(String link) {
+ return links.contains(link);
+ }
+
public static String linkName(String moduleId, String name) {
return MODULES_PREFIX + moduleId + "/" + name;
}
Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiBuilder.java?rev=1172335&r1=1172334&r2=1172335&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiBuilder.java (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiBuilder.java Sun Sep 18 20:20:17 2011
@@ -17,6 +17,23 @@
*/
package org.apache.openejb.tomcat.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.naming.Binding;
+import javax.naming.Context;
+import javax.naming.NameAlreadyBoundException;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.transaction.UserTransaction;
import org.apache.catalina.core.NamingContextListener;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.deploy.ContextEjb;
@@ -61,24 +78,7 @@ import org.apache.openejb.tomcat.common.
import org.apache.openejb.tomcat.common.UserTransactionFactory;
import org.apache.openejb.tomcat.common.WsFactory;
-import javax.naming.Binding;
-import javax.naming.Context;
-import javax.naming.NameAlreadyBoundException;
-import javax.naming.NamingEnumeration;
-import javax.naming.NamingException;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-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.openejb.tomcat.common.EnumFactory.ENUM_VALUE;
import static org.apache.openejb.tomcat.common.NamingUtil.DEPLOYMENT_ID;
import static org.apache.openejb.tomcat.common.NamingUtil.EXTENDED;
import static org.apache.openejb.tomcat.common.NamingUtil.EXTERNAL;
@@ -89,7 +89,6 @@ import static org.apache.openejb.tomcat.
import static org.apache.openejb.tomcat.common.NamingUtil.NAME;
import static org.apache.openejb.tomcat.common.NamingUtil.RESOURCE_ID;
import static org.apache.openejb.tomcat.common.NamingUtil.UNIT;
-import static org.apache.openejb.tomcat.common.EnumFactory.ENUM_VALUE;
import static org.apache.openejb.tomcat.common.NamingUtil.WSDL_URL;
import static org.apache.openejb.tomcat.common.NamingUtil.WS_CLASS;
import static org.apache.openejb.tomcat.common.NamingUtil.WS_ID;
@@ -98,8 +97,7 @@ import static org.apache.openejb.tomcat.
import static org.apache.openejb.tomcat.common.NamingUtil.setStaticValue;
public class TomcatJndiBuilder {
- private static final Collection<BeanContext> ALREADY_BOUND = new ArrayList<BeanContext>();
- private static final Map<Context, Map<String, ContextValue>> CONTEXT_VALUES = new HashMap<Context, Map<String, ContextValue>>();
+ private static final Map<Context, Map<String, ContextValueHelper>> CONTEXT_VALUES = new HashMap<Context, Map<String, ContextValueHelper>>();
private final StandardContext standardContext;
private final WebAppInfo webAppInfo;
@@ -177,11 +175,15 @@ public class TomcatJndiBuilder {
// no-op
}
+ String path = standardContext.getEncodedPath();
+ if (path.startsWith("/")) {
+ path = path.substring(1);
+ }
+
for (BeanContext bc : cs.deployments()) {
- if (ALREADY_BOUND.contains(bc)) {
+ if (!(bc.getDeploymentID() instanceof String && ((String) bc.getDeploymentID()).startsWith(path))) {
continue;
}
- ALREADY_BOUND.add(bc);
ModuleContext mc = bc.getModuleContext();
AppContext ac = mc.getAppContext();
@@ -207,6 +209,7 @@ public class TomcatJndiBuilder {
// no-op
}
}
+
ContextAccessController.setReadOnly(standardContext.getNamingContextListener().getName());
}
@@ -260,22 +263,23 @@ public class TomcatJndiBuilder {
to.bind(link, object);
// don't do a lookup here because it is a link!
- Map<String, ContextValue> contextValues = CONTEXT_VALUES.get(to);
+ Map<String, ContextValueHelper> contextValues = CONTEXT_VALUES.get(to);
if (contextValues == null) {
- contextValues = new HashMap<String, ContextValue>();
+ contextValues = new HashMap<String, ContextValueHelper>();
CONTEXT_VALUES.put(to, contextValues);
}
- ContextValue cv = contextValues.get(name);
- if (cv == null) {
- cv = new ContextValue(name);
+ ContextValueHelper cvh = contextValues.get(name);
+ if (cvh == null) {
+ cvh = new ContextValueHelper(name);
+ ContextValue cv = cvh.contextValue;
try {
to.bind(name, cv);
- contextValues.put(name, cv);
+ contextValues.put(name, cvh);
} catch (NamingException ignored) {
// ignored
}
}
- cv.addValue(link);
+ cvh.addValue(name, link);
}
}
}
@@ -763,4 +767,21 @@ 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...
+ }
+ }
}