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