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 2013/02/18 15:40:53 UTC

svn commit: r1447282 - in /tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb: assembler/classic/Assembler.java core/ivm/naming/ContextualJndiReference.java

Author: rmannibucau
Date: Mon Feb 18 14:40:52 2013
New Revision: 1447282

URL: http://svn.apache.org/r1447282
Log:
hook for embedded apps and app scoped resources

Modified:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/ContextualJndiReference.java

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1447282&r1=1447281&r2=1447282&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Mon Feb 18 14:40:52 2013
@@ -2001,6 +2001,8 @@ public class Assembler extends Assembler
             existing = containerSystem.getJNDIContext().lookup(name);
         } catch (final Exception ignored) {
             // no-op
+        } finally {
+            ContextualJndiReference.followReference.remove(); // if the lookup fails the remove is not done
         }
 
         boolean rebind = false;

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/ContextualJndiReference.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/ContextualJndiReference.java?rev=1447282&r1=1447281&r2=1447282&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/ContextualJndiReference.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/ContextualJndiReference.java Mon Feb 18 14:40:52 2013
@@ -25,6 +25,8 @@ import org.apache.openejb.util.Strings;
 import javax.naming.Context;
 import javax.naming.NameNotFoundException;
 import javax.naming.NamingException;
+import java.util.ArrayList;
+import java.util.Collection;
 
 public class ContextualJndiReference extends IntraVmJndiReference {
     public static final ThreadLocal<Boolean> followReference = new ThreadLocal<Boolean>() {
@@ -47,12 +49,9 @@ public class ContextualJndiReference ext
     @Override
     public Object getObject() throws NamingException {
         final Boolean rawValue = !followReference.get();
-        try {
-            if (rawValue) {
-                return this;
-            }
-        } finally {
-            followReference.remove();
+        followReference.remove();
+        if (rawValue) {
+            return this;
         }
 
         final String prefix = findPrefix();
@@ -66,6 +65,22 @@ public class ContextualJndiReference ext
             }
         }
 
+        final Collection<Object> values = new ArrayList<Object>();
+        for (final String p : allPrefixes()) {
+            try {
+                values.add(lookup(p + '/' + jndiName));
+            } catch (final NamingException e) {
+                // no-op
+            }
+        }
+
+        if (1 == values.size()) {
+            return values.iterator().next();
+        } else if (!values.isEmpty()) {
+            throw new NameNotFoundException("Ambiguous resource '" + getJndiName()
+                    + "'  for classloader " + Thread.currentThread().getContextClassLoader());
+        }
+
         return defaultValue;
     }
 
@@ -84,9 +99,21 @@ public class ContextualJndiReference ext
             }
         }
 
+        if (1 == containerSystem.getAppContexts().size()) {
+            return containerSystem.getAppContexts().iterator().next().getId();
+        }
+
         return null;
     }
 
+    private Collection<String> allPrefixes() {
+        final Collection<String> prefixes = new ArrayList<String>();
+        for (final AppContext appContext : SystemInstance.get().getComponent(ContainerSystem.class).getAppContexts()) {
+            prefixes.add(appContext.getId());
+        }
+        return prefixes;
+    }
+
     private Object lookup(final String s) throws NamingException {
         final ContainerSystem containerSystem = SystemInstance.get().getComponent(ContainerSystem.class);
         final Context jndiContext = containerSystem.getJNDIContext();