You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jl...@apache.org on 2017/06/29 08:59:07 UTC

tomee git commit: List IvmContext should list all of its federated context bindings

Repository: tomee
Updated Branches:
  refs/heads/master f42a82af3 -> dbaf157d2


List IvmContext should list all of its federated context bindings


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/dbaf157d
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/dbaf157d
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/dbaf157d

Branch: refs/heads/master
Commit: dbaf157d210458ae83bb7bd1fb5083f0030c945d
Parents: f42a82a
Author: Katya Todorova <ka...@gmail.com>
Authored: Thu Jun 29 11:35:32 2017 +0300
Committer: Todorova, Katya <ka...@sap.com>
Committed: Thu Jun 29 11:37:31 2017 +0300

----------------------------------------------------------------------
 .../openejb/core/ivm/naming/IvmContext.java     | 18 +++++------
 .../openejb/core/ivm/naming/IvmContextTest.java | 33 ++++++++++++++++++++
 2 files changed, 42 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/dbaf157d/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmContext.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmContext.java b/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmContext.java
index 574ea11..078071d 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmContext.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmContext.java
@@ -571,25 +571,25 @@ public class IvmContext implements Context, Serializable {
                 vect.addElement(node);
             }
 
-            gatherNodes(node, vect);
+            gatherNodes(mynode, node, vect);
 
             buildEnumeration(vect);
         }
 
         protected abstract void buildEnumeration(Vector<NameNode> vect);
 
-        protected void gatherNodes(final NameNode node, final Vector vect) {
-            addInListIfNeeded(mynode, node.getLessTree(), vect);
-            addInListIfNeeded(mynode, node.getGrtrTree(), vect);
-            addInListIfNeeded(mynode, node.getSubTree(), vect);
-            if (NameNode.Federation.class.isInstance(mynode.getObject())) { // tomcat mainly
-                for (final Context c : NameNode.Federation.class.cast(mynode.getObject())) {
+        protected void gatherNodes(NameNode initiallyRequestedNode, final NameNode node, final Vector vect) {
+            addInListIfNeeded(initiallyRequestedNode, node.getLessTree(), vect);
+            addInListIfNeeded(initiallyRequestedNode, node.getGrtrTree(), vect);
+            addInListIfNeeded(initiallyRequestedNode, node.getSubTree(), vect);
+            if (NameNode.Federation.class.isInstance(node.getObject())) { // tomcat mainly
+                for (final Context c : NameNode.Federation.class.cast(initiallyRequestedNode.getObject())) {
                     if (c == IvmContext.this || !IvmContext.class.isInstance(c)) {
                         continue;
                     }
 
                     final IvmContext ctx = IvmContext.class.cast(c);
-                    if (ctx.mynode == mynode || vect.contains(ctx.mynode)) {
+                    if (ctx.mynode == node || vect.contains(ctx.mynode)) {
                         continue;
                     }
 
@@ -605,7 +605,7 @@ public class IvmContext implements Context, Serializable {
                 return;
             }
             vect.addElement(node);
-            gatherNodes(node, vect);
+            gatherNodes(parent, node, vect);
         }
 
         private boolean isMyChild(final NameNode parent, final NameNode node) {

http://git-wip-us.apache.org/repos/asf/tomee/blob/dbaf157d/container/openejb-core/src/test/java/org/apache/openejb/core/ivm/naming/IvmContextTest.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/core/ivm/naming/IvmContextTest.java b/container/openejb-core/src/test/java/org/apache/openejb/core/ivm/naming/IvmContextTest.java
index 9549ba2..6b8b1cf 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/core/ivm/naming/IvmContextTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/core/ivm/naming/IvmContextTest.java
@@ -29,6 +29,9 @@ import java.util.Map;
 import java.util.TreeMap;
 import javax.naming.OperationNotSupportedException;
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.SystemException;
+import javax.naming.NameClassPair;
+import javax.naming.NamingEnumeration;
 
 /**
  * @version $Rev$ $Date$
@@ -353,6 +356,36 @@ public class IvmContextTest extends TestCase {
             //ok
         }
     }
+    
+   public void testListContextListsAllFederatedContextBindings() throws SystemException, NamingException {
+	   //mimic logic from EnterpriseBeanBuilder.build, create compJndiContext and bind in it module, app, global 
+	   Context compContext = new IvmContext();
+        compContext.bind("java:comp/env/dummy", "dummy");
+
+        Context moduleContext = new IvmContext();
+        moduleContext.bind("module/env/test", String.class);
+        moduleContext.bind("module/env/sub/test2", String.class);
+        Context originalModuleSubContext = (IvmContext)moduleContext.lookup("module");
+        compContext.bind("module", originalModuleSubContext);
+
+        Context referencedModuleEnvSubContext = (IvmContext)compContext.lookup("module/env");
+        NamingEnumeration<NameClassPair> referencedEnvLookupResult = referencedModuleEnvSubContext.list("");
+
+        boolean testFound= false;
+        boolean subFound = false;
+        while(referencedEnvLookupResult.hasMore()) {
+            String currentName = referencedEnvLookupResult.next().getName();
+            if("test".equals(currentName)) {
+                testFound = true;
+            } else if("sub".equals(currentName)) {
+                subFound = true;
+            } else {
+                fail();
+            }
+        }
+        assertTrue(testFound);
+        assertTrue(subFound);
+     }
 
     private void assertContextEntry(final Context context, final String s, final Object expected) throws javax.naming.NamingException {
         assertLookup(context, s, expected);