You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2003/11/13 05:30:56 UTC
cvs commit: incubator-geronimo/modules/core/src/test/org/apache/geronimo/naming/java ContextBuilderTest.java
djencks 2003/11/12 20:30:56
Modified: modules/core/src/java/org/apache/geronimo/client
Launcher.java
modules/core/src/java/org/apache/geronimo/naming/java
ComponentContextBuilder.java ReadOnlyContext.java
modules/core/src/test/org/apache/geronimo/naming/java
ContextBuilderTest.java
Added: modules/core/src/java/org/apache/geronimo/naming/java
ReferenceFactory.java
Log:
Use references to the jmx namespace to look up ejbs and resources in the java:comp local context. The references are supplied by a ReferenceFactory, making the reference scheme pluggable.
Revision Changes Path
1.9 +6 -2 incubator-geronimo/modules/core/src/java/org/apache/geronimo/client/Launcher.java
Index: Launcher.java
===================================================================
RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/client/Launcher.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- Launcher.java 19 Oct 2003 01:56:13 -0000 1.8
+++ Launcher.java 13 Nov 2003 04:30:56 -0000 1.9
@@ -91,6 +91,8 @@
import org.apache.geronimo.kernel.jmx.JMXUtil;
import org.apache.geronimo.naming.java.ComponentContextBuilder;
import org.apache.geronimo.naming.java.ReadOnlyContext;
+import org.apache.geronimo.naming.java.ReferenceFactory;
+import org.apache.geronimo.naming.jmx.JMXReferenceFactory;
import org.apache.geronimo.proxy.ProxyInvocation;
import org.apache.geronimo.transaction.manager.TransactionManagerImpl;
import org.apache.geronimo.transaction.manager.UserTransactionImpl;
@@ -206,7 +208,9 @@
UserTransaction userTransaction = txnManager == null ? null : new UserTransactionImpl(txnManager);
ApplicationClient appClient = loadAppClientDescriptor();
- ReadOnlyContext compContext = new ComponentContextBuilder(userTransaction).buildContext(appClient);
+ ReferenceFactory referenceFactory = new JMXReferenceFactory(kernel.getMBeanServerId());
+
+ ReadOnlyContext compContext = new ComponentContextBuilder(referenceFactory, userTransaction).buildContext(appClient);
AppClientContainer clientMBean = new AppClientContainer(clientURL, mainClassName, compContext);
clientName = JMXUtil.getObjectName("geronimo.client:url=" + ObjectName.quote(clientURL.toString()));
1.9 +21 -11 incubator-geronimo/modules/core/src/java/org/apache/geronimo/naming/java/ComponentContextBuilder.java
Index: ComponentContextBuilder.java
===================================================================
RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/naming/java/ComponentContextBuilder.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- ComponentContextBuilder.java 15 Oct 2003 02:53:26 -0000 1.8
+++ ComponentContextBuilder.java 13 Nov 2003 04:30:56 -0000 1.9
@@ -60,11 +60,14 @@
import java.util.HashMap;
import java.util.Map;
import javax.naming.LinkRef;
+import javax.naming.Reference;
+import javax.naming.NamingException;
import javax.transaction.UserTransaction;
import org.apache.geronimo.deployment.model.geronimo.j2ee.EjbRef;
import org.apache.geronimo.deployment.model.geronimo.j2ee.JNDIEnvironmentRefs;
import org.apache.geronimo.deployment.model.geronimo.j2ee.ResourceRef;
+import org.apache.geronimo.deployment.model.geronimo.j2ee.JNDILocator;
import org.apache.geronimo.deployment.model.j2ee.EnvEntry;
import org.apache.geronimo.kernel.deployment.DeploymentException;
@@ -74,14 +77,13 @@
* @version $Revision$ $Date$
*/
public class ComponentContextBuilder {
- private final UserTransaction userTransaction;
- public ComponentContextBuilder() {
- userTransaction = null;
- }
+ private final ReferenceFactory referenceFactory;
+ private final UserTransaction userTransaction;
- public ComponentContextBuilder(UserTransaction userTransaction) {
+ public ComponentContextBuilder(ReferenceFactory referenceFactory, UserTransaction userTransaction) {
this.userTransaction = userTransaction;
+ this.referenceFactory = referenceFactory;
}
/**
@@ -144,19 +146,23 @@
}
}
- private static void buildEJBRefs(Map envMap, EjbRef[] ejbRefs) {
+ private void buildEJBRefs(Map envMap, EjbRef[] ejbRefs) throws DeploymentException {
for (int i = 0; i < ejbRefs.length; i++) {
EjbRef ejbRef = ejbRefs[i];
String name = ejbRef.getEJBRefName();
- String jndiName = ejbRef.getJndiName();
- LinkRef ref = new LinkRef(jndiName);
+ Reference ref = null;
+ try {
+ ref = referenceFactory.getReference(ejbRef, ejbRef.getEJBRefType());
+ } catch (NamingException e) {
+ throw new DeploymentException("Could not construct reference to " + ejbRef.getJndiName());
+ }
if (envMap.put(name, ref) != null) {
throw new AssertionError("Duplicate entry for env-entry " + name);
}
}
}
- private static void buildResourceRefs(Map envMap, ResourceRef[] resRefs) throws DeploymentException {
+ private void buildResourceRefs(Map envMap, ResourceRef[] resRefs) throws DeploymentException {
for (int i=0; i < resRefs.length; i++) {
ResourceRef resRef = resRefs[i];
String name = resRef.getResRefName();
@@ -169,7 +175,11 @@
throw new DeploymentException("Invalid URL for resource-ref "+name, e);
}
} else {
- throw new DeploymentException("Cannot create resource-ref for "+name+", unknown type "+type);
+ try {
+ ref = referenceFactory.getReference(resRef, "ConnectionFactory");
+ } catch (NamingException e) {
+ throw new DeploymentException("Could not construct reference to " + resRef.getJndiName());
+ }
}
if (envMap.put(name, ref) != null) {
throw new AssertionError("Duplicate entry for resource-ref " + name);
1.5 +2 -2 incubator-geronimo/modules/core/src/java/org/apache/geronimo/naming/java/ReadOnlyContext.java
Index: ReadOnlyContext.java
===================================================================
RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/naming/java/ReadOnlyContext.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ReadOnlyContext.java 4 Sep 2003 05:16:17 -0000 1.4
+++ ReadOnlyContext.java 13 Nov 2003 04:30:56 -0000 1.5
@@ -215,7 +215,7 @@
}
public Object lookupLink(Name name) throws NamingException {
- return lookupLink(name);
+ return lookupLink(name.toString());
}
public NamingEnumeration list(Name name) throws NamingException {
1.1 incubator-geronimo/modules/core/src/java/org/apache/geronimo/naming/java/ReferenceFactory.java
Index: ReferenceFactory.java
===================================================================
package org.apache.geronimo.naming.java;
import javax.naming.Reference;
import javax.naming.NamingException;
import org.apache.geronimo.deployment.model.geronimo.j2ee.JNDILocator;
/**
*
*
* @version $VERSION$ Nov 12, 2003$
*
* */
public interface ReferenceFactory {
Reference getReference(JNDILocator locator, String type) throws NamingException;
}
1.7 +57 -6 incubator-geronimo/modules/core/src/test/org/apache/geronimo/naming/java/ContextBuilderTest.java
Index: ContextBuilderTest.java
===================================================================
RCS file: /home/cvs/incubator-geronimo/modules/core/src/test/org/apache/geronimo/naming/java/ContextBuilderTest.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ContextBuilderTest.java 15 Oct 2003 02:53:26 -0000 1.6
+++ ContextBuilderTest.java 13 Nov 2003 04:30:56 -0000 1.7
@@ -58,14 +58,21 @@
import java.net.URL;
import javax.naming.Context;
import javax.naming.NameNotFoundException;
+import javax.naming.InitialContext;
import javax.transaction.UserTransaction;
+import javax.management.ObjectName;
import junit.framework.TestCase;
+import junit.framework.Test;
import org.apache.geronimo.deployment.model.geronimo.appclient.ApplicationClient;
import org.apache.geronimo.deployment.model.j2ee.EnvEntry;
import org.apache.geronimo.deployment.model.geronimo.j2ee.EjbRef;
import org.apache.geronimo.deployment.model.geronimo.j2ee.ResourceRef;
+import org.apache.geronimo.deployment.model.geronimo.j2ee.EjbLocalRef;
import org.apache.geronimo.transaction.manager.UserTransactionImpl;
+import org.apache.geronimo.kernel.jmx.JMXKernel;
+import org.apache.geronimo.naming.jmx.JMXReferenceFactory;
+import org.apache.geronimo.naming.jmx.TestObject;
/**
*
@@ -73,10 +80,22 @@
* @version $Revision$ $Date$
*/
public class ContextBuilderTest extends TestCase {
+ private static final String objectName1 = "geronimo.test:name=test1";
+ private static final String objectName2 = "geronimo.test:name=test2";
+
private ApplicationClient client;
private Context compCtx;
+ private JMXKernel kernel;
+ private ReferenceFactory referenceFactory;
+ private TestObject testObject1 = new TestObject(new Object());
+ private TestObject testObject2 = new TestObject(new Object());
protected void setUp() throws Exception {
+ kernel = new JMXKernel("geronimo.test");
+ kernel.getMBeanServer().registerMBean(testObject1, ObjectName.getInstance(objectName1));
+ kernel.getMBeanServer().registerMBean(testObject2, ObjectName.getInstance(objectName2));
+
+ referenceFactory = new JMXReferenceFactory(kernel.getMBeanServerId());
client = new ApplicationClient();
EnvEntry stringEntry = new EnvEntry();
stringEntry.setEnvEntryName("string");
@@ -87,24 +106,44 @@
intEntry.setEnvEntryType("java.lang.Integer");
intEntry.setEnvEntryValue("12345");
+ EjbRef ejbRef = new EjbRef();
+ ejbRef.setEJBRefName("here/there/EJB1");
+ ejbRef.setEJBRefType("Home");
+ ejbRef.setJndiName(objectName1);
+
+ //EjbLocalRef ejbLocalRef = new EjbLocalRef();
+ EjbRef ejbLocalRef = new EjbRef();
+ ejbLocalRef.setEJBRefName("local/here/LocalEJB2");
+ ejbLocalRef.setEJBRefType("LocalHome");
+ ejbLocalRef.setJndiName(objectName2);
+
ResourceRef urlRef = new ResourceRef();
urlRef.setResRefName("url/testURL");
urlRef.setResType(URL.class.getName());
urlRef.setJndiName("http://localhost/path");
+
+ ResourceRef cfRef = new ResourceRef();
+ cfRef.setResRefName("DefaultCF");
+ cfRef.setJndiName(objectName1);
+
client.setEnvEntry(new EnvEntry[] { stringEntry, intEntry });
- client.setEJBRef(new EjbRef[0]);
- client.setResourceRef(new ResourceRef[] { urlRef });
+ //client.setEJBRef(new EjbRef[] {ejbRef});
+ client.setEJBRef(new EjbRef[] {ejbRef, ejbLocalRef});
+ //client.setEJBLocalRef(new EjbLocalRef[] {ejbLocalRef});
+
+
+ client.setResourceRef(new ResourceRef[] { urlRef, cfRef });
}
public void testEnvEntries() throws Exception {
- compCtx = new ComponentContextBuilder().buildContext(client);
+ compCtx = new ComponentContextBuilder(referenceFactory, null).buildContext(client);
assertEquals("Hello World", compCtx.lookup("env/string"));
assertEquals(new Integer(12345), compCtx.lookup("env/int"));
assertEquals(new URL("http://localhost/path"), compCtx.lookup("env/url/testURL"));
}
public void testUserTransaction() throws Exception {
- compCtx = new ComponentContextBuilder().buildContext(client);
+ compCtx = new ComponentContextBuilder(referenceFactory, null).buildContext(client);
try {
compCtx.lookup("UserTransaction");
fail("Expected NameNotFoundException");
@@ -113,7 +152,19 @@
}
UserTransaction userTransaction = new UserTransactionImpl(null);
- compCtx = new ComponentContextBuilder(userTransaction).buildContext(client);
+ compCtx = new ComponentContextBuilder(referenceFactory, userTransaction).buildContext(client);
assertEquals(userTransaction, compCtx.lookup("UserTransaction"));
+ }
+
+ public void testEJBRefs() throws Exception {
+ ReadOnlyContext compContext = new ComponentContextBuilder(referenceFactory, null).buildContext(client);
+ RootContext.setComponentContext(compContext);
+ InitialContext initialContext = new InitialContext();
+ assertEquals("Expected object from testObject1", testObject1.getEJBHome(),
+ initialContext.lookup("java:comp/env/here/there/EJB1"));
+ assertEquals("Expected object from testObject2", testObject2.getEJBLocalHome(),
+ initialContext.lookup("java:comp/env/local/here/LocalEJB2"));
+ assertEquals("Expected object from testObject1", testObject1.getConnectionFactory(),
+ initialContext.lookup("java:comp/env/DefaultCF"));
}
}