[jboss-cvs] JBossAS SVN: r88220 - in trunk: component-matrix and 5 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue May 5 10:52:00 EDT 2009


Author: richard.opalka at jboss.com
Date: 2009-05-05 10:52:00 -0400 (Tue, 05 May 2009)
New Revision: 88220

Added:
   trunk/webservices/src/main/org/jboss/wsf/container/jboss60/deployment/metadata/EJBBeanReferenceResolver.java
Modified:
   trunk/build/build-distr.xml
   trunk/component-matrix/pom.xml
   trunk/varia/.classpath
   trunk/webservices/build.xml
   trunk/webservices/pom.xml
   trunk/webservices/src/main/org/jboss/wsf/container/jboss60/deployment/metadata/InjectionMetaDataDeploymentAspect.java
   trunk/webservices/src/main/org/jboss/wsf/container/jboss60/invocation/InvocationHandlerJSE.java
   trunk/webservices/src/resources/jbossws-jboss60.deployer/META-INF/jbossws-deployer-jboss-beans.xml
Log:
[JBWS-2634] implementing @EJB injection in JBossWS components

Modified: trunk/build/build-distr.xml
===================================================================
--- trunk/build/build-distr.xml	2009-05-05 14:47:00 UTC (rev 88219)
+++ trunk/build/build-distr.xml	2009-05-05 14:52:00 UTC (rev 88220)
@@ -1593,7 +1593,7 @@
       <fileset dir="${ibm.wsdl4j.lib}">
         <include name="wsdl4j.jar"/>
       </fileset>
-      <fileset dir="${xml.security.lib}">
+      <fileset dir="${org.apache.lib}">
         <include name="xmlsec.jar"/>
       </fileset>
     </copy>
@@ -1887,7 +1887,7 @@
       <fileset dir="${apache.logging.lib}">
         <include name="commons-logging.jar"/>
       </fileset>
-      <fileset dir="${xml.security.lib}">
+      <fileset dir="${org.apache.lib}">
         <include name="xmlsec.jar"/>
       </fileset>
       <fileset dir="${ibm.wsdl4j.lib}">

Modified: trunk/component-matrix/pom.xml
===================================================================
--- trunk/component-matrix/pom.xml	2009-05-05 14:47:00 UTC (rev 88219)
+++ trunk/component-matrix/pom.xml	2009-05-05 14:52:00 UTC (rev 88220)
@@ -33,10 +33,10 @@
     <version.javax.faces>1.2_12</version.javax.faces>
     <version.jboss.jaxr>1.2.1.GA</version.jboss.jaxr>
     <version.jboss.jbossts>4.4.0.GA</version.jboss.jbossts>
-    <version.jboss.jbossws-common>1.0.11.CR2</version.jboss.jbossws-common>
-    <version.jboss.jbossws-framework>3.1.2.CR2</version.jboss.jbossws-framework>
-    <version.jboss.jbossws-spi>1.1.2.CR2</version.jboss.jbossws-spi>
-    <version.jboss.jbossws>3.1.2.CR1</version.jboss.jbossws>
+    <version.jboss.jbossws-common>1.0.11.CR3</version.jboss.jbossws-common>
+    <version.jboss.jbossws-framework>3.1.2.CR3</version.jboss.jbossws-framework>
+    <version.jboss.jbossws-spi>1.1.2.CR3</version.jboss.jbossws-spi>
+    <version.jboss.jbossws>3.1.2.CR2</version.jboss.jbossws>
     <version.jboss.jms-integration-tests>1.0.1.GA</version.jboss.jms-integration-tests>
     <version.jboss.messaging>1.4.1.GA</version.jboss.messaging>
     <version.jboss.web>2.1.2.GA</version.jboss.web>

Modified: trunk/varia/.classpath
===================================================================
--- trunk/varia/.classpath	2009-05-05 14:47:00 UTC (rev 88219)
+++ trunk/varia/.classpath	2009-05-05 14:52:00 UTC (rev 88220)
@@ -16,7 +16,7 @@
 	<classpathentry kind="lib" path="/thirdparty/apache-scout/lib/scout.jar"/>
 	<classpathentry kind="lib" path="/thirdparty/apache-xalan/lib/xalan.jar"/>
 	<classpathentry kind="lib" path="/thirdparty/opensaml/lib/opensaml.jar"/>
-	<classpathentry kind="lib" path="/thirdparty/xml-security/lib/xmlsec.jar"/>
+	<classpathentry kind="lib" path="/thirdparty/org/apache/lib/xmlsec.jar"/>
 	<classpathentry kind="lib" path="/thirdparty/juddi/lib/juddi.jar"/>
 	<classpathentry kind="lib" path="/thirdparty/beanshell/lib/bsh.jar"/>
 	<classpathentry kind="lib" path="/thirdparty/jboss/jboss-deployers/lib/jboss-deployers-client.jar" sourcepath="/thirdparty/jboss/jboss-deployers/lib/jboss-deployers-client-sources.jar"/>

Modified: trunk/webservices/build.xml
===================================================================
--- trunk/webservices/build.xml	2009-05-05 14:47:00 UTC (rev 88219)
+++ trunk/webservices/build.xml	2009-05-05 14:52:00 UTC (rev 88220)
@@ -71,7 +71,8 @@
       <path refid="jboss.common.core.classpath"/>
       <path refid="jboss.common.logging.spi.classpath"/>
       <path refid="jboss.jboss.cl.classpath"/>
-      <path refid="jboss.jboss.ejb3.core.classpath" />   
+      <path refid="jboss.jboss.ejb3.core.classpath" />
+      <path refid="jboss.jboss.ejb3.common.classpath" />
       <path refid="jboss.jboss.ejb3.ext.api.classpath" />   
       <path refid="jboss.jboss.ejb3.interceptors.classpath" />   
       <path refid="jboss.jboss.javaee.classpath"/>

Modified: trunk/webservices/pom.xml
===================================================================
--- trunk/webservices/pom.xml	2009-05-05 14:47:00 UTC (rev 88219)
+++ trunk/webservices/pom.xml	2009-05-05 14:52:00 UTC (rev 88220)
@@ -130,6 +130,11 @@
       <groupId>org.jboss.ejb3</groupId>
       <artifactId>jboss-ejb3-as-int</artifactId>
     </dependency>    
+    <dependency>
+      <groupId>org.jboss.ejb3</groupId>
+      <artifactId>jboss-ejb3-common</artifactId>
+      <version>${version.org.jboss.ejb3.common.client}</version>
+    </dependency>
     <!-- transitive dependencies -->
     <dependency>
       <groupId>org.jboss.deployers</groupId>

Added: trunk/webservices/src/main/org/jboss/wsf/container/jboss60/deployment/metadata/EJBBeanReferenceResolver.java
===================================================================
--- trunk/webservices/src/main/org/jboss/wsf/container/jboss60/deployment/metadata/EJBBeanReferenceResolver.java	                        (rev 0)
+++ trunk/webservices/src/main/org/jboss/wsf/container/jboss60/deployment/metadata/EJBBeanReferenceResolver.java	2009-05-05 14:52:00 UTC (rev 88220)
@@ -0,0 +1,114 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.wsf.container.jboss60.deployment.metadata;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+import javax.ejb.EJB;
+
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.ejb3.common.resolvers.spi.EjbReference;
+import org.jboss.ejb3.common.resolvers.spi.EjbReferenceResolver;
+import org.jboss.wsf.common.injection.resolvers.AbstractReferenceResolver;
+
+/**
+ * EJB reference resolver.
+ *
+ * @author <a href="mailto:richard.opalka at jboss.org">Richard Opalka</a>
+ */
+final class EJBBeanReferenceResolver extends AbstractReferenceResolver<EJB>
+{
+
+   /**
+    * Deployment unit used for resolving process.
+    */
+   private final DeploymentUnit unit;
+   /**
+    * Delegate used to resolve JNDI names.
+    */
+   private final EjbReferenceResolver delegate;
+
+   /**
+    * Constructor.
+    */
+   EJBBeanReferenceResolver(final DeploymentUnit unit, final EjbReferenceResolver delegate)
+   {
+      super(EJB.class);
+
+      if (unit == null)
+      {
+         throw new IllegalArgumentException("Deployment unit cannot be null");
+      }
+      if (delegate == null)
+      {
+         throw new IllegalArgumentException("Ejb reference resolver cannot be null");
+      }
+
+      this.unit = unit;
+      this.delegate = delegate;
+   }
+
+   /* (non-Javadoc)
+    * @see org.jboss.wsf.common.injection.resolvers.AbstractReferenceResolver#resolveField(java.lang.reflect.Field)
+    */
+   @Override
+   protected String resolveField(final Field field)
+   {
+      final EJB ejbAnnotation = field.getAnnotation(EJB.class);
+      final Class<?> type = field.getType();
+      final EjbReference reference = getEjbReference(ejbAnnotation, type);
+
+      return this.delegate.resolveEjb(unit, reference);
+   }
+
+   /* (non-Javadoc)
+    * @see org.jboss.wsf.common.injection.resolvers.AbstractReferenceResolver#resolveMethod(java.lang.reflect.Method)
+    */
+   @Override
+   protected String resolveMethod(final Method method)
+   {
+      final EJB ejbAnnotation = method.getAnnotation(EJB.class);
+      final Class<?> type =  method.getParameterTypes()[0];
+      final EjbReference reference = getEjbReference(ejbAnnotation, type);
+
+      return this.delegate.resolveEjb(unit, reference);
+   }
+
+   /**
+    * Constructs EjbReference.
+    *
+    * @param ejbAnnotation ejb annotation
+    * @param type fall back type
+    * @return ejb reference instance
+    */
+   private EjbReference getEjbReference(EJB ejbAnnotation, Class<?> type)
+   {
+      String beanInterface = ejbAnnotation.beanInterface().getName();
+      if (java.lang.Object.class.getName().equals(beanInterface))
+      {
+         beanInterface = type.getName();
+      }
+      return new EjbReference(ejbAnnotation.beanName(), beanInterface, ejbAnnotation.mappedName());
+   }
+
+}

Modified: trunk/webservices/src/main/org/jboss/wsf/container/jboss60/deployment/metadata/InjectionMetaDataDeploymentAspect.java
===================================================================
--- trunk/webservices/src/main/org/jboss/wsf/container/jboss60/deployment/metadata/InjectionMetaDataDeploymentAspect.java	2009-05-05 14:47:00 UTC (rev 88219)
+++ trunk/webservices/src/main/org/jboss/wsf/container/jboss60/deployment/metadata/InjectionMetaDataDeploymentAspect.java	2009-05-05 14:52:00 UTC (rev 88220)
@@ -21,24 +21,31 @@
  */
 package org.jboss.wsf.container.jboss60.deployment.metadata;
 
+import java.lang.annotation.Annotation;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
+import javax.annotation.Resource;
+import javax.ejb.EJB;
 import javax.jws.WebService;
 import javax.naming.Context;
 import javax.naming.NamingException;
 import javax.xml.ws.WebServiceProvider;
 
 import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.ejb3.common.resolvers.spi.EjbReferenceResolver;
 import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeansMetaData;
 import org.jboss.metadata.ejb.jboss.JBossMetaData;
 import org.jboss.metadata.javaee.spec.EnvironmentEntriesMetaData;
 import org.jboss.metadata.javaee.spec.EnvironmentEntryMetaData;
 import org.jboss.metadata.javaee.spec.ResourceInjectionTargetMetaData;
 import org.jboss.metadata.web.jboss.JBossWebMetaData;
+import org.jboss.wsf.common.injection.resolvers.ResourceReferenceResolver;
 import org.jboss.wsf.spi.deployment.Deployment;
 import org.jboss.wsf.spi.deployment.DeploymentAspect;
 import org.jboss.wsf.spi.deployment.Endpoint;
@@ -47,46 +54,50 @@
 import org.jboss.wsf.spi.deployment.integration.WebServiceDeployment;
 import org.jboss.wsf.spi.metadata.injection.InjectionMetaData;
 import org.jboss.wsf.spi.metadata.injection.InjectionsMetaData;
+import org.jboss.wsf.spi.metadata.injection.ReferenceResolver;
 
 /**
  * Deployment aspect that builds injection meta data.
  *
- * @author ropalka at redhat.com
+ * @author <a href="mailto:richard.opalka at jboss.org">Richard Opalka</a>
  */
 public final class InjectionMetaDataDeploymentAspect extends DeploymentAspect
 {
 
+   private static final ReferenceResolver RESOURCE_REFERENCE_RESOLVER = new ResourceReferenceResolver(); 
    private static final String EJB3_JNDI_PREFIX = "java:env/";
+   private EjbReferenceResolver ejbReferenceResolver;
 
    @Override
    public void create(Deployment dep)
    {
       super.create(dep);
 
+      DeploymentUnit unit = dep.getAttachment(DeploymentUnit.class);
+      if (unit == null)
+         throw new IllegalStateException("DeploymentUnit not found");
+
+      JBossWebMetaData webMD = dep.getAttachment(JBossWebMetaData.class);
+      if (webMD == null)
+         throw new IllegalStateException("JBossWebMetaData not found");
+
       List<InjectionMetaData> injectionMD = new LinkedList<InjectionMetaData>();
+      Map<Class<? extends Annotation>, ReferenceResolver> resolvers = createResolvers(unit);
       DeploymentType deploymentType = dep.getType();
 
       try
       {
          if (deploymentType == DeploymentType.JAXWS_JSE)
          {
-            JBossWebMetaData webMD = dep.getAttachment(JBossWebMetaData.class);
-            if (webMD == null)
-               throw new IllegalStateException("JBossWebMetaData not found");
-
             injectionMD.addAll(buildInjectionMetaData(webMD.getEnvironmentEntries()));
             for (Endpoint endpoint : dep.getService().getEndpoints())
             {
-               InjectionsMetaData injectionsMD = new InjectionsMetaData(injectionMD, null);
+               InjectionsMetaData injectionsMD = new InjectionsMetaData(injectionMD, resolvers, null);
                endpoint.addAttachment(InjectionsMetaData.class, injectionsMD);
             }
          }
          else if (deploymentType == DeploymentType.JAXWS_EJB3)
          {
-            DeploymentUnit unit = dep.getAttachment(DeploymentUnit.class);
-            if (unit == null)
-               throw new IllegalStateException("DeploymentUnit not found");
-
             JBossMetaData jbossMD = unit.getAttachment(JBossMetaData.class);
             JBossEnterpriseBeansMetaData jebMDs = jbossMD.getEnterpriseBeans();
 
@@ -103,7 +114,7 @@
                   EnvironmentEntriesMetaData ejbEnvEntries = jebMDs.get(ejbName).getEnvironmentEntries(); 
                   injectionMD.addAll(buildInjectionMetaData(ejbEnvEntries));
                   Endpoint endpoint = dep.getService().getEndpointByName(ejbName);
-                  InjectionsMetaData injectionsMD = new InjectionsMetaData(injectionMD, ctx);
+                  InjectionsMetaData injectionsMD = new InjectionsMetaData(injectionMD, resolvers, ctx);
                   endpoint.addAttachment(InjectionsMetaData.class, injectionsMD);
                }
             }
@@ -123,6 +134,26 @@
       super.destroy(dep);
    }
 
+   /**
+    * Builds reference resolvers container.
+    *
+    * @param unit deployment unit
+    * @return reference resolvers
+    */
+   private Map<Class<? extends Annotation>, ReferenceResolver> createResolvers(DeploymentUnit unit)
+   {
+      final Map<Class<? extends Annotation>, ReferenceResolver> resolvers = new HashMap<Class<? extends Annotation>, ReferenceResolver>();
+      resolvers.put(Resource.class, RESOURCE_REFERENCE_RESOLVER);
+      resolvers.put(EJB.class, new EJBBeanReferenceResolver(unit, getEjbReferenceResolver()));
+      return resolvers;
+   }
+
+   /**
+    * Builds JBossWS specific injection metadata from JBoss metadata.
+    *
+    * @param envEntries environment entries
+    * @return JBossWS specific injection metadata
+    */
    private List<InjectionMetaData> buildInjectionMetaData(EnvironmentEntriesMetaData envEntries)
    {
       if ((envEntries == null) || (envEntries.size() == 0))
@@ -162,6 +193,12 @@
       return retVal;
    }
 
+   /**
+    * Returns true if EJB represents webservice endpoint, false otherwise.
+    *
+    * @param container to analyze
+    * @return true if webservice endpoint, false otherwise
+    */
    private boolean isWebServiceBean(WebServiceDeclaration container)
    {
       boolean isWebService = container.getAnnotation(WebService.class) != null;
@@ -170,4 +207,29 @@
       return isWebService || isWebServiceProvider;
    }
 
+   /**
+    * Sets ejb reference resolver. This method is invoked by MC.
+    *
+    * @param resolver ejb reference resolver
+    */
+   public void setEjbReferenceResolver(final EjbReferenceResolver resolver)
+   {
+      this.ejbReferenceResolver = resolver;
+   }
+
+   /**
+    * Gets ejb reference resolver.
+    *
+    * @return ejb reference resolver
+    */
+   public EjbReferenceResolver getEjbReferenceResolver()
+   {
+      if (this.ejbReferenceResolver == null)
+      {
+         throw new IllegalStateException("No EjbReferenceResolver set by MC");
+      }
+
+      return this.ejbReferenceResolver;
+   }
+
 }

Modified: trunk/webservices/src/main/org/jboss/wsf/container/jboss60/invocation/InvocationHandlerJSE.java
===================================================================
--- trunk/webservices/src/main/org/jboss/wsf/container/jboss60/invocation/InvocationHandlerJSE.java	2009-05-05 14:47:00 UTC (rev 88219)
+++ trunk/webservices/src/main/org/jboss/wsf/container/jboss60/invocation/InvocationHandlerJSE.java	2009-05-05 14:52:00 UTC (rev 88220)
@@ -26,8 +26,8 @@
 import javax.xml.ws.WebServiceContext;
 
 import org.jboss.wsf.common.JavaUtils;
-import org.jboss.wsf.common.javax.JavaxAnnotationHelper;
-import org.jboss.wsf.common.javax.PreDestroyHolder;
+import org.jboss.wsf.common.injection.InjectionHelper;
+import org.jboss.wsf.common.injection.PreDestroyHolder;
 import org.jboss.wsf.spi.SPIProvider;
 import org.jboss.wsf.spi.SPIProviderResolver;
 import org.jboss.wsf.spi.deployment.Endpoint;
@@ -82,8 +82,8 @@
             throw new IllegalStateException("Cannot get target bean instance", ex);
          }
 
-         JavaxAnnotationHelper.injectResources(targetBean, ep.getAttachment(InjectionsMetaData.class));
-         JavaxAnnotationHelper.callPostConstructMethod(targetBean);
+         InjectionHelper.injectResources(targetBean, ep.getAttachment(InjectionsMetaData.class));
+         InjectionHelper.callPostConstructMethod(targetBean);
          ep.addAttachment(PreDestroyHolder.class, new PreDestroyHolder(targetBean));
       }
 

Modified: trunk/webservices/src/resources/jbossws-jboss60.deployer/META-INF/jbossws-deployer-jboss-beans.xml
===================================================================
--- trunk/webservices/src/resources/jbossws-jboss60.deployer/META-INF/jbossws-deployer-jboss-beans.xml	2009-05-05 14:47:00 UTC (rev 88219)
+++ trunk/webservices/src/resources/jbossws-jboss60.deployer/META-INF/jbossws-deployer-jboss-beans.xml	2009-05-05 14:52:00 UTC (rev 88220)
@@ -200,6 +200,7 @@
   <bean name="WSInjectionMetaDataDeploymentAspect" class="org.jboss.wsf.container.jboss60.deployment.metadata.InjectionMetaDataDeploymentAspect">
     <property name="requires">WebMetaData</property>
     <property name="provides">InjectionMetaData</property>
+    <property name="ejbReferenceResolver"><inject bean="org.jboss.ejb3.EjbReferenceResolver"/></property>
   </bean>  
 
   <bean name="WSContextRootDeploymentAspect" class="org.jboss.wsf.framework.deployment.BackwardCompatibleContextRootDeploymentAspect">




More information about the jboss-cvs-commits mailing list