[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