You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by gd...@apache.org on 2006/03/02 12:13:15 UTC

svn commit: r382352 - in /geronimo/trunk/modules: client-builder/src/java/org/apache/geronimo/client/builder/ client-builder/src/schema/ j2ee-schema/src/java/org/apache/geronimo/schema/ jetty-builder/src/java/org/apache/geronimo/jetty/deployment/ namin...

Author: gdamour
Date: Thu Mar  2 03:13:09 2006
New Revision: 382352

URL: http://svn.apache.org/viewcvs?rev=382352&view=rev
Log:
GERONIMO-1434 Allow GBeans to be bound into a component's java:comp/env namespace

This commit allows to bind a GBean reference into the ENC of a J2EE component. 

Based on the XSD, it seems that we also need to support the case where a
collection of GBeans is put in the ENC.

Modified:
    geronimo/trunk/modules/client-builder/src/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java
    geronimo/trunk/modules/client-builder/src/schema/geronimo-application-client-1.0.xsd
    geronimo/trunk/modules/j2ee-schema/src/java/org/apache/geronimo/schema/SchemaConversionUtils.java
    geronimo/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java
    geronimo/trunk/modules/naming-builder/src/java/org/apache/geronimo/naming/deployment/ENCConfigBuilder.java
    geronimo/trunk/modules/naming-builder/src/schema/geronimo-naming-1.0.xsd
    geronimo/trunk/modules/tomcat-builder/src/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java

Modified: geronimo/trunk/modules/client-builder/src/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/client-builder/src/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java?rev=382352&r1=382351&r2=382352&view=diff
==============================================================================
--- geronimo/trunk/modules/client-builder/src/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java (original)
+++ geronimo/trunk/modules/client-builder/src/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java Thu Mar  2 03:13:09 2006
@@ -615,6 +615,7 @@
                 appClient.getResourceEnvRefArray(), geronimoAppClient.getResourceEnvRefArray(),
                 appClient.getMessageDestinationRefArray(),
                 appClient.getServiceRefArray(), geronimoAppClient.getServiceRefArray(),
+                geronimoAppClient.getGbeanRefArray(),
                 cl);
 
     }

Modified: geronimo/trunk/modules/client-builder/src/schema/geronimo-application-client-1.0.xsd
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/client-builder/src/schema/geronimo-application-client-1.0.xsd?rev=382352&r1=382351&r2=382352&view=diff
==============================================================================
--- geronimo/trunk/modules/client-builder/src/schema/geronimo-application-client-1.0.xsd (original)
+++ geronimo/trunk/modules/client-builder/src/schema/geronimo-application-client-1.0.xsd Thu Mar  2 03:13:09 2006
@@ -45,6 +45,7 @@
             <xs:group ref="sys:classloader-include-infoGroup"/>
 
 
+            <xs:element ref="naming:gbean-ref" minOccurs="0" maxOccurs="unbounded"/>
             <xs:element ref="naming:ejb-ref" minOccurs="0" maxOccurs="unbounded"/>
             <xs:element ref="naming:service-ref" minOccurs="0" maxOccurs="unbounded"/>
             <xs:element ref="naming:resource-ref" minOccurs="0" maxOccurs="unbounded"/>

