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 2004/02/14 00:41:47 UTC
cvs commit: incubator-geronimo/modules/naming/src/test/org/apache/geronimo/naming/jmx TestObject.java
djencks 2004/02/13 15:41:47
Modified: modules/naming/src/java/org/apache/geronimo/naming/java
ReadOnlyContext.java
modules/naming/src/test/org/apache/geronimo/naming/java
AbstractContextTest.java
Added: modules/naming/src/java/org/apache/geronimo/naming/deployment
ComponentContextBuilder.java
modules/naming/src/schema geronimo-naming.xsd xmlconfig.xml
modules/naming/src/test/org/apache/geronimo/naming/deployment
ContextBuilderTest.java
Removed: modules/naming/src/java/org/apache/geronimo/naming/java
ComponentContextBuilder.java
modules/naming/src/test/org/apache/geronimo/naming/jmx
TestObject.java
Log:
Add a schema for geronimo naming stuff, fix the tests
Revision Changes Path
1.1 incubator-geronimo/modules/naming/src/java/org/apache/geronimo/naming/deployment/ComponentContextBuilder.java
Index: ComponentContextBuilder.java
===================================================================
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Geronimo" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Geronimo", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
* ====================================================================
*/
package org.apache.geronimo.naming.deployment;
import java.net.MalformedURLException;
import java.net.URL;
import javax.naming.NamingException;
import javax.transaction.UserTransaction;
import org.apache.geronimo.deployment.DeploymentException;
import org.apache.geronimo.xbeans.geronimo.GerEjbLocalRefType;
import org.apache.geronimo.xbeans.geronimo.GerEjbRefType;
import org.apache.geronimo.xbeans.geronimo.GerMessageDestinationRefType;
import org.apache.geronimo.xbeans.geronimo.GerResourceEnvRefType;
import org.apache.geronimo.xbeans.geronimo.GerResourceRefType;
import org.apache.geronimo.xbeans.j2ee.EjbLocalRefType;
import org.apache.geronimo.xbeans.j2ee.EjbRefType;
import org.apache.geronimo.xbeans.j2ee.EnvEntryType;
import org.apache.geronimo.xbeans.j2ee.MessageDestinationRefType;
import org.apache.geronimo.xbeans.j2ee.ResourceEnvRefType;
import org.apache.geronimo.xbeans.j2ee.ResourceRefType;
import org.apache.geronimo.xbeans.j2ee.EjbLinkType;
import org.apache.geronimo.xbeans.j2ee.MessageDestinationLinkType;
import org.apache.geronimo.naming.java.ProxyFactory;
import org.apache.geronimo.naming.java.ReadOnlyContext;
/**
*
*
* @version $Revision: 1.1 $ $Date: 2004/02/13 23:41:47 $
*/
public class ComponentContextBuilder {
private static final String ENV = "env/";
private final ProxyFactory proxyFactory;
private final ClassLoader cl;
public ComponentContextBuilder(ProxyFactory proxyFactory, ClassLoader cl) {
this.proxyFactory = proxyFactory;
this.cl = cl;
}
/**
* Build a component context from definitions contained in POJOs read from
* a deployment descriptor.
* @return a Context that can be bound to java:comp
*/
public ReadOnlyContext buildContext(EjbRefType[] ejbRefs, GerEjbRefType[] gerEjbRefs,
EjbLocalRefType[] ejbLocalRefs, GerEjbLocalRefType[] gerEjbLocalRefs,
EnvEntryType[] envEntries,
MessageDestinationRefType[] messageDestinationRefs, GerMessageDestinationRefType[] gerMessageDestinationRefs ,
ResourceEnvRefType[] resourceEnvRefs, GerResourceEnvRefType[] gerResourceEnvRefs,
ResourceRefType[] resourceRefs, GerResourceRefType[] gerResourceRefs,
UserTransaction userTransaction) throws DeploymentException {
ReadOnlyContext readOnlyContext = new ReadOnlyContext();
buildEnvEntries(readOnlyContext, envEntries);
buildEJBRefs(readOnlyContext, ejbRefs, gerEjbRefs);
buildEJBLocalRefs(readOnlyContext, ejbLocalRefs, gerEjbLocalRefs);
buildMessageDestinationRefs(readOnlyContext, messageDestinationRefs, gerMessageDestinationRefs);
buildResourceEnvRefs(readOnlyContext, resourceEnvRefs, gerResourceEnvRefs);
buildResourceRefs(readOnlyContext, resourceRefs, gerResourceRefs);
if (userTransaction != null) {
try {
readOnlyContext.externalBind("UserTransaction", userTransaction);
} catch (NamingException e) {
throw new DeploymentException("could not bind UserTransaction", e);
}
}
readOnlyContext.freeze();
return readOnlyContext;
}
private void buildEnvEntries(ReadOnlyContext readOnlyContext, EnvEntryType[] envEntries) throws DeploymentException {
if (envEntries == null) {
return;
}
for (int i = 0; i < envEntries.length; i++) {
EnvEntryType entry = envEntries[i];
String name = entry.getEnvEntryName().getStringValue();
String type = entry.getEnvEntryType().getStringValue();
String value = entry.getEnvEntryValue().getStringValue();
Object mapEntry;
try {
if (value == null) {
mapEntry = null;
} else if ("java.lang.String".equals(type)) {
mapEntry = value;
} else if ("java.lang.Character".equals(type)) {
mapEntry = new Character(value.charAt(0));
} else if ("java.lang.Boolean".equals(type)) {
mapEntry = Boolean.valueOf(value);
} else if ("java.lang.Byte".equals(type)) {
mapEntry = Byte.valueOf(value);
} else if ("java.lang.Short".equals(type)) {
mapEntry = Short.valueOf(value);
} else if ("java.lang.Integer".equals(type)) {
mapEntry = Integer.valueOf(value);
} else if ("java.lang.Long".equals(type)) {
mapEntry = Long.valueOf(value);
} else if ("java.lang.Float".equals(type)) {
mapEntry = Float.valueOf(value);
} else if ("java.lang.Double".equals(type)) {
mapEntry = Double.valueOf(value);
} else {
throw new AssertionError("Invalid class for env-entry " + name + ", " + type);
}
} catch (NumberFormatException e) {
throw new DeploymentException("Invalid numeric value for env-entry " + name + ", value=" + value);
}
try {
readOnlyContext.externalBind(ENV + name, mapEntry);
} catch (NamingException e) {
throw new DeploymentException("Could not bind", e);
}
}
}
private void buildEJBRefs(ReadOnlyContext readOnlyContext, EjbRefType[] ejbRefs, GerEjbRefType[] gerEjbRefs) throws DeploymentException {
if (ejbRefs == null) {
return;
}
assert ejbRefs.length == gerEjbRefs.length;
for (int i = 0; i < ejbRefs.length; i++) {
EjbRefType ejbRef = ejbRefs[i];
String name = ejbRef.getEjbRefName().getStringValue();
assert name.equals(gerEjbRefs[i].getEjbRefName().getStringValue());
Object proxy = null;
try {
proxy = proxyFactory.getProxy(loadClass(ejbRef.getHome().getStringValue()), loadClass(ejbRef.getRemote().getStringValue()), getLink(gerEjbRefs[i].getUri(), ejbRef.getEjbLink()));
} catch (NamingException e) {
throw new DeploymentException("Could not construct proxy for " + ejbRef + ", " + e.getMessage());
}
try {
readOnlyContext.externalBind(ENV + name, proxy);
} catch (NamingException e) {
throw new DeploymentException("could not bind", e);
}
}
}
private void buildEJBLocalRefs(ReadOnlyContext readOnlyContext, EjbLocalRefType[] ejbLocalRefs, GerEjbLocalRefType[] gerEjbLocalRefs) throws DeploymentException {
if (ejbLocalRefs == null) {
return;
}
assert ejbLocalRefs.length == gerEjbLocalRefs.length;
for (int i = 0; i < ejbLocalRefs.length; i++) {
EjbLocalRefType ejbLocalRef = ejbLocalRefs[i];
String name = ejbLocalRef.getEjbRefName().getStringValue();
assert name.equals(gerEjbLocalRefs[i].getEjbRefName().getStringValue());
Object proxy = null;
try {
proxy = proxyFactory.getProxy(loadClass(ejbLocalRef.getLocalHome().getStringValue()), loadClass(ejbLocalRef.getLocal().getStringValue()), getLink(gerEjbLocalRefs[i].getUri(), ejbLocalRef.getEjbLink()));
} catch (NamingException e) {
throw new DeploymentException("Could not construct reference to " + ejbLocalRef + ", " + e.getMessage());
}
try {
readOnlyContext.externalBind(ENV + name, proxy);
} catch (NamingException e) {
throw new DeploymentException("Could not bind", e);
}
}
}
private void buildMessageDestinationRefs(ReadOnlyContext readOnlyContext, MessageDestinationRefType[] messageDestinationRefs, GerMessageDestinationRefType[] gerMessageDestinationRefs) throws DeploymentException {
if (messageDestinationRefs == null) {
return;
}
assert messageDestinationRefs.length == gerMessageDestinationRefs.length;
for (int i = 0; i < messageDestinationRefs.length; i++) {
MessageDestinationRefType messageDestination = messageDestinationRefs[i];
String name = messageDestination.getMessageDestinationRefName().getStringValue();
assert name.equals(gerMessageDestinationRefs[i].getMessageDestinationRefName().getStringValue());
Object proxy = null;
try {
proxy = proxyFactory.getProxy(loadClass(messageDestination.getMessageDestinationType().getStringValue()), getLink(gerMessageDestinationRefs[i].getUri(), messageDestination.getMessageDestinationLink()));
} catch (NamingException e) {
throw new DeploymentException("Could not construct reference to " + messageDestination + ", " + e.getMessage());
}
try {
readOnlyContext.externalBind(ENV + name, proxy);
} catch (NamingException e) {
throw new DeploymentException("Could not bind", e);
}
}
}
private void buildResourceEnvRefs(ReadOnlyContext readOnlyContext, ResourceEnvRefType[] resourceEnvRefs, GerResourceEnvRefType[] gerResourceEnvRefs) throws DeploymentException {
if (resourceEnvRefs == null) {
return;
}
assert resourceEnvRefs.length == gerResourceEnvRefs.length;
for (int i = 0; i < resourceEnvRefs.length; i++) {
ResourceEnvRefType resEnvRef = resourceEnvRefs[i];
String name = resEnvRef.getResourceEnvRefName().getStringValue();
assert name.equals(gerResourceEnvRefs[i].getResourceEnvRefName().getStringValue());
Object proxy = null;
try {
proxy = proxyFactory.getProxy(loadClass(resEnvRef.getResourceEnvRefType().getStringValue()), getLink(gerResourceEnvRefs[i].getUri()));
} catch (NamingException e) {
throw new DeploymentException("Could not construct reference to " + resEnvRef + ", " + e.getMessage());
}
try {
readOnlyContext.externalBind(ENV + name, proxy);
} catch (NamingException e) {
throw new DeploymentException("Could not bind", e);
}
}
}
private void buildResourceRefs(ReadOnlyContext readOnlyContext, ResourceRefType[] resRefs, GerResourceRefType[] gerResRefs) throws DeploymentException {
if (resRefs == null) {
return;
}
assert resRefs.length == gerResRefs.length;
for (int i=0; i < resRefs.length; i++) {
ResourceRefType resRef = resRefs[i];
String name = resRef.getResRefName().getStringValue();
assert name.equals(gerResRefs[i].getResRefName().getStringValue());
String type = resRef.getResType().getStringValue();
Object proxy;
if ("java.net.URL".equals(type)) {
//for some reason the spec regards URL as a connection factory...
try {
proxy = new URL(gerResRefs[i].getUri());
} catch (MalformedURLException e) {
throw new DeploymentException("Invalid URL for resource-proxy "+name, e);
}
} else {
try {
proxy = proxyFactory.getProxy(loadClass(resRef.getResType().getStringValue()), getLink(gerResRefs[i].getUri()));
} catch (NamingException e) {
throw new DeploymentException("Could not construct reference to " + resRef);
}
}
try {
readOnlyContext.externalBind(ENV + name, proxy);
} catch (NamingException e) {
throw new DeploymentException("Could not bind", e);
}
}
}
//TODO figure out how to use the link properly.
private Object getLink(String uri, EjbLinkType link) {
if (link != null) {
return link.getStringValue();
}
return uri;
}
private Object getLink(String uri, MessageDestinationLinkType link) {
if (link != null) {
return link.getStringValue();
}
return uri;
}
private Object getLink(String uri) {
return uri;
}
private Class loadClass(String stringValue) throws DeploymentException {
try {
return cl.loadClass(stringValue);
} catch (ClassNotFoundException e) {
throw new DeploymentException("Could not load interface class: " + stringValue, e);
}
}
}
1.2 +15 -2 incubator-geronimo/modules/naming/src/java/org/apache/geronimo/naming/java/ReadOnlyContext.java
Index: ReadOnlyContext.java
===================================================================
RCS file: /home/cvs/incubator-geronimo/modules/naming/src/java/org/apache/geronimo/naming/java/ReadOnlyContext.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ReadOnlyContext.java 12 Feb 2004 20:38:18 -0000 1.1
+++ ReadOnlyContext.java 13 Feb 2004 23:41:47 -0000 1.2
@@ -100,7 +100,9 @@
protected final Map bindings; // bindings at my level
protected final Map treeBindings; // all bindings under me
- protected ReadOnlyContext() {
+ private boolean fixed = false;
+
+ public ReadOnlyContext() {
env = new Hashtable();
bindings = new HashMap();
treeBindings = new HashMap();
@@ -120,6 +122,17 @@
this.bindings = clone.bindings;
this.treeBindings = clone.treeBindings;
this.env = new Hashtable(env);
+ }
+
+ public void freeze() {
+ fixed = true;
+ }
+
+ public void externalBind(String name, Object value) throws NamingException {
+ if (fixed) {
+ throw new NamingException("ReadOnlyContext has been frozen");
+ }
+ internalBind(name, value);
}
/**
1.1 incubator-geronimo/modules/naming/src/schema/geronimo-naming.xsd
Index: geronimo-naming.xsd
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:ger="http://geronimo.apache.org/xml/ns/j2ee"
targetNamespace="http://geronimo.apache.org/xml/ns/j2ee"
xmlns:j2ee="http://java.sun.com/xml/ns/j2ee"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
version="1.0">
<xsd:import namespace="http://java.sun.com/xml/ns/j2ee" schemaLocation="j2ee_1_4.xsd"/>
<xsd:group name="jndiEnvironmentRefsGroup">
<xsd:annotation>
<xsd:documentation>
This group keeps the usage of the contained JNDI environment
reference elements consistent across J2EE deployment descriptors.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="env-entry"
type="ger:env-entryType"
minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="ejb-ref"
type="ger:ejb-refType"
minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="ejb-local-ref"
type="ger:ejb-local-refType"
minOccurs="0" maxOccurs="unbounded"/>
<!-- leave web services out until I know what they do -->
<!--xsd:group ref="ger:service-refGroup"/-->
<xsd:element name="resource-ref"
type="ger:resource-refType"
minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="resource-env-ref"
type="ger:resource-env-refType"
minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="message-destination-ref"
type="ger:message-destination-refType"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:group>
<xsd:complexType name="ejb-refType">
<xsd:sequence>
<xsd:element name="ejb-ref-name" type="j2ee:ejb-ref-nameType"/>
<xsd:element name="uri" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<!-- has exactly same content as ejb-refType, might not be needed -->
<xsd:complexType name="ejb-local-refType">
<xsd:sequence>
<xsd:element name="ejb-ref-name" type="j2ee:ejb-ref-nameType"/>
<xsd:element name="uri" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="message-destination-refType">
<xsd:sequence>
<xsd:element name="message-destination-ref-name"
type="j2ee:jndi-nameType"/>
<xsd:element name="uri" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="resource-env-refType">
<xsd:sequence>
<xsd:element name="resource-env-ref-name"
type="j2ee:jndi-nameType"/>
<xsd:element name="uri" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="resource-refType">
<xsd:sequence>
<xsd:element name="res-ref-name"
type="j2ee:jndi-nameType"/>
<xsd:element name="uri" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
1.1 incubator-geronimo/modules/naming/src/schema/xmlconfig.xml
Index: xmlconfig.xml
===================================================================
<xb:config xmlns:xb="http://www.bea.com/2002/09/xbean/config"
>
<xb:namespace uri="http://geronimo.apache.org/xml/ns/j2ee">
<xb:package>org.apache.geronimo.xbeans.geronimo</xb:package>
<xb:prefix>Ger</xb:prefix>
</xb:namespace>
</xb:config>
1.1 incubator-geronimo/modules/naming/src/test/org/apache/geronimo/naming/deployment/ContextBuilderTest.java
Index: ContextBuilderTest.java
===================================================================
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Geronimo" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Geronimo", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
* ====================================================================
*/
package org.apache.geronimo.naming.deployment;
import java.net.URL;
import javax.management.InstanceAlreadyExistsException;
import javax.management.MBeanRegistrationException;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.naming.Context;
import javax.naming.NameNotFoundException;
import javax.naming.NamingException;
import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.NotSupportedException;
import javax.transaction.RollbackException;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;
import junit.framework.TestCase;
import org.apache.geronimo.deployment.DeploymentException;
import org.apache.geronimo.kernel.jmx.JMXKernel;
import org.apache.geronimo.naming.java.ProxyFactory;
import org.apache.geronimo.xbeans.geronimo.GerEjbLocalRefType;
import org.apache.geronimo.xbeans.geronimo.GerEjbRefType;
import org.apache.geronimo.xbeans.geronimo.GerMessageDestinationRefType;
import org.apache.geronimo.xbeans.geronimo.GerResourceEnvRefType;
import org.apache.geronimo.xbeans.geronimo.GerResourceRefType;
import org.apache.geronimo.xbeans.j2ee.EjbLocalRefType;
import org.apache.geronimo.xbeans.j2ee.EjbRefType;
import org.apache.geronimo.xbeans.j2ee.EnvEntryType;
import org.apache.geronimo.xbeans.j2ee.MessageDestinationRefType;
import org.apache.geronimo.xbeans.j2ee.ResourceEnvRefType;
import org.apache.geronimo.xbeans.j2ee.ResourceRefType;
/**
* THIS IS A COPY OF org.apache.geronimo.naming.java.ContextBuilderTest.
* Copied because maven doesn't share test classes.
*
* @version $Revision: 1.1 $ $Date: 2004/02/13 23:41:47 $
*/
public class ContextBuilderTest extends TestCase {
protected EjbRefType[] ejbRefs;
private GerEjbRefType[] gerEjbRefs;
protected EjbLocalRefType[] ejbLocalRefs;
private GerEjbLocalRefType[] gerEjbLocalRefs;
protected EnvEntryType[] envEntries;
private MessageDestinationRefType[] messageDestinationRefs;
private GerMessageDestinationRefType[] gerMessageDestinationRefs;
private ResourceEnvRefType[] resEnvRefs;
private GerResourceEnvRefType[] gerResEnvRefs;
protected ResourceRefType[] resRefs;
private GerResourceRefType[] gerResRefs;
protected Context compCtx;
protected JMXKernel kernel;
protected ProxyFactory proxyFactory;
private static final String EJB1_NAME = "here/there/EJB1";
private static final String EJB2_NAME = "here/LinkEjb";
private static final String LOCAL_EJB1_NAME = "local/here/LocalEJB2";
private static final String LOCAL_EJB2_NAME = "local/here/LinkLocalEjb";
private static final String RESOURCE_REF1_NAME = "url/testURL";
private static final String RESOURCE_REF2_NAME = "DefaultCF";
protected void setUpContext(UserTransaction userTransaction) throws InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException, MalformedObjectNameException, DeploymentException {
proxyFactory = new ProxyFactory() {
public Object getProxy(Class homeInterface, Class remoteInterface, Object targetId) throws NamingException {
return targetId;
}
public Object getProxy(Class interfaced, Object targetId) throws NamingException {
return targetId;
}
};
//Ejb Refs
EjbRefType ejbRef = EjbRefType.Factory.newInstance();
ejbRef.addNewEjbRefName().setStringValue(EJB1_NAME);
ejbRef.addNewEjbRefType().setStringValue("Session");
ejbRef.addNewHome().setStringValue(Object.class.getName());
ejbRef.addNewRemote().setStringValue(Object.class.getName());
GerEjbRefType gerEjbRef = GerEjbRefType.Factory.newInstance();
gerEjbRef.addNewEjbRefName().setStringValue(EJB1_NAME);
gerEjbRef.setUri(EJB1_NAME);
EjbRefType ejbLinkRef = EjbRefType.Factory.newInstance();
ejbLinkRef.addNewEjbRefName().setStringValue(EJB2_NAME);
ejbLinkRef.addNewEjbRefType().setStringValue("Session");
ejbLinkRef.addNewHome().setStringValue(Object.class.getName());
ejbLinkRef.addNewRemote().setStringValue(Object.class.getName());
ejbLinkRef.addNewEjbLink().setStringValue(EJB2_NAME);
GerEjbRefType gerEjbLinkRef = GerEjbRefType.Factory.newInstance();
gerEjbLinkRef.addNewEjbRefName().setStringValue(EJB2_NAME);
ejbRefs = new EjbRefType[]{ejbRef, ejbLinkRef};
gerEjbRefs = new GerEjbRefType[] {gerEjbRef, gerEjbLinkRef};
//ejb local refs
EjbLocalRefType ejbLocalRef = EjbLocalRefType.Factory.newInstance();
ejbLocalRef.addNewEjbRefName().setStringValue(LOCAL_EJB1_NAME);
ejbLocalRef.addNewEjbRefType().setStringValue("Entity");
ejbLocalRef.addNewLocalHome().setStringValue(Object.class.getName());
ejbLocalRef.addNewLocal().setStringValue(Object.class.getName());
GerEjbLocalRefType gerEjbLocalRef = GerEjbLocalRefType.Factory.newInstance();
gerEjbLocalRef.addNewEjbRefName().setStringValue(LOCAL_EJB1_NAME);
gerEjbLocalRef.setUri(LOCAL_EJB1_NAME);
EjbLocalRefType ejbLocalLinkRef = EjbLocalRefType.Factory.newInstance();
ejbLocalLinkRef.addNewEjbRefName().setStringValue(LOCAL_EJB2_NAME);
ejbLocalLinkRef.addNewEjbRefType().setStringValue("Entity");
ejbLocalLinkRef.addNewLocalHome().setStringValue(Object.class.getName());
ejbLocalLinkRef.addNewLocal().setStringValue(Object.class.getName());
ejbLocalLinkRef.addNewEjbLink().setStringValue(LOCAL_EJB2_NAME);
GerEjbLocalRefType gerEjbLocalLinkRef = GerEjbLocalRefType.Factory.newInstance();
gerEjbLocalLinkRef.addNewEjbRefName().setStringValue(LOCAL_EJB2_NAME);
ejbLocalRefs = new EjbLocalRefType[]{ejbLocalRef, ejbLocalLinkRef};
gerEjbLocalRefs = new GerEjbLocalRefType[] {gerEjbLocalRef, gerEjbLocalLinkRef};
//env entries
EnvEntryType stringEntry = EnvEntryType.Factory.newInstance();
stringEntry.addNewEnvEntryName().setStringValue("hello/world");
stringEntry.addNewEnvEntryType().setStringValue("java.lang.String");
stringEntry.addNewEnvEntryValue().setStringValue("Hello World");
EnvEntryType intEntry = EnvEntryType.Factory.newInstance();
intEntry.addNewEnvEntryName().setStringValue("int");
intEntry.addNewEnvEntryType().setStringValue("java.lang.Integer");
intEntry.addNewEnvEntryValue().setStringValue("12345");
envEntries = new EnvEntryType[]{stringEntry, intEntry};
//message destinations
messageDestinationRefs = new MessageDestinationRefType[] {};
gerMessageDestinationRefs = new GerMessageDestinationRefType[] {};
//resource env refs (admin objects)
resEnvRefs = new ResourceEnvRefType[] {};
gerResEnvRefs = new GerResourceEnvRefType[] {};
//resource refs
ResourceRefType urlRef = ResourceRefType.Factory.newInstance();
urlRef.addNewResRefName().setStringValue(RESOURCE_REF1_NAME);
urlRef.addNewResType().setStringValue(URL.class.getName());
GerResourceRefType gerUrlRef = GerResourceRefType.Factory.newInstance();
gerUrlRef.addNewResRefName().setStringValue(RESOURCE_REF1_NAME);
gerUrlRef.setUri("http://localhost/path");
ResourceRefType cfRef = ResourceRefType.Factory.newInstance();
cfRef.addNewResRefName().setStringValue(RESOURCE_REF2_NAME);
cfRef.addNewResType().setStringValue("javax.sql.DataSource");
GerResourceRefType gerCfRef = GerResourceRefType.Factory.newInstance();
gerCfRef.addNewResRefName().setStringValue(RESOURCE_REF2_NAME);
gerCfRef.setUri(RESOURCE_REF2_NAME);
resRefs = new ResourceRefType[]{urlRef, cfRef};
gerResRefs = new GerResourceRefType[] {gerUrlRef, gerCfRef};
//put it all together
compCtx = new ComponentContextBuilder(proxyFactory, this.getClass().getClassLoader())
.buildContext(ejbRefs, gerEjbRefs,
ejbLocalRefs, gerEjbLocalRefs,
envEntries,
messageDestinationRefs, gerMessageDestinationRefs,
resEnvRefs, gerResEnvRefs,
resRefs, gerResRefs,
userTransaction);
}
public void testEnvEntries() throws Exception {
setUpContext(null);
assertEquals("Hello World", compCtx.lookup("env/hello/world"));
assertEquals(new Integer(12345), compCtx.lookup("env/int"));
}
public void testNoUserTransaction() throws Exception {
setUpContext(null);
try {
compCtx.lookup("UserTransaction");
fail("Expected NameNotFoundException");
} catch (NameNotFoundException e) {
// OK
}
}
public void testUserTransaction() throws Exception {
UserTransaction userTransaction = new UserTransaction() {
public void begin() throws NotSupportedException, SystemException {
}
public void commit() throws HeuristicMixedException, HeuristicRollbackException, IllegalStateException, RollbackException, SecurityException, SystemException {
}
public int getStatus() throws SystemException {
return 0;
}
public void rollback() throws IllegalStateException, SecurityException, SystemException {
}
public void setRollbackOnly() throws IllegalStateException, SystemException {
}
public void setTransactionTimeout(int seconds) throws SystemException {
}
};
setUpContext(userTransaction);
assertEquals(userTransaction, compCtx.lookup("UserTransaction"));
}
public void testEJBRefs() throws Exception {
setUpContext(null);
assertEquals("Expected object from testObject1", EJB1_NAME,
compCtx.lookup("env/" + EJB1_NAME));
assertEquals("Expected object from testObject3", EJB2_NAME,
compCtx.lookup("env/" + EJB2_NAME));
}
public void testLocalEJBRefs() throws Exception {
setUpContext(null);
assertEquals("Expected object from testObject1", LOCAL_EJB1_NAME,
compCtx.lookup("env/" + LOCAL_EJB1_NAME));
assertEquals("Expected object from testObject3", LOCAL_EJB2_NAME,
compCtx.lookup("env/" + LOCAL_EJB2_NAME));
}
public void testResourceRefs() throws Exception {
setUpContext(null);
assertEquals(new URL("http://localhost/path"), compCtx.lookup("env/" + RESOURCE_REF1_NAME));
assertEquals("Expected object from testObject1", RESOURCE_REF2_NAME,
compCtx.lookup("env/" + RESOURCE_REF2_NAME));
}
}
1.2 +1 -12 incubator-geronimo/modules/naming/src/test/org/apache/geronimo/naming/java/AbstractContextTest.java
Index: AbstractContextTest.java
===================================================================
RCS file: /home/cvs/incubator-geronimo/modules/naming/src/test/org/apache/geronimo/naming/java/AbstractContextTest.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AbstractContextTest.java 12 Feb 2004 20:38:19 -0000 1.1
+++ AbstractContextTest.java 13 Feb 2004 23:41:47 -0000 1.2
@@ -60,17 +60,12 @@
import java.util.Map;
import java.util.Properties;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.LinkRef;
import javax.naming.NamingException;
import junit.framework.TestCase;
-import org.apache.geronimo.gbean.GBeanInfo;
-import org.apache.geronimo.gbean.jmx.GBeanMBean;
-import org.apache.geronimo.naming.jmx.TestObject;
/**
*
@@ -116,10 +111,4 @@
readOnlyContext.internalBind(name, value);
}
- public static TestObject registerTestObject(MBeanServer server, ObjectName objectName) throws Exception {
- GBeanInfo gbeanInfo = TestObject.getGBeanInfo();
- GBeanMBean gbean = new GBeanMBean(gbeanInfo);
- server.registerMBean(gbean, objectName);
- return (TestObject) gbean.getTarget();
- }
}