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();