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/01 07:42:09 UTC
svn commit: r1163909 - 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: Thu Sep 1 05:42:08 2011
New Revision: 1163909
URL: http://svn.apache.org/viewvc?rev=1163909&view=rev
Log:
adding a previous support for module - still to enhance -> see ContextValue
Added:
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/ContextValue.java
Modified:
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiBuilder.java
Added: 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=1163909&view=auto
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/ContextValue.java (added)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/ContextValue.java Thu Sep 1 05:42:08 2011
@@ -0,0 +1,45 @@
+package org.apache.openejb.tomcat.catalina;
+
+import org.apache.openejb.BeanContext;
+import org.apache.openejb.core.ThreadContext;
+
+import javax.naming.LinkRef;
+import javax.naming.NamingException;
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * @author rmannibucau
+ */
+public class ContextValue extends LinkRef {
+ public static final String MODULES_PREFIX = "openejb/modules/";
+
+ private final Collection<String> links = new ArrayList<String>();
+
+ public ContextValue(String linkName) {
+ super(linkName);
+ }
+
+ public synchronized String getLinkName() throws NamingException {
+ if (links.size() == 1) {
+ return "java:" + links.iterator().next();
+ }
+
+ // else try to get BeanContextN to get linkname
+ ThreadContext tc = ThreadContext.getThreadContext();
+ if (tc != null && tc.getBeanContext() != null) {
+ return "java:" + linkName(tc.getBeanContext().getModuleID(), super.getLinkName());
+ }
+
+ // TODO: should we parse a stacktrace to get the module?
+ throw new NamingException("more than one module binding match this name " + super.getLinkName());
+ }
+
+ public void addValue(String link) {
+ links.add(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=1163909&r1=1163908&r2=1163909&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 Thu Sep 1 05:42:08 2011
@@ -95,6 +95,7 @@ import static org.apache.openejb.tomcat.
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 final StandardContext standardContext;
private final WebAppInfo webAppInfo;
@@ -181,18 +182,22 @@ public class TomcatJndiBuilder {
AppContext ac = mc.getAppContext();
Context moduleContext = mc.getModuleJndiContext();
- // copyContext("", moduleContext, root); // TODO: manage map<????, context> + a facade context?
+ try {
+ copyContext("", moduleContext, root, mc.getUniqueId());
+ } catch (NamingException ignored) {
+ // no-op
+ }
Context appContext = ac.getAppJndiContext();
try {
- copyContext("", appContext, root);
+ copyContext("", appContext, root, null);
} catch (NamingException ignored) {
// no-op
}
Context globalContext = ac.getGlobalJndiContext();
try {
- copyContext("", globalContext, root);
+ copyContext("", globalContext, root, null);
} catch (NamingException ignored) {
// no-op
}
@@ -200,7 +205,7 @@ public class TomcatJndiBuilder {
ContextAccessController.setReadOnly(standardContext.getNamingContextListener().getName());
}
- private static void copyContext(String prefix, Context from, Context to) throws NamingException {
+ private static void copyContext(String prefix, Context from, Context to, String linkPrefix) throws NamingException {
String usedPrefix;
if (prefix.isEmpty()) {
usedPrefix = prefix;
@@ -219,13 +224,53 @@ public class TomcatJndiBuilder {
} catch (NameAlreadyBoundException ne) {
// ignored
}
- copyContext(contextPrefix, (Context) object, to);
+ copyContext(contextPrefix, (Context) object, to, linkPrefix);
} else {
String name = usedPrefix + binding.getName();
- try {
- to.bind(name, object);
- } catch (NamingException ne) {
- // ignored
+ if (linkPrefix == null) {
+ try {
+ to.bind(name, object);
+ } catch (NamingException ne) {
+ // ignored
+ }
+ } else {
+ String link = ContextValue.linkName(linkPrefix, name);
+
+ // create subcontexts if necessary
+ String[] contexts = link.split("/");
+ String current = "";
+ for (int i = 0; i < contexts.length - 1; i++) {
+ if (current.isEmpty()) {
+ current += contexts[i];
+ } else {
+ current += "/" + contexts[i];
+ }
+ try {
+ to.createSubcontext(current);
+ } catch (NameAlreadyBoundException ne) {
+ // ignored
+ }
+ }
+
+ to.bind(link, object);
+
+ // don't do a lookup here because it is a link!
+ Map<String, ContextValue> contextValues = CONTEXT_VALUES.get(to);
+ if (contextValues == null) {
+ contextValues = new HashMap<String, ContextValue>();
+ CONTEXT_VALUES.put(to, contextValues);
+ }
+ ContextValue cv = contextValues.get(name);
+ if (cv == null) {
+ cv = new ContextValue(name);
+ try {
+ to.bind(name, cv);
+ contextValues.put(name, cv);
+ } catch (NamingException ignored) {
+ // ignored
+ }
+ }
+ cv.addValue(link);
}
}
}