Author: djencks
Date: Wed Jul  8 00:09:42 2009
New Revision: 792003

URL: http://svn.apache.org/viewvc?rev=792003&view=rev
Log:
OPENEJB-1014 Make jndi implementation pluggable

Added:
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/JndiFactory.java
   (with props)
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmJndiFactory.java
   (with props)
Modified:
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceBuilder.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreContainerSystem.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/spi/ContainerSystem.java
    
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/resource/activemq/OpenEjbBrokerFactoryTest.java

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=792003&r1=792002&r2=792003&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
 Wed Jul  8 00:09:42 2009
@@ -25,25 +25,26 @@
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
-import java.util.TreeMap;
-import java.util.Collections;
-import java.util.Comparator;
 import java.util.Set;
+import java.util.TreeMap;
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.atomic.AtomicInteger;
+
+import javax.naming.Binding;
 import javax.naming.Context;
 import javax.naming.InitialContext;
-import javax.naming.NamingException;
 import javax.naming.NameAlreadyBoundException;
-import javax.naming.Binding;
 import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
 import javax.persistence.EntityManagerFactory;
 import javax.resource.spi.BootstrapContext;
 import javax.resource.spi.ConnectionManager;
@@ -67,39 +68,41 @@
 import org.apache.openejb.OpenEJB;
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.UndeployException;
-import org.apache.xbean.finder.ResourceFinder;
 import org.apache.openejb.core.ConnectorReference;
 import org.apache.openejb.core.CoreContainerSystem;
 import org.apache.openejb.core.CoreDeploymentInfo;
-import org.apache.openejb.core.SimpleTransactionSynchronizationRegistry;
 import org.apache.openejb.core.CoreUserTransaction;
+import org.apache.openejb.core.JndiFactory;
+import org.apache.openejb.core.SimpleTransactionSynchronizationRegistry;
 import org.apache.openejb.core.TransactionSynchronizationRegistryWrapper;
-import org.apache.openejb.core.transaction.SimpleWorkManager;
-import org.apache.openejb.core.transaction.SimpleBootstrapContext;
-import org.apache.openejb.core.transaction.TransactionType;
-import org.apache.openejb.core.transaction.JtaTransactionPolicyFactory;
-import org.apache.openejb.core.transaction.TransactionPolicyFactory;
 import org.apache.openejb.core.ivm.naming.IvmContext;
+import org.apache.openejb.core.ivm.naming.IvmJndiFactory;
 import org.apache.openejb.core.timer.EjbTimerServiceImpl;
 import org.apache.openejb.core.timer.NullEjbTimerServiceImpl;
+import org.apache.openejb.core.transaction.JtaTransactionPolicyFactory;
+import org.apache.openejb.core.transaction.SimpleBootstrapContext;
+import org.apache.openejb.core.transaction.SimpleWorkManager;
+import org.apache.openejb.core.transaction.TransactionPolicyFactory;
+import org.apache.openejb.core.transaction.TransactionType;
 import org.apache.openejb.javaagent.Agent;
-import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.loader.Options;
+import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.persistence.JtaEntityManagerRegistry;
 import org.apache.openejb.persistence.PersistenceClassLoaderHandler;
 import org.apache.openejb.resource.GeronimoConnectionManagerFactory;
 import org.apache.openejb.spi.ApplicationServer;
 import org.apache.openejb.spi.ContainerSystem;
 import org.apache.openejb.spi.SecurityService;
+import org.apache.openejb.util.AsmParameterNameLoader;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.Messages;
 import org.apache.openejb.util.OpenEJBErrorHandler;
-import org.apache.openejb.util.SafeToolkit;
 import org.apache.openejb.util.References;
-import org.apache.openejb.util.AsmParameterNameLoader;
+import org.apache.openejb.util.SafeToolkit;
 import org.apache.openejb.util.proxy.ProxyFactory;
 import org.apache.openejb.util.proxy.ProxyManager;