Modified: geronimo/trunk/modules/j2ee-schema/src/java/org/apache/geronimo/schema/SchemaConversionUtils.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/j2ee-schema/src/java/org/apache/geronimo/schema/SchemaConversionUtils.java?rev=382352&r1=382351&r2=382352&view=diff
==============================================================================
--- geronimo/trunk/modules/j2ee-schema/src/java/org/apache/geronimo/schema/SchemaConversionUtils.java (original)
+++ geronimo/trunk/modules/j2ee-schema/src/java/org/apache/geronimo/schema/SchemaConversionUtils.java Thu Mar  2 03:13:09 2006
@@ -53,6 +53,7 @@
 
     static {
 
+        GERONIMO_SCHEMA_CONVERSIONS.put("gbean-ref", new NamespaceElementConverter(GERONIMO_NAMING_NAMESPACE));
         GERONIMO_SCHEMA_CONVERSIONS.put("ejb-ref", new NamespaceElementConverter(GERONIMO_NAMING_NAMESPACE));
         GERONIMO_SCHEMA_CONVERSIONS.put("ejb-local-ref", new NamespaceElementConverter(GERONIMO_NAMING_NAMESPACE));
         GERONIMO_SCHEMA_CONVERSIONS.put("service-ref", new NamespaceElementConverter(GERONIMO_NAMING_NAMESPACE));

Modified: geronimo/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java?rev=382352&r1=382351&r2=382352&view=diff
==============================================================================
--- geronimo/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java (original)
+++ geronimo/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java Thu Mar  2 03:13:09 2006
@@ -1308,6 +1308,7 @@
                 webApp.getResourceEnvRefArray(), jettyWebApp.getResourceEnvRefArray(),
                 webApp.getMessageDestinationRefArray(),
                 webApp.getServiceRefArray(), jettyWebApp.getServiceRefArray(),
+                jettyWebApp.getGbeanRefArray(),
                 cl);
     }
 

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?rev=382352&r1=382351&r2=382352&view=diff
==============================================================================
--- 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 Mar  2 03:13:09 2006
@@ -17,9 +17,29 @@
 
 package org.apache.geronimo.naming.deployment;
 
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+import javax.naming.NamingException;
+import javax.naming.Reference;
+import javax.transaction.UserTransaction;
+import javax.xml.namespace.QName;
+
 import org.apache.geronimo.common.DeploymentException;
 import org.apache.geronimo.common.UnresolvedReferenceException;
 import org.apache.geronimo.deployment.DeploymentContext;
+import org.apache.geronimo.gbean.GBeanData;
 import org.apache.geronimo.j2ee.deployment.EARContext;
 import org.apache.geronimo.j2ee.deployment.Module;
 import org.apache.geronimo.j2ee.deployment.NamingContext;
@@ -30,10 +50,12 @@
 import org.apache.geronimo.kernel.ClassLoading;
 import org.apache.geronimo.kernel.Kernel;
 import org.apache.geronimo.naming.java.ComponentContextBuilder;
+import org.apache.geronimo.naming.reference.GBeanProxyReference;
 import org.apache.geronimo.xbeans.geronimo.naming.GerCssType;
 import org.apache.geronimo.xbeans.geronimo.naming.GerEjbLocalRefType;
 import org.apache.geronimo.xbeans.geronimo.naming.GerEjbRefType;
 import org.apache.geronimo.xbeans.geronimo.naming.GerGbeanLocatorType;
+import org.apache.geronimo.xbeans.geronimo.naming.GerGbeanRefType;
 import org.apache.geronimo.xbeans.geronimo.naming.GerMessageDestinationType;
 import org.apache.geronimo.xbeans.geronimo.naming.GerResourceEnvRefType;
 import org.apache.geronimo.xbeans.geronimo.naming.GerResourceRefType;
@@ -52,24 +74,6 @@
 import org.apache.geronimo.xbeans.j2ee.XsdQNameType;
 import org.apache.geronimo.xbeans.j2ee.XsdStringType;
 
-import javax.management.MalformedObjectNameException;
-import javax.management.ObjectName;
-import javax.naming.NamingException;
-import javax.naming.Reference;
-import javax.transaction.UserTransaction;
-import javax.xml.namespace.QName;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
 /**
  * @version $Rev$ $Date$
  */
@@ -745,6 +749,7 @@
                                             MessageDestinationRefType[] messageDestinationRefs,
                                             ServiceRefType[] serviceRefs,
                                             GerServiceRefType[] gerServiceRefs,
+                                            GerGbeanRefType[] gerGbeanRefs,
                                             ClassLoader cl) throws DeploymentException {
         ComponentContextBuilder builder = new ComponentContextBuilder();
         RefContext refContext = earContext.getRefContext();
@@ -790,7 +795,67 @@
         Map serviceRefMap = mapServiceRefs(gerServiceRefs);
         addServiceRefs(earContext, module, serviceRefs, serviceRefMap, cl, builder);
 
+        addGBeanRefs(earContext, builder, refContext, gerGbeanRefs, cl);
+        
         return builder.getContext();
+    }
+
+    private static void addGBeanRefs(EARContext earContext, ComponentContextBuilder builder, RefContext refContext, GerGbeanRefType[] gerGbeanRefs, ClassLoader cl) throws DeploymentException {
+        if (null == gerGbeanRefs) {
+            return;
+        }
+        
+        J2eeContext j2eeContext = earContext.getJ2eeContext();
+        
+        for (int i = 0; i < gerGbeanRefs.length; i++) {
+            GerGbeanRefType gerGbeanRef = gerGbeanRefs[i];
+            addGBeanRef(earContext, builder, refContext, j2eeContext, gerGbeanRef, cl);
+        }
+    }
+
+    private static void addGBeanRef(EARContext earContext, ComponentContextBuilder builder, RefContext refContext, J2eeContext j2eeContext, GerGbeanRefType gerGbeanRef, ClassLoader cl) throws DeploymentException{
+        // TODO support reference to collection of GBean?
+        GerGbeanLocatorType[] gbeanLocatorArray = gerGbeanRef.getGbeanLocatorArray();
+        if (1 < gbeanLocatorArray.length) {
+            throw new UnsupportedOperationException("Cannot create an ENC binding for " +
+                    "a collection of GBean.");
+        }
+        
+        // Locate the referenced GBean
+        GerGbeanLocatorType locator = gbeanLocatorArray[0];
+        ObjectName query;
+        try {
+            query = NameFactory.getComponentName(locator.getDomain(),
+                    locator.getServer(),
+                    locator.getApplication(),
+                    locator.getType(),
+                    locator.getModule(),
+                    locator.getName(),
+                    gerGbeanRef.getRefType(),
+                    j2eeContext);
+        } catch (MalformedObjectNameException e) {
+            throw new DeploymentException("Cannot build GBean query name", e);
+        }
+        ObjectName gBeanName = refContext.locateUniqueName(earContext, query);
+        
+        // Get the GBean proxy type
+        String gBeanTypeName;
+        if (gerGbeanRef.isSetProxyType()) {
+            gBeanTypeName = gerGbeanRef.getProxyType();
+        } else {
+            GBeanData data = refContext.locateComponentData(gBeanName, earContext);
+            gBeanTypeName = data.getGBeanInfo().getClassName();
+        }
+        Class gBeanType;
+        try {
+            gBeanType = ClassLoading.loadClass(gBeanTypeName, cl);
+        } catch (ClassNotFoundException e) {
+            throw new DeploymentException("Cannot load GBean class", e);
+        }
+
+        String refName = gerGbeanRef.getRefName();
+
+        builder.bind(refName, new GBeanProxyReference(gBeanName, gBeanType));
     }
 
     private static Map mapEjbRefs(GerEjbRefType[] refs) {

Modified: geronimo/trunk/modules/naming-builder/src/schema/geronimo-naming-1.0.xsd
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/naming-builder/src/schema/geronimo-naming-1.0.xsd?rev=382352&r1=382351&r2=382352&view=diff
==============================================================================
--- geronimo/trunk/modules/naming-builder/src/schema/geronimo-naming-1.0.xsd (original)
+++ geronimo/trunk/modules/naming-builder/src/schema/geronimo-naming-1.0.xsd Thu Mar  2 03:13:09 2006
@@ -33,6 +33,7 @@
     </xsd:annotation>
 
 
+    <xsd:element name="gbean-ref" type="gernaming:gbean-refType"/>
     <xsd:element name="ejb-ref" type="gernaming:ejb-refType"/>
     <!--    <xsd:element name="ejb-local-ref" type="gernaming:ejb-local-refType"/>-->
     <xsd:element name="service-ref" type="gernaming:service-refType"/>
@@ -111,8 +112,7 @@
             <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:element name="gbean-locator" type="gernaming:gbean-locatorType"/>
             </xsd:choice>
         </xsd:sequence>
     </xsd:complexType>

Modified: geronimo/trunk/modules/tomcat-builder/src/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/tomcat-builder/src/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java?rev=382352&r1=382351&r2=382352&view=diff
==============================================================================
--- geronimo/trunk/modules/tomcat-builder/src/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java (original)
+++ geronimo/trunk/modules/tomcat-builder/src/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java Thu Mar  2 03:13:09 2006
@@ -879,6 +879,7 @@
                 webApp.getResourceEnvRefArray(), tomcatWebApp.getResourceEnvRefArray(),
                 webApp.getMessageDestinationRefArray(),
                 webApp.getServiceRefArray(), tomcatWebApp.getServiceRefArray(),
+                tomcatWebApp.getGbeanRefArray(),
                 cl);
     }