Author: dain Date: Thu Jan 20 20:39:28 2005 New Revision: 125889 URL: http://svn.apache.org/viewcvs?view=rev&rev=125889 Log: Added kernel and class loader aware references to naming. These reference will have the kernel and/or class loader injected on startup. Added SimpleReference which has a faster getContent() if the Context implementation supports it. Otherwise, it supports the normal slow refernce code. Started to add support for accessing gbean referenced via JNDI.
Added: geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/ClassLoaderAwareReference.java geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/GBeanProxyReference.java geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/KernelAwareReference.java geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/KernelReference.java geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/ResourceReference.java geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/SimpleAwareReference.java geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/SimpleReference.java Removed: geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/GBeanGetResourceRefAddr.java geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/GBeanRefAddr.java geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/RefAddrContentObjectFactory.java Modified: geronimo/trunk/modules/assembly/src/plan/j2ee-client-plan.xml geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/AppClientContainer.java geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/AppClientPlugin.java geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/StaticJndiContextPlugin.java geronimo/trunk/modules/connector-builder/src/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/Kernel.java geronimo/trunk/modules/naming-builder/src/java/org/apache/geronimo/naming/deployment/ENCConfigBuilder.java geronimo/trunk/modules/naming-builder/src/schema/geronimo-naming.xsd geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/java/ComponentContextBuilder.java geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/java/ReadOnlyContext.java geronimo/trunk/modules/naming/src/test/org/apache/geronimo/naming/java/ContextBuilderTest.java Modified: geronimo/trunk/modules/assembly/src/plan/j2ee-client-plan.xml Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/assembly/src/plan/j2ee-client-plan.xml?view=diff&rev=125889&p1=geronimo/trunk/modules/assembly/src/plan/j2ee-client-plan.xml&r1=125888&p2=geronimo/trunk/modules/assembly/src/plan/j2ee-client-plan.xml&r2=125889 ============================================================================== --- geronimo/trunk/modules/assembly/src/plan/j2ee-client-plan.xml (original) +++ geronimo/trunk/modules/assembly/src/plan/j2ee-client-plan.xml Thu Jan 20 20:39:28 2005 @@ -71,11 +71,6 @@ <uri>geronimo/jars/geronimo-j2ee-${geronimo_version}.jar</uri> </dependency> -<!-- <gbean name="geronimo.client:type=JNDIContext" class="org.openejb.client.AppClientJNDIContext">--> -<!-- <attribute name="host" type="java.lang.String">localhost</attribute>--> -<!-- <attribute name="port" type="int">4201</attribute>--> -<!-- </gbean>--> - <!--client connector support--> <gbean namePart="DefaultThreadPool" class="org.apache.geronimo.pool.ThreadPool"> <attribute name="keepAliveTime" type="long">5000</attribute> Modified: geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/AppClientContainer.java Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/AppClientContainer.java?view=diff&rev=125889&p1=geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/AppClientContainer.java&r1=125888&p2=geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/AppClientContainer.java&r2=125889 ============================================================================== --- geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/AppClientContainer.java (original) +++ geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/AppClientContainer.java Thu Jan 20 20:39:28 2005 @@ -71,7 +71,7 @@ TransactionContext oldTransactionContext = transactionContextManager.getContext(); TransactionContext currentTransactionContext = null; try { - jndiContext.startClient(appClientModuleName); + jndiContext.startClient(appClientModuleName, null, classLoader); currentTransactionContext = transactionContextManager.newUnspecifiedTransactionContext(); mainMethod.invoke(null, new Object[]{args}); Modified: geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/AppClientPlugin.java Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/AppClientPlugin.java?view=diff&rev=125889&p1=geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/AppClientPlugin.java&r1=125888&p2=geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/AppClientPlugin.java&r2=125889 ============================================================================== --- geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/AppClientPlugin.java (original) +++ geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/AppClientPlugin.java Thu Jan 20 20:39:28 2005 @@ -18,11 +18,13 @@ import javax.management.ObjectName; +import org.apache.geronimo.kernel.Kernel; + /** * @version $Revision$ $Date$ */ public interface AppClientPlugin { - public void startClient(ObjectName appClientModuleName) throws Exception; + public void startClient(ObjectName appClientModuleName, Kernel kernel, ClassLoader classLoader) throws Exception; public void stopClient(ObjectName appClientModuleName) throws Exception; Modified: geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/StaticJndiContextPlugin.java Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/StaticJndiContextPlugin.java?view=diff&rev=125889&p1=geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/StaticJndiContextPlugin.java&r1=125888&p2=geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/StaticJndiContextPlugin.java&r2=125889 ============================================================================== --- geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/StaticJndiContextPlugin.java (original) +++ geronimo/trunk/modules/client/src/java/org/apache/geronimo/client/StaticJndiContextPlugin.java Thu Jan 20 20:39:28 2005 @@ -23,6 +23,7 @@ import org.apache.geronimo.naming.java.RootContext; import org.apache.geronimo.gbean.GBeanInfo; import org.apache.geronimo.gbean.GBeanInfoBuilder; +import org.apache.geronimo.kernel.Kernel; /** * @version $Rev$ $Date$ @@ -34,7 +35,9 @@ this.context = context; } - public void startClient(ObjectName appClientModuleName) throws Exception { + public void startClient(ObjectName appClientModuleName, Kernel kernel, ClassLoader classLoader) throws Exception { + context.setKernel(kernel); + context.setClassLoader(classLoader); RootContext.setComponentContext(context); System.setProperty("java.naming.factory.initial", "com.sun.jndi.rmi.registry.RegistryContextFactory"); System.setProperty("java.naming.factory.url.pkgs", "org.apache.geronimo.naming"); Modified: geronimo/trunk/modules/connector-builder/src/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/connector-builder/src/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java?view=diff&rev=125889&p1=geronimo/trunk/modules/connector-builder/src/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java&r1=125888&p2=geronimo/trunk/modules/connector-builder/src/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java&r2=125889 ============================================================================== --- geronimo/trunk/modules/connector-builder/src/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java (original) +++ geronimo/trunk/modules/connector-builder/src/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java Thu Jan 20 20:39:28 2005 @@ -74,8 +74,7 @@ import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; import org.apache.geronimo.kernel.Kernel; import org.apache.geronimo.kernel.repository.Repository; -import org.apache.geronimo.naming.reference.GBeanGetResourceRefAddr; -import org.apache.geronimo.naming.reference.RefAddrContentObjectFactory; +import org.apache.geronimo.naming.reference.ResourceReference; import org.apache.geronimo.naming.deployment.ENCConfigBuilder; import org.apache.geronimo.schema.SchemaConversionUtils; import org.apache.geronimo.xbeans.geronimo.GerAdminobjectInstanceType; @@ -775,15 +774,11 @@ //ResourceReferenceBuilder implementation public Reference createResourceRef(String containerId, Class iface) throws DeploymentException { - Reference ref = new Reference(null, RefAddrContentObjectFactory.class.getName(), null); - ref.add(new GBeanGetResourceRefAddr(null, containerId, iface)); - return ref; + return new ResourceReference(containerId, iface); } public Reference createAdminObjectRef(String containerId, Class iface) throws DeploymentException { - Reference ref = new Reference(null, RefAddrContentObjectFactory.class.getName(), null); - ref.add(new GBeanGetResourceRefAddr(null, containerId, iface)); - return ref; + return new ResourceReference(containerId, iface); } public ObjectName locateResourceName(ObjectName query) throws DeploymentException { Modified: geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java?view=diff&rev=125889&p1=geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java&r1=125888&p2=geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java&r2=125889 ============================================================================== --- geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java (original) +++ geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java Thu Jan 20 20:39:28 2005 @@ -56,7 +56,7 @@ import org.apache.geronimo.transaction.TrackedConnectionAssociator; import org.apache.geronimo.transaction.context.TransactionContextManager; import org.apache.geronimo.security.deploy.Security; - +import org.apache.geronimo.kernel.Kernel; /** * Wrapper for a WebApplicationContext that sets up its J2EE environment. @@ -124,7 +124,8 @@ TransactionContextManager transactionContextManager, TrackedConnectionAssociator trackedConnectionAssociator, - JettyContainer jettyContainer) throws Exception, IllegalAccessException, InstantiationException, ClassNotFoundException { + JettyContainer jettyContainer, + Kernel kernel) throws Exception, IllegalAccessException, InstantiationException, ClassNotFoundException { assert uri != null; assert componentContext != null; @@ -171,6 +172,10 @@ setTagLibMap(tagLibMap); setSessionTimeoutSeconds(sessionTimeoutSeconds); + if (componentContext != null) { + componentContext.setKernel(kernel); + componentContext.setClassLoader(classLoader); + } int index = 0; BeforeAfter interceptor = new InstanceContextBeforeAfter(null, index++, unshareableResources, applicationManagedSecurityResources, trackedConnectionAssociator); @@ -363,7 +368,7 @@ public static final GBeanInfo GBEAN_INFO; - + static { GBeanInfoBuilder infoBuilder = new GBeanInfoBuilder("Jetty WebApplication Context", JettyWebAppContext.class); //from jetty's webapp context @@ -410,6 +415,8 @@ infoBuilder.addAttribute("excludedPermissions", PermissionCollection.class, true); infoBuilder.addAttribute("rolePermissions", Map.class, true); + infoBuilder.addAttribute("kernel", Kernel.class, false); + infoBuilder.setConstructor(new String[]{ "uri", "componentContext", @@ -445,7 +452,9 @@ "TransactionContextManager", "TrackedConnectionAssociator", - "JettyContainer" + "JettyContainer", + + "kernel" }); GBEAN_INFO = infoBuilder.getBeanInfo(); Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/Kernel.java Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/Kernel.java?view=diff&rev=125889&p1=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/Kernel.java&r1=125888&p2=geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/Kernel.java&r2=125889 ============================================================================== --- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/Kernel.java (original) +++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/kernel/Kernel.java Thu Jan 20 20:39:28 2005 @@ -211,6 +211,12 @@ return kernelName; } + public static Set getKernelNames() { + synchronized(kernels) { + return Collections.unmodifiableSet(kernels.keySet()); + } + } + /** * Get a particular kernel indexed by a name * Modified: geronimo/trunk/modules/naming-builder/src/java/org/apache/geronimo/naming/deployment/ENCConfigBuilder.java Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/naming-builder/src/java/org/apache/geronimo/naming/deployment/ENCConfigBuilder.java?view=diff&rev=125889&p1=geronimo/trunk/modules/naming-builder/src/java/org/apache/geronimo/naming/deployment/ENCConfigBuilder.java&r1=125888&p2=geronimo/trunk/modules/naming-builder/src/java/org/apache/geronimo/naming/deployment/ENCConfigBuilder.java&r2=125889 ============================================================================== --- geronimo/trunk/modules/naming-builder/src/java/org/apache/geronimo/naming/deployment/ENCConfigBuilder.java (original) +++ geronimo/trunk/modules/naming-builder/src/java/org/apache/geronimo/naming/deployment/ENCConfigBuilder.java Thu Jan 20 20:39:28 2005 @@ -64,7 +64,6 @@ * @version $Rev$ $Date$ */ public class ENCConfigBuilder { - public static ObjectName getGBeanId(String j2eeType, GerGbeanLocatorType gerGbeanLocator, J2eeContext j2eeContext, Set localGBeans, Kernel kernel) throws DeploymentException { ObjectName containerId = null; if (gerGbeanLocator.isSetGbeanLink()) { @@ -128,14 +127,15 @@ return containerId; } - public static void addEnvEntries(EnvEntryType[] envEntries, ComponentContextBuilder builder) throws DeploymentException { + + public static void addEnvEntries(EnvEntryType[] envEntries, ComponentContextBuilder builder, ClassLoader classLoader) throws DeploymentException { for (int i = 0; i < envEntries.length; i++) { EnvEntryType envEntry = envEntries[i]; String name = getStringValue(envEntry.getEnvEntryName()); String type = getStringValue(envEntry.getEnvEntryType()); String text = getStringValue(envEntry.getEnvEntryValue()); try { - builder.addEnvEntry(name, type, text); + builder.addEnvEntry(name, type, text, classLoader); } catch (NumberFormatException e) { throw new DeploymentException("Invalid env-entry value for name: " + name, e); } catch (NamingException e) { @@ -570,7 +570,7 @@ } } - addEnvEntries(envEntries, builder); + addEnvEntries(envEntries, builder, cl); // ejb-ref addEJBRefs(earContext, uri, ejbRefs, mapEjbRefs(gerEjbRefs), cl, builder); Modified: geronimo/trunk/modules/naming-builder/src/schema/geronimo-naming.xsd Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/naming-builder/src/schema/geronimo-naming.xsd?view=diff&rev=125889&p1=geronimo/trunk/modules/naming-builder/src/schema/geronimo-naming.xsd&r1=125888&p2=geronimo/trunk/modules/naming-builder/src/schema/geronimo-naming.xsd&r2=125889 ============================================================================== --- geronimo/trunk/modules/naming-builder/src/schema/geronimo-naming.xsd (original) +++ geronimo/trunk/modules/naming-builder/src/schema/geronimo-naming.xsd Thu Jan 20 20:39:28 2005 @@ -53,6 +53,7 @@ </xsd:documentation> </xsd:annotation> <xsd:sequence> + <xsd:element name="gbean-ref" type="gernaming:gbean-refType" minOccurs="0" maxOccurs="unbounded"/> <xsd:element name="ejb-ref" type="gernaming:ejb-refType" minOccurs="0" maxOccurs="unbounded"/> <xsd:element name="ejb-local-ref" type="gernaming:ejb-local-refType" minOccurs="0" maxOccurs="unbounded"/> <!-- leave web services out until I know what they do --> @@ -102,6 +103,18 @@ <xsd:element name="resource-link" type="xsd:string"/> <xsd:element name="target-name" type="xsd:string"/> <xsd:element name="url" type="xsd:string"/> + </xsd:choice> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="gbean-refType"> + <xsd:sequence> + <xsd:element name="ref-name" type="xsd:string"/> + <xsd:element name="ref-type" type="xsd:string"/> + <xsd:element name="proxy-type" type="xsd:string" minOccurs="0"/> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:group ref="gernaming:objectNameGroup"/> + <xsd:element name="target-name" type="xsd:string"/> </xsd:choice> </xsd:sequence> </xsd:complexType> Modified: geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/java/ComponentContextBuilder.java Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/java/ComponentContextBuilder.java?view=diff&rev=125889&p1=geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/java/ComponentContextBuilder.java&r1=125888&p2=geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/java/ComponentContextBuilder.java&r2=125889 ============================================================================== --- geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/java/ComponentContextBuilder.java (original) +++ geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/java/ComponentContextBuilder.java Thu Jan 20 20:39:28 2005 @@ -17,9 +17,15 @@ package org.apache.geronimo.naming.java; +import javax.management.MalformedObjectNameException; +import javax.management.ObjectName; import javax.naming.NamingException; import javax.transaction.UserTransaction; +import org.apache.geronimo.kernel.ClassLoading; +import org.apache.geronimo.naming.reference.GBeanProxyReference; +import org.apache.geronimo.naming.reference.KernelReference; + /** * TODO consider removing this class. The only purpose is to slightly hide the internalBind method. * @@ -50,7 +56,6 @@ context.internalBind("UserTransaction", userTransaction); } - public void bind(String name, Object value) throws NamingException { if (context.isFrozen()) { throw new IllegalStateException("Context has been frozen"); @@ -58,15 +63,18 @@ context.internalBind(ENV + name, value); } - - public void addEnvEntry(String name, String type, String text) throws NamingException, NumberFormatException { + public void addEnvEntry(String name, String type, String text, ClassLoader classLoader) throws NamingException, NumberFormatException { if (context.isFrozen()) { throw new IllegalStateException("Context has been frozen"); } Object value; if (text == null) { - value = null; + if ("org.apache.geronimo.kernel.Kernel".equals(type)) { + value = new KernelReference(); + } else { + value = null; + } } else if ("java.lang.String".equals(type)) { value = text; } else if ("java.lang.Character".equals(type)) { @@ -86,9 +94,25 @@ } else if ("java.lang.Double".equals(type)) { value = Double.valueOf(text); } else { - throw new IllegalArgumentException("Invalid class for env-entry " + name + ", " + type); + Class clazz = null; + try { + clazz = ClassLoading.loadClass(type, classLoader); + } catch (ClassNotFoundException e) { + throw new IllegalArgumentException("Could not load class for env-entry " + name + ", " + type); + } + ObjectName objectName = null; + try { + objectName = ObjectName.getInstance(text); + } catch (MalformedObjectNameException e) { + throw new IllegalArgumentException("If env-entry type is not String, Character, Byte, Short, Integer, Long, " + + "Boolean, Double, or Float, the text value must be a valid ObjectName for use in a GBeanProxy:" + + " name= " + name + + ", value=" + type + + ", text=" + text); + } + value = new GBeanProxyReference(objectName, clazz); + } context.internalBind(ENV + name, value); } - } Modified: geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/java/ReadOnlyContext.java Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/java/ReadOnlyContext.java?view=diff&rev=125889&p1=geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/java/ReadOnlyContext.java&r1=125888&p2=geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/java/ReadOnlyContext.java&r2=125889 ============================================================================== --- geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/java/ReadOnlyContext.java (original) +++ geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/java/ReadOnlyContext.java Thu Jan 20 20:39:28 2005 @@ -39,6 +39,11 @@ import javax.naming.Reference; import javax.naming.spi.NamingManager; +import org.apache.geronimo.naming.reference.SimpleReference; +import org.apache.geronimo.naming.reference.KernelAwareReference; +import org.apache.geronimo.naming.reference.ClassLoaderAwareReference; +import org.apache.geronimo.kernel.Kernel; + /** * A read-only Context in the java: namespace. * <p> @@ -59,7 +64,7 @@ * * @version $Rev$ $Date$ */ -public class ReadOnlyContext implements Context,Serializable { +public class ReadOnlyContext implements Context, Serializable { protected final Hashtable env; // environment for this context protected final Map bindings; // bindings at my level protected final Map treeBindings; // all bindings under me @@ -138,7 +143,7 @@ Map subBindings = readOnlyContext.internalBind(remainder, value); for (Iterator iterator = subBindings.entrySet().iterator(); iterator.hasNext();) { Map.Entry entry = (Map.Entry) iterator.next(); - String subName = segment + "/" + (String)entry.getKey(); + String subName = segment + "/" + entry.getKey(); Object bound = entry.getValue(); treeBindings.put(subName, bound); newBindings.put(subName, bound); @@ -151,6 +156,24 @@ return new ReadOnlyContext(); } + public void setKernel(Kernel kernel) { + for (Iterator iterator = treeBindings.values().iterator(); iterator.hasNext();) { + Object o = iterator.next(); + if (o instanceof KernelAwareReference) { + ((KernelAwareReference) o).setKernel(kernel); + } + } + } + + public void setClassLoader(ClassLoader classLoader) { + for (Iterator iterator = treeBindings.values().iterator(); iterator.hasNext();) { + Object o = iterator.next(); + if (o instanceof ClassLoaderAwareReference) { + ((ClassLoaderAwareReference) o).setClassLoader(classLoader); + } + } + } + public Object addToEnvironment(String propName, Object propVal) throws NamingException { return env.put(propName, propVal); } @@ -194,6 +217,13 @@ } return obj; } + } + } + if (result instanceof SimpleReference) { + try { + result = ((SimpleReference) result).getContent(); + } catch (Exception e) { + throw (NamingException)new NamingException("could not look up : " + name).initCause(e); } } if (result instanceof LinkRef) { Added: geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/ClassLoaderAwareReference.java Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/ClassLoaderAwareReference.java?view=auto&rev=125889 ============================================================================== --- (empty file) +++ geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/ClassLoaderAwareReference.java Thu Jan 20 20:39:28 2005 @@ -0,0 +1,24 @@ +/** + * + * Copyright 2004 The Apache Software Foundation + * + * Licensed 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.geronimo.naming.reference; + +/** + * @version $Rev$ $Date$ + */ +public interface ClassLoaderAwareReference { + void setClassLoader(ClassLoader classLoader); +} Deleted: /geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/GBeanGetResourceRefAddr.java Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/GBeanGetResourceRefAddr.java?view=auto&rev=125888 ============================================================================== Added: geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/GBeanProxyReference.java Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/GBeanProxyReference.java?view=auto&rev=125889 ============================================================================== --- (empty file) +++ geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/GBeanProxyReference.java Thu Jan 20 20:39:28 2005 @@ -0,0 +1,46 @@ +/** + * + * Copyright 2004 The Apache Software Foundation + * + * Licensed 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.geronimo.naming.reference; + +import javax.management.ObjectName; + +import org.apache.geronimo.kernel.Kernel; +import org.apache.geronimo.kernel.proxy.ProxyManager; + +/** + * @version $Rev$ $Date$ + */ +public class GBeanProxyReference extends SimpleAwareReference { + private final ObjectName target; + private final Class type; + + public GBeanProxyReference(ObjectName target, Class type) { + this.target = target; + this.type = type; + } + + public String getClassName() { + return type.getName(); + } + + public Object getContent() throws IllegalStateException { + Kernel kernel = getKernel(); + // todo HACK: this is a very bad idea + ProxyManager proxyManager = kernel.getProxyManager(); + return proxyManager.createProxy(target, type); + } +} Deleted: /geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/GBeanRefAddr.java Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/GBeanRefAddr.java?view=auto&rev=125888 ============================================================================== Added: geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/KernelAwareReference.java Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/KernelAwareReference.java?view=auto&rev=125889 ============================================================================== --- (empty file) +++ geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/KernelAwareReference.java Thu Jan 20 20:39:28 2005 @@ -0,0 +1,26 @@ +/** + * + * Copyright 2004 The Apache Software Foundation + * + * Licensed 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.geronimo.naming.reference; + +import org.apache.geronimo.kernel.Kernel; + +/** + * @version $Rev$ $Date$ + */ +public interface KernelAwareReference { + void setKernel(Kernel kernel); +} Added: geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/KernelReference.java Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/KernelReference.java?view=auto&rev=125889 ============================================================================== --- (empty file) +++ geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/KernelReference.java Thu Jan 20 20:39:28 2005 @@ -0,0 +1,35 @@ +/** + * + * Copyright 2004 The Apache Software Foundation + * + * Licensed 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.geronimo.naming.reference; + +import javax.management.ObjectName; + +import org.apache.geronimo.kernel.Kernel; +import org.apache.geronimo.kernel.proxy.ProxyManager; + +/** + * @version $Rev$ $Date$ + */ +public class KernelReference extends SimpleAwareReference { + public String getClassName() { + return Kernel.class.getName(); + } + + public Object getContent() throws IllegalStateException { + return getKernel(); + } +} Deleted: /geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/RefAddrContentObjectFactory.java Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/RefAddrContentObjectFactory.java?view=auto&rev=125888 ============================================================================== Added: geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/ResourceReference.java Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/ResourceReference.java?view=auto&rev=125889 ============================================================================== --- (empty file) +++ geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/ResourceReference.java Thu Jan 20 20:39:28 2005 @@ -0,0 +1,66 @@ +/** + * + * Copyright 2004 The Apache Software Foundation + * + * Licensed 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.geronimo.naming.reference; + +import javax.management.MalformedObjectNameException; +import javax.management.ObjectName; + +import org.apache.geronimo.kernel.Kernel; + +/** + * @version $Rev: 56169 $ $Date: 2004-10-31 16:05:29 -0800 (Sun, 31 Oct 2004) $ + */ +public class ResourceReference extends SimpleAwareReference { + private final String containerId; + private final Class iface; + + public ResourceReference(String containerId, Class iface) { + this.containerId = containerId; + this.iface = iface; + } + + public String getClassName() { + return iface.getName(); + } + + public Object getContent() { + Kernel kernel = getKernel(); + + ObjectName target = null; + try { + target = ObjectName.getInstance(containerId); + } catch (MalformedObjectNameException e) { + throw (IllegalArgumentException) new IllegalArgumentException("Invalid object name in jmxRefAddr: " + containerId).initCause(e); + } + + Object proxy = null; + try { + proxy = kernel.invoke(target, "$getResource"); + } catch (Exception e) { + throw (IllegalStateException) new IllegalStateException("Could not get proxy").initCause(e); + } + if (proxy == null) { + throw new IllegalStateException("Proxy not returned. Target " + containerId + " not started"); + } + if (!iface.isAssignableFrom(proxy.getClass())) { + throw new ClassCastException("Proxy does not implement expected interface " + iface); + } + return proxy; + + } +} Added: geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/SimpleAwareReference.java Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/SimpleAwareReference.java?view=auto&rev=125889 ============================================================================== --- (empty file) +++ geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/SimpleAwareReference.java Thu Jan 20 20:39:28 2005 @@ -0,0 +1,51 @@ +/** + * + * Copyright 2004 The Apache Software Foundation + * + * Licensed 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.geronimo.naming.reference; + +import javax.naming.RefAddr; + +import org.apache.geronimo.kernel.Kernel; + +/** + * @version $Rev$ $Date$ + */ +public abstract class SimpleAwareReference extends SimpleReference implements KernelAwareReference, ClassLoaderAwareReference { + private transient Kernel kernel; + private transient ClassLoader classLoader; + + public final Kernel getKernel() throws IllegalStateException { + if (kernel == null) { + throw new IllegalStateException("Kernel has not been set"); + } + return kernel; + } + + public final void setKernel(Kernel kernel) { + this.kernel = kernel; + } + + public ClassLoader getClassLoader() { + if (classLoader == null) { + throw new IllegalStateException("ClassLoader has not been set"); + } + return classLoader; + } + + public void setClassLoader(ClassLoader classLoader) { + this.classLoader = classLoader; + } +} Added: geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/SimpleReference.java Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/SimpleReference.java?view=auto&rev=125889 ============================================================================== --- (empty file) +++ geronimo/trunk/modules/naming/src/java/org/apache/geronimo/naming/reference/SimpleReference.java Thu Jan 20 20:39:28 2005 @@ -0,0 +1,140 @@ +/** + * + * Copyright 2004 The Apache Software Foundation + * + * Licensed 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.geronimo.naming.reference; + +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.NoSuchElementException; +import javax.naming.Context; +import javax.naming.Name; +import javax.naming.RefAddr; +import javax.naming.Reference; +import javax.naming.spi.ObjectFactory; + +/** + * @version $Rev$ $Date$ + */ +public abstract class SimpleReference extends Reference { + private static final Enumeration EMPTY_ENUMERATION = new Enumeration() { + public boolean hasMoreElements() { + return false; + } + + public Object nextElement() { + return new NoSuchElementException(); + } + }; + + public SimpleReference() { + super(null); + } + + /** + * Gets the actual referenced Object. + * @return the referenced object + */ + public abstract Object getContent(); + + /** + * We will atleast return an Object. Subclasses may want to provide a more specific class. + * @return "java.lang.Object" + */ + public String getClassName() { + return "java.lang.Object"; + } + + /** + * If the JNDI context does not understand simple references, this method will be called + * to obtain the class name of a factory. This factory in turn understands the simple + * reference. This style is much slower because JNDI will use reflection to load and + * create this class. + * @return + */ + public final String getFactoryClassName() { + return SimpleObjectFactory.class.getName(); + } + + // + // Disabled methods that we no longer need + // + public final String getFactoryClassLocation() { + return null; + } + + public final RefAddr get(String addrType) { + return null; + } + + public final RefAddr get(int posn) { + throw new ArrayIndexOutOfBoundsException(posn); + } + + public final Enumeration getAll() { + return EMPTY_ENUMERATION; + } + + public final int size() { + return 0; + } + + public final void add(RefAddr addr) { + throw new UnsupportedOperationException("SimpleReference has no addresses so none can be added"); + } + + public final void add(int posn, RefAddr addr) { + throw new UnsupportedOperationException("SimpleReference has no addresses so none can be added"); + } + + public final Object remove(int posn) { + throw new ArrayIndexOutOfBoundsException(posn); + } + + public final void clear() { + } + + // + // Reset the java.lang.Object methods back to default implementations + // + public boolean equals(Object obj) { + return this == obj; + } + + public int hashCode() { + return System.identityHashCode(this); + } + + public String toString() { + return getClass().getName() + "@" + Integer.toHexString(hashCode()); + } + + public Object clone() { + throw new UnsupportedOperationException("SimpleReference can not be cloned"); + } + + /** + * Simply calls getContent() on the SimpleReference + */ + public static final class SimpleObjectFactory implements ObjectFactory { + public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable environment) throws Exception { + if (obj instanceof SimpleReference) { + SimpleReference reference = (SimpleReference) obj; + return reference.getContent(); + } + return null; + } + } +} Modified: geronimo/trunk/modules/naming/src/test/org/apache/geronimo/naming/java/ContextBuilderTest.java Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/naming/src/test/org/apache/geronimo/naming/java/ContextBuilderTest.java?view=diff&rev=125889&p1=geronimo/trunk/modules/naming/src/test/org/apache/geronimo/naming/java/ContextBuilderTest.java&r1=125888&p2=geronimo/trunk/modules/naming/src/test/org/apache/geronimo/naming/java/ContextBuilderTest.java&r2=125889 ============================================================================== --- geronimo/trunk/modules/naming/src/test/org/apache/geronimo/naming/java/ContextBuilderTest.java (original) +++ geronimo/trunk/modules/naming/src/test/org/apache/geronimo/naming/java/ContextBuilderTest.java Thu Jan 20 20:39:28 2005 @@ -45,7 +45,7 @@ ReadOnlyContext context = builder.getContext(); assertTrue(context.isFrozen()); try { - builder.addEnvEntry(null, null, null); + builder.addEnvEntry(null, null, null, null); fail(); } catch (IllegalStateException e) { // ok @@ -72,15 +72,15 @@ Float floatVal = new Float(123.456); Double doubleVal = new Double(12345.6789); Boolean booleanVal = Boolean.TRUE; - builder.addEnvEntry("string", String.class.getName(), stringVal); - builder.addEnvEntry("char", Character.class.getName(), charVal.toString()); - builder.addEnvEntry("byte", Byte.class.getName(), byteVal.toString()); - builder.addEnvEntry("short", Short.class.getName(), shortVal.toString()); - builder.addEnvEntry("int", Integer.class.getName(), intVal.toString()); - builder.addEnvEntry("long", Long.class.getName(), longVal.toString()); - builder.addEnvEntry("float", Float.class.getName(), floatVal.toString()); - builder.addEnvEntry("double", Double.class.getName(), doubleVal.toString()); - builder.addEnvEntry("boolean", Boolean.class.getName(), booleanVal.toString()); + builder.addEnvEntry("string", String.class.getName(), stringVal, null); + builder.addEnvEntry("char", Character.class.getName(), charVal.toString(), null); + builder.addEnvEntry("byte", Byte.class.getName(), byteVal.toString(), null); + builder.addEnvEntry("short", Short.class.getName(), shortVal.toString(), null); + builder.addEnvEntry("int", Integer.class.getName(), intVal.toString(), null); + builder.addEnvEntry("long", Long.class.getName(), longVal.toString(), null); + builder.addEnvEntry("float", Float.class.getName(), floatVal.toString(), null); + builder.addEnvEntry("double", Double.class.getName(), doubleVal.toString(), null); + builder.addEnvEntry("boolean", Boolean.class.getName(), booleanVal.toString(), null); ReadOnlyContext context = builder.getContext(); Set actual = new HashSet();