+import org.apache.xbean.finder.ResourceFinder;
 import org.apache.xbean.recipe.ObjectRecipe;
 import org.apache.xbean.recipe.Option;
 import org.apache.xbean.recipe.UnsetPropertiesRecipe;
@@ -110,9 +113,9 @@
         AsmParameterNameLoader.install();
     }
 
-    public static final String JAVA_OPENEJB_NAMING_CONTEXT = "java:openejb/";
+    public static final String JAVA_OPENEJB_NAMING_CONTEXT = "openejb/";
 
-    public static final String PERSISTENCE_UNIT_NAMING_CONTEXT = 
"java:openejb/PersistenceUnit/";
+    public static final String PERSISTENCE_UNIT_NAMING_CONTEXT = 
"openejb/PersistenceUnit/";
 
     private static final String OPENEJB_URL_PKG_PREFIX = 
"org.apache.openejb.core.ivm.naming";
 
@@ -187,6 +190,10 @@
     protected OpenEjbConfiguration config;
 
     public Assembler() {
+        this(new IvmJndiFactory());
+    }
+
+    public Assembler(JndiFactory jndiFactory) {
         persistenceClassLoaderHandler = new 
PersistenceClassLoaderHandlerImpl();
 
         installNaming();
@@ -195,10 +202,10 @@
 
         system.setComponent(Assembler.class, this);
 
-        containerSystem = new CoreContainerSystem();
+        containerSystem = new CoreContainerSystem(jndiFactory);
         system.setComponent(ContainerSystem.class, containerSystem);
 
-        jndiBuilder = new JndiBuilder(containerSystem.getJNDIContext());
+        jndiBuilder = new JndiBuilder(jndiFactory, 
containerSystem.getJNDIContext());
 
         setConfiguration(new OpenEjbConfiguration());
 
@@ -608,24 +615,24 @@
                 jndiEncBuilder.setUseCrossClassLoaderRef(false);
                 Context context = (Context) 
jndiEncBuilder.build().lookup("comp/env");
 
-                containerSystem.getJNDIContext().bind("java:openejb/client/" + 
clientInfo.moduleId + "/comp/env", context);
+                containerSystem.getJNDIContext().bind("openejb/client/" + 
clientInfo.moduleId + "/comp/env", context);
                 if (clientInfo.codebase != null) {
-                    
containerSystem.getJNDIContext().bind("java:openejb/client/" + 
clientInfo.moduleId + "/comp/path", clientInfo.codebase);
+                    containerSystem.getJNDIContext().bind("openejb/client/" + 
clientInfo.moduleId + "/comp/path", clientInfo.codebase);
                 }
                 if (clientInfo.mainClass != null) {
-                    
containerSystem.getJNDIContext().bind("java:openejb/client/" + 
clientInfo.moduleId + "/comp/mainClass", clientInfo.mainClass);
+                    containerSystem.getJNDIContext().bind("openejb/client/" + 
clientInfo.moduleId + "/comp/mainClass", clientInfo.mainClass);
                 }
                 if (clientInfo.callbackHandler != null) {
-                    
containerSystem.getJNDIContext().bind("java:openejb/client/" + 
clientInfo.moduleId + "/comp/callbackHandler", clientInfo.callbackHandler);
+                    containerSystem.getJNDIContext().bind("openejb/client/" + 
clientInfo.moduleId + "/comp/callbackHandler", clientInfo.callbackHandler);
                 }
-                containerSystem.getJNDIContext().bind("java:openejb/client/" + 
clientInfo.moduleId + "/comp/injections", injections);
+                containerSystem.getJNDIContext().bind("openejb/client/" + 
clientInfo.moduleId + "/comp/injections", injections);
 
                 for (String clientClassName : clientInfo.remoteClients) {
-                    
containerSystem.getJNDIContext().bind("java:openejb/client/" + clientClassName, 
clientInfo.moduleId);
+                    containerSystem.getJNDIContext().bind("openejb/client/" + 
clientClassName, clientInfo.moduleId);
                 }
                 
                 for (String clientClassName : clientInfo.localClients) {
-                    
containerSystem.getJNDIContext().bind("java:openejb/client/" + clientClassName, 
clientInfo.moduleId);
+                    containerSystem.getJNDIContext().bind("openejb/client/" + 
clientClassName, clientInfo.moduleId);
                 }
             }
 
@@ -744,7 +751,7 @@
 
         NamingEnumeration<Binding> namingEnumeration = null;
         try {
-            namingEnumeration = 
containerSystem.getJNDIContext().listBindings("java:openejb/Resource");
+            namingEnumeration = 
containerSystem.getJNDIContext().listBindings("openejb/Resource");
         } catch (NamingException ignored) {
             // no resource adapters were created
         }
@@ -950,7 +957,7 @@
         InitialContext cntx = result;
 
         try {
-            
containerSystem.getJNDIContext().bind("java:openejb/remote_jndi_contexts/" + 
contextInfo.id, cntx);
+            
containerSystem.getJNDIContext().bind("openejb/remote_jndi_contexts/" + 
contextInfo.id, cntx);
         } catch (NamingException e) {
             throw new OpenEJBException("Cannot bind " + contextInfo.service + 
" with id " + contextInfo.id, e);
         }
@@ -981,11 +988,7 @@
         Class interfce = serviceInterfaces.get(serviceInfo.service);
         checkImplementation(interfce, service.getClass(), serviceInfo.service, 
serviceInfo.id);
 
-        try {
-            
this.containerSystem.getJNDIContext().bind(JAVA_OPENEJB_NAMING_CONTEXT + 
serviceInfo.service + "/" + serviceInfo.id, service);
-        } catch (NamingException e) {
-            throw new 
OpenEJBException(messages.format("assembler.cannotBindServiceWithId", 
serviceInfo.service, serviceInfo.id), e);
-        }
+        bindService(serviceInfo, service);
 
         setSystemInstanceComponent(interfce, service);
 
@@ -1001,6 +1004,14 @@
         logger.getChildLogger("service").debug("createService.success", 
serviceInfo.service, serviceInfo.id, serviceInfo.className);
     }
 
+    private void bindService(ServiceInfo serviceInfo, Object service) throws 
OpenEJBException {
+        try {
+            
this.containerSystem.getJNDIContext().bind(JAVA_OPENEJB_NAMING_CONTEXT + 
serviceInfo.service + "/" + serviceInfo.id, service);
+        } catch (NamingException e) {
+            throw new 
OpenEJBException(messages.format("assembler.cannotBindServiceWithId", 
serviceInfo.service, serviceInfo.id), e);
+        }
+    }
+
     public void removeContainer(String containerId) {
         containerSystem.removeContainer(containerId);
 
@@ -1032,11 +1043,7 @@
         ProxyManager.registerFactory(serviceInfo.id, (ProxyFactory) service);
         ProxyManager.setDefaultFactory(serviceInfo.id);
 
-        try {
-            
this.containerSystem.getJNDIContext().bind(JAVA_OPENEJB_NAMING_CONTEXT + 
serviceInfo.service + "/" + serviceInfo.id, service);
-        } catch (NamingException e) {
-            throw new OpenEJBException("Cannot bind " + serviceInfo.service + 
" with id " + serviceInfo.id, e);
-        }
+        bindService(serviceInfo, service);
 
         setSystemInstanceComponent(interfce, service);
 
@@ -1060,7 +1067,7 @@
 
             Object resourceAdapter = null;
             try {
-                resourceAdapter = 
containerSystem.getJNDIContext().lookup("java:openejb/Resource/" + id);
+                resourceAdapter = 
containerSystem.getJNDIContext().lookup("openejb/Resource/" + id);
             } catch (NamingException e) {
                 // handled below
             }
@@ -1167,7 +1174,7 @@
         }
 
         try {
-            containerSystem.getJNDIContext().bind("java:openejb/Resource/" + 
serviceInfo.id, service);
+            containerSystem.getJNDIContext().bind("openejb/Resource/" + 
serviceInfo.id, service);
         } catch (NamingException e) {
             throw new OpenEJBException("Cannot bind resource adapter with id " 
+ serviceInfo.id, e);
         }
@@ -1204,11 +1211,7 @@
         Class interfce = serviceInterfaces.get(serviceInfo.service);
         checkImplementation(interfce, service.getClass(), serviceInfo.service, 
serviceInfo.id);
 
-        try {
-            
this.containerSystem.getJNDIContext().bind(JAVA_OPENEJB_NAMING_CONTEXT + 
serviceInfo.service + "/" + serviceInfo.id, service);
-        } catch (NamingException e) {
-            throw new OpenEJBException("Cannot bind " + serviceInfo.service + 
" with id " + serviceInfo.id, e);
-        }
+        bindService(serviceInfo, service);
 
         setSystemInstanceComponent(interfce, service);
 
@@ -1270,8 +1273,8 @@
 
         try {
             
this.containerSystem.getJNDIContext().bind(JAVA_OPENEJB_NAMING_CONTEXT + 
serviceInfo.service, service);
-            
this.containerSystem.getJNDIContext().bind("java:comp/UserTransaction", new 
CoreUserTransaction((TransactionManager) service));
-            
this.containerSystem.getJNDIContext().bind("java:comp/TransactionManager", 
service);
+            this.containerSystem.getJNDIContext().bind("comp/UserTransaction", 
new CoreUserTransaction((TransactionManager) service));
+            
this.containerSystem.getJNDIContext().bind("comp/TransactionManager", service);
         } catch (NamingException e) {
             throw new OpenEJBException("Cannot bind " + serviceInfo.service + 
" with id " + serviceInfo.id, e);
         }
@@ -1304,7 +1307,7 @@
         
SystemInstance.get().setComponent(TransactionSynchronizationRegistry.class, 
synchronizationRegistry);
 
         try {
-            
this.containerSystem.getJNDIContext().bind("java:comp/TransactionSynchronizationRegistry",
 new TransactionSynchronizationRegistryWrapper());
+            
this.containerSystem.getJNDIContext().bind("comp/TransactionSynchronizationRegistry",
 new TransactionSynchronizationRegistryWrapper());
         } catch (NamingException e) {
             throw new OpenEJBException("Cannot bind 
java:comp/TransactionSynchronizationRegistry", e);
         }

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java?rev=792003&r1=792002&r2=792003&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
 Wed Jul  8 00:09:42 2009
@@ -18,10 +18,10 @@
 
 import static org.apache.openejb.util.Classes.packageName;
 
-import javax.naming.Context;
 import javax.naming.NamingException;
 import javax.naming.Reference;
 import javax.naming.NameAlreadyBoundException;
+import javax.naming.Context;
 import javax.jms.MessageListener;
 
 import org.apache.openejb.DeploymentInfo;
@@ -33,6 +33,7 @@
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.loader.Options;
 import org.apache.openejb.core.CoreDeploymentInfo;
+import org.apache.openejb.core.JndiFactory;
 import org.apache.openejb.core.ivm.naming.BusinessLocalReference;
 import org.apache.openejb.core.ivm.naming.BusinessRemoteReference;
 import org.apache.openejb.core.ivm.naming.ObjectReference;
@@ -54,12 +55,14 @@
 
     public static final Logger logger = 
Logger.getInstance(LogCategory.OPENEJB_STARTUP, 
JndiBuilder.class.getPackage().getName());
 
+    private final JndiFactory jndiFactory;
     private final Context context;
     private static final String JNDINAME_STRATEGY_CLASS = 
"openejb.jndiname.strategy.class";
     private static final String JNDINAME_FAILONCOLLISION = 
"openejb.jndiname.failoncollision";
     private final boolean failOnCollision;
 
-    public JndiBuilder(Context context) {
+    public JndiBuilder(JndiFactory jndiFactory, Context context) {
+        this.jndiFactory = jndiFactory;
         this.context = context;
         failOnCollision = 
SystemInstance.get().getOptions().get(JNDINAME_FAILONCOLLISION, true);
     }
@@ -351,7 +354,7 @@
             if (MessageListener.class.equals(deployment.getMdbInterface())) {
 
                 String destinationId = deployment.getDestinationId();
-                String jndiName = "java:openejb/Resource/" + destinationId;
+                String jndiName = "openejb/Resource/" + destinationId;
                 Reference reference = new IntraVmJndiReference(jndiName);
 
                 String deploymentId = deployment.getDeploymentID().toString();

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java?rev=792003&r1=792002&r2=792003&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
 Wed Jul  8 00:09:42 2009
@@ -22,6 +22,7 @@
 import org.apache.openejb.spi.ContainerSystem;
 import org.apache.openejb.core.CoreUserTransaction;
 import org.apache.openejb.core.TransactionSynchronizationRegistryWrapper;
+import org.apache.openejb.core.JndiFactory;
 import org.apache.openejb.core.ivm.naming.CrossClassLoaderJndiReference;
 import org.apache.openejb.core.ivm.naming.IntraVmJndiReference;
 import org.apache.openejb.core.ivm.naming.IvmContext;
@@ -121,27 +122,8 @@
 
     public Context build() throws OpenEJBException {
         Map<String, Object> bindings = buildMap();
-
-        Context context;
-        if (System.getProperty("openejb.naming","ivm").equals("xbean")) {
-            context = createXBeanWritableContext(bindings);
-        } else {
-            context = createIvmContext();
-
-            // bind the bindings
-            for (Iterator iterator = bindings.entrySet().iterator(); 
iterator.hasNext();) {
-                Map.Entry entry = (Map.Entry) iterator.next();
-                String name = (String) entry.getKey();
-                Object value = entry.getValue();
-                if (value == null) continue;
-                try {
-                    context.bind(name, value);
-                } catch (NamingException e) {
-                    throw new org.apache.openejb.SystemException("Unable to 
bind '" + name + "' into bean's enc.", e);
-                }
-            }
-        }
-        return context;
+        JndiFactory jndiFactory = 
SystemInstance.get().getComponent(JndiFactory.class);
+        return jndiFactory.createComponentContext(bindings);
     }
 
     public Map<String, Object> buildMap() throws OpenEJBException {
@@ -179,7 +161,7 @@
             } else if (referenceInfo.ejbDeploymentId == null){
                 reference = new LazyEjbReference(new Ref(referenceInfo), 
moduleUri, useCrossClassLoaderRef);
             } else {
-                String jndiName = "java:openejb/Deployment/" + 
JndiBuilder.format(referenceInfo.ejbDeploymentId, 
referenceInfo.interfaceClassName, InterfaceType.BUSINESS_REMOTE);
+                String jndiName = "openejb/Deployment/" + 
JndiBuilder.format(referenceInfo.ejbDeploymentId, 
referenceInfo.interfaceClassName, InterfaceType.BUSINESS_REMOTE);
                 if (useCrossClassLoaderRef && referenceInfo.externalReference) 
{
                     reference = new CrossClassLoaderJndiReference(jndiName);
                 } else {
@@ -198,7 +180,7 @@
             } else if (referenceInfo.ejbDeploymentId == null){
                 reference = new LazyEjbReference(new Ref(referenceInfo), 
moduleUri, false);
             } else {
-                String jndiName = "java:openejb/Deployment/" + 
JndiBuilder.format(referenceInfo.ejbDeploymentId, 
referenceInfo.interfaceClassName, InterfaceType.BUSINESS_LOCAL);
+                String jndiName = "openejb/Deployment/" + 
JndiBuilder.format(referenceInfo.ejbDeploymentId, 
referenceInfo.interfaceClassName, InterfaceType.BUSINESS_LOCAL);
                 reference = new IntraVmJndiReference(jndiName);
             }
             bindings.put(normalize(referenceInfo.referenceName), reference);
@@ -262,10 +244,10 @@
             } else if (referenceInfo.location != null) {
                 reference = buildReferenceLocation(referenceInfo.location);
             } else if (referenceInfo.resourceID != null) {
-                String jndiName = "java:openejb/Resource/" + 
referenceInfo.resourceID;
+                String jndiName = "openejb/Resource/" + 
referenceInfo.resourceID;
                 reference = new IntraVmJndiReference(jndiName);
             } else {
-                String jndiName = "java:openejb/Resource/" + 
referenceInfo.referenceName;
+                String jndiName = "openejb/Resource/" + 
referenceInfo.referenceName;
                 reference = new IntraVmJndiReference(jndiName);
             }
             bindings.put(normalize(referenceInfo.referenceName), reference);
@@ -300,10 +282,10 @@
             } else if (referenceInfo.location != null){
                 reference = buildReferenceLocation(referenceInfo.location);
             } else if (referenceInfo.resourceID != null) {
-                String jndiName = "java:openejb/Resource/" + 
referenceInfo.resourceID;
+                String jndiName = "openejb/Resource/" + 
referenceInfo.resourceID;
                 reference = new IntraVmJndiReference(jndiName);
             } else {
-                String jndiName = "java:openejb/Resource/" + 
referenceInfo.resourceEnvRefName;
+                String jndiName = "openejb/Resource/" + 
referenceInfo.resourceEnvRefName;
                 reference = new IntraVmJndiReference(jndiName);
             }
             if (reference != null) {
@@ -318,7 +300,7 @@
                 continue;
             }
 
-            String jndiName = "java:openejb/PersistenceUnit/" + 
referenceInfo.unitId;
+            String jndiName = "openejb/PersistenceUnit/" + 
referenceInfo.unitId;
             Reference reference = new IntraVmJndiReference(jndiName);
             bindings.put(normalize(referenceInfo.referenceName), reference);
         }
@@ -430,37 +412,6 @@
         return bindings;
     }
 
-    private WritableContext createXBeanWritableContext(Map<String, Object> 
bindings) {
-        boolean hasEnv = false;
-        for (String name : bindings.keySet()) {
-            if (name.startsWith("java:comp/env")) {
-                hasEnv = true;
-                break;
-            }
-        }
-        if (!hasEnv) bindings.put("java:comp/env/dummy", "dummy");
-
-        WritableContext context = null;
-        try {
-            context = new WritableContext("", bindings);
-        } catch (NamingException e) {
-            throw new IllegalStateException(e);
-        }
-        return context;
-    }
-
-    private IvmContext createIvmContext() {
-        IvmContext context = new IvmContext();
-        try {
-//            context.createSubcontext("comp");
-            // todo remove this... IvmContext seems to drop empty nodes
-            context.bind("java:comp/env/dummy", "dummy");
-        } catch (NamingException e) {
-            throw new IllegalStateException("Unable to create subcontext 
'java:comp/env'.  Exception:"+e.getMessage(),e);
-        }
-        return context;
-    }
-
     public static boolean bindingExists(Context context, Name contextName) {
         try {
             return context.lookup(contextName) != null;
@@ -471,7 +422,7 @@
 
     private Reference buildReferenceLocation(ReferenceLocationInfo location) {
         if (location.jndiProviderId != null){
-            String subContextName = "java:openejb/remote_jndi_contexts/" + 
location.jndiProviderId;
+            String subContextName = "openejb/remote_jndi_contexts/" + 
location.jndiProviderId;
             return new JndiReference(subContextName, location.jndiName);
         } else {
             return new JndiUrlReference(location.jndiName);

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceBuilder.java?rev=792003&r1=792002&r2=792003&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceBuilder.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceBuilder.java
 Wed Jul  8 00:09:42 2009
@@ -113,7 +113,8 @@
             if (System.getProperty("duct tape") == null){
 
                 try {
-                    if (!jtaDataSourceId.startsWith("java:openejb/Resource/")) 
jtaDataSourceId = "java:openejb/Resource/"+jtaDataSourceId;
+                    if (!jtaDataSourceId.startsWith("java:openejb/Resource/")
+                            && 
!jtaDataSourceId.startsWith("openejb/Resource/")) jtaDataSourceId = 
"openejb/Resource/"+jtaDataSourceId;
 
                     Context context = 
SystemInstance.get().getComponent(ContainerSystem.class).getJNDIContext();
                     DataSource jtaDataSource = (DataSource) 
context.lookup(jtaDataSourceId);

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreContainerSystem.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreContainerSystem.java?rev=792003&r1=792002&r2=792003&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreContainerSystem.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreContainerSystem.java
 Wed Jul  8 00:09:42 2009
@@ -18,12 +18,13 @@
 
 import org.apache.openejb.Container;
 import org.apache.openejb.DeploymentInfo;
-import org.apache.openejb.core.ivm.naming.IvmContext;
 import org.apache.openejb.loader.SystemInstance;
 
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.naming.Context;
+
 /**
  * @org.apache.xbean.XBean element="containerSystem"
  */
@@ -31,7 +32,9 @@
     Map<Object, DeploymentInfo> deployments = new ConcurrentHashMap<Object, 
DeploymentInfo>();
     Map<Object, Container> containers = new ConcurrentHashMap<Object, 
Container>();
     Map<String, WebDeploymentInfo> webDeployments = new 
ConcurrentHashMap<String, WebDeploymentInfo>();
-    IvmContext jndiRootContext = null;
+    private final Context jndiContext;
+
+
     /**
      * Constructs a CoreContainerSystem and initializes the root JNDI context.
      * It also creates three sub contexts, namely
@@ -42,24 +45,24 @@
      * </ul>
      *
      *...@throws RuntimeException if there is a problem during initialization 
of the root context
+     * @param jndiFactory
      */
-    public CoreContainerSystem() {
+    public CoreContainerSystem(JndiFactory jndiFactory) {
 
+        if (jndiFactory == null) {
+            throw new NullPointerException("JndiFactory required");
+        }
+        jndiContext = jndiFactory.createRootContext();
         try {
-
-            jndiRootContext = IvmContext.createRootContext();
-
-            jndiRootContext.bind("openejb/local/.", "");
-            jndiRootContext.bind("openejb/remote/.", "");
-            jndiRootContext.bind("openejb/client/.", "");
-            jndiRootContext.bind("openejb/Deployment/.", "");
+            jndiContext.bind("openejb/local/.", "");
+            jndiContext.bind("openejb/remote/.", "");
+            jndiContext.bind("openejb/client/.", "");
+            jndiContext.bind("openejb/Deployment/.", "");
         }
         catch (javax.naming.NamingException exception) {
-            throw new RuntimeException();
+            throw new RuntimeException(exception);
         }
-
-        // todo this should be in a start method because publishing an 
external reference in the constructor is very dangerous
-        
SystemInstance.get().setComponent(org.apache.openejb.spi.ContainerSystem.class, 
this);
+        SystemInstance.get().setComponent(JndiFactory.class, jndiFactory);
     }
     /**
      * Returns the DeploymentInfo for an EJB with the given deploymentID.
@@ -114,7 +117,7 @@
         this.webDeployments.remove(info.getId());
     }
 
-    public javax.naming.Context getJNDIContext() {
-        return jndiRootContext;
+    public Context getJNDIContext() {
+        return jndiContext;
     }
 }

Added: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/JndiFactory.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/JndiFactory.java?rev=792003&view=auto
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/JndiFactory.java
 (added)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/JndiFactory.java
 Wed Jul  8 00:09:42 2009
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+package org.apache.openejb.core;
+
+import java.util.Map;
+
+import javax.naming.Context;
+
+import org.apache.openejb.core.ivm.naming.NamingException;
+import org.apache.openejb.SystemException;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public interface JndiFactory {
+
+    Context createComponentContext(Map<String, Object> bindings) throws 
SystemException;
+
+    Context createRootContext();
+}

Propchange: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/JndiFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/JndiFactory.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/JndiFactory.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmJndiFactory.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmJndiFactory.java?rev=792003&view=auto
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmJndiFactory.java
 (added)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmJndiFactory.java
 Wed Jul  8 00:09:42 2009
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+package org.apache.openejb.core.ivm.naming;
+
+import java.util.Map;
+
+
+import javax.naming.Context;
+
+import org.apache.openejb.core.JndiFactory;
+import org.apache.openejb.SystemException;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class IvmJndiFactory implements JndiFactory {
+    private Context jndiRootContext;
+
+    public IvmJndiFactory() {
+        jndiRootContext = IvmContext.createRootContext();
+    }
+
+    public Context createComponentContext(Map<String, Object> bindings) throws 
SystemException {
+        IvmContext context = new IvmContext();
+        try {
+            context.bind("java:comp/env/dummy", "dummy");
+        } catch (javax.naming.NamingException e) {
+            throw new org.apache.openejb.SystemException("Unable to create 
subcontext 'java:comp/env'.  Exception:"+e.getMessage(),e);
+        }
+        for (Map.Entry<String, Object> entry:  bindings.entrySet()) {
+            String name = entry.getKey();
+            Object value = entry.getValue();
+            if (value == null) continue;
+            try {
+                context.bind(name, value);
+            } catch (javax.naming.NamingException e) {
+                throw new org.apache.openejb.SystemException("Unable to bind 
'" + name + "' into bean's enc.", e);
+            }
+        }
+
+        return context;
+    }
+
+    public Context createRootContext() {
+        return jndiRootContext;
+    }
+
+}

Propchange: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmJndiFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmJndiFactory.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmJndiFactory.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/spi/ContainerSystem.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/spi/ContainerSystem.java?rev=792003&r1=792002&r2=792003&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/spi/ContainerSystem.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/spi/ContainerSystem.java
 Wed Jul  8 00:09:42 2009
@@ -19,6 +19,7 @@
 import org.apache.openejb.Container;
 import org.apache.openejb.DeploymentInfo;
 import org.apache.openejb.core.WebDeploymentInfo;
+import org.apache.openejb.core.JndiFactory;
 
 import javax.naming.Context;
 import javax.xml.namespace.QName;
@@ -34,8 +35,7 @@
 
     public Container [] containers();
 
-    public Context getJNDIContext();
-
     WebDeploymentInfo getWebDeploymentInfo(String id);
 
+    Context getJNDIContext();
 }
\ No newline at end of file

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/resource/activemq/OpenEjbBrokerFactoryTest.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/resource/activemq/OpenEjbBrokerFactoryTest.java?rev=792003&r1=792002&r2=792003&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/resource/activemq/OpenEjbBrokerFactoryTest.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/resource/activemq/OpenEjbBrokerFactoryTest.java
 Wed Jul  8 00:09:42 2009
@@ -121,7 +121,7 @@
         assertSame(dataSource, new 
InitialContext().lookup("openejb/Resource/TestDs"));
 
         CoreContainerSystem containerSystem = new CoreContainerSystem(new 
IvmJndiFactory());
-        containerSystem.getJNDIFactory().bind("openejb/Resource/TestDs", 
dataSource);
+        containerSystem.getJNDIContext().bind("openejb/Resource/TestDs", 
dataSource);
         SystemInstance.get().setComponent(ContainerSystem.class, 
containerSystem);
 
         properties.put("DataSource", "TestDs");


Reply via email to