[jboss-cvs] JBossAS SVN: r73036 - trunk/webservices/src/main/org/jboss/wsf/container/jboss50.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sun May 4 14:17:33 EDT 2008


Author: heiko.braun at jboss.com
Date: 2008-05-04 14:17:33 -0400 (Sun, 04 May 2008)
New Revision: 73036

Modified:
   trunk/webservices/src/main/org/jboss/wsf/container/jboss50/AbstractWebServiceDeployer.java
   trunk/webservices/src/main/org/jboss/wsf/container/jboss50/ContainerMetaDataAdapter.java
   trunk/webservices/src/main/org/jboss/wsf/container/jboss50/EJBArchiveMetaDataAdapterEJB3.java
   trunk/webservices/src/main/org/jboss/wsf/container/jboss50/InvocationHandlerEJB3.java
   trunk/webservices/src/main/org/jboss/wsf/container/jboss50/JAXWSDeployerHookEJB3.java
   trunk/webservices/src/main/org/jboss/wsf/container/jboss50/RuntimeLoaderDeploymentAspect.java
   trunk/webservices/src/main/org/jboss/wsf/container/jboss50/SecurityHandlerEJB3.java
   trunk/webservices/src/main/org/jboss/wsf/container/jboss50/WebServiceDeployerEJB.java
Log:
EJBTHREE-1281: Update container integration to use SPI 1.0.2

Modified: trunk/webservices/src/main/org/jboss/wsf/container/jboss50/AbstractWebServiceDeployer.java
===================================================================
--- trunk/webservices/src/main/org/jboss/wsf/container/jboss50/AbstractWebServiceDeployer.java	2008-05-04 04:39:42 UTC (rev 73035)
+++ trunk/webservices/src/main/org/jboss/wsf/container/jboss50/AbstractWebServiceDeployer.java	2008-05-04 18:17:33 UTC (rev 73036)
@@ -42,7 +42,7 @@
    // provide logging
    private static final Logger log = Logger.getLogger(AbstractWebServiceDeployer.class);
 
-   private List<DeployerHook> deployerHooks = new LinkedList<DeployerHook>();
+   protected List<DeployerHook> deployerHooks = new LinkedList<DeployerHook>();
 
    public void addDeployerHook(DeployerHook deployer)
    {

Modified: trunk/webservices/src/main/org/jboss/wsf/container/jboss50/ContainerMetaDataAdapter.java
===================================================================
--- trunk/webservices/src/main/org/jboss/wsf/container/jboss50/ContainerMetaDataAdapter.java	2008-05-04 04:39:42 UTC (rev 73035)
+++ trunk/webservices/src/main/org/jboss/wsf/container/jboss50/ContainerMetaDataAdapter.java	2008-05-04 18:17:33 UTC (rev 73036)
@@ -23,18 +23,18 @@
 
 //$Id: ContainerMetaDataAdapter.java 4022 2007-07-27 13:54:43Z heiko.braun at jboss.com $
 
-import java.net.URL;
-
 import org.jboss.deployers.structure.spi.DeploymentUnit;
-import org.jboss.ejb3.Ejb3Deployment;
 import org.jboss.logging.Logger;
 import org.jboss.metadata.ejb.jboss.JBossMetaData;
 import org.jboss.metadata.web.jboss.JBossWebMetaData;
 import org.jboss.wsf.spi.deployment.ArchiveDeployment;
 import org.jboss.wsf.spi.deployment.Deployment;
+import org.jboss.wsf.spi.deployment.integration.WebServiceDeployment;
 import org.jboss.wsf.spi.metadata.j2ee.EJBArchiveMetaData;
 import org.jboss.wsf.spi.metadata.j2ee.JSEArchiveMetaData;
 
+import java.net.URL;
+
 /**
  * Build container independent deployment info.
  *
@@ -86,7 +86,7 @@
          }
          
          // EJB3 endpoints
-         else if (unit.getAttachment(Ejb3Deployment.class) != null)
+         else if (unit.getAttachment(WebServiceDeployment.class) != null)
          {
             EJBArchiveMetaData ejbMetaData = ejbMetaDataAdapterEJB3.buildMetaData(dep, unit);
             if (ejbMetaData != null)

Modified: trunk/webservices/src/main/org/jboss/wsf/container/jboss50/EJBArchiveMetaDataAdapterEJB3.java
===================================================================
--- trunk/webservices/src/main/org/jboss/wsf/container/jboss50/EJBArchiveMetaDataAdapterEJB3.java	2008-05-04 04:39:42 UTC (rev 73035)
+++ trunk/webservices/src/main/org/jboss/wsf/container/jboss50/EJBArchiveMetaDataAdapterEJB3.java	2008-05-04 18:17:33 UTC (rev 73036)
@@ -23,35 +23,24 @@
 
 // $Id: EJBArchiveMetaDataAdapterEJB3.java 4239 2007-08-07 19:13:42Z heiko.braun at jboss.com $
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
 import org.jboss.deployers.structure.spi.DeploymentUnit;
-import org.jboss.ejb3.Container;
-import org.jboss.ejb3.EJBContainer;
-import org.jboss.ejb3.Ejb3Deployment;
-import org.jboss.ejb3.mdb.MessagingContainer;
-import org.jboss.ejb3.stateless.StatelessContainer;
 import org.jboss.logging.Logger;
 import org.jboss.metadata.common.jboss.WebserviceDescriptionMetaData;
 import org.jboss.metadata.common.jboss.WebserviceDescriptionsMetaData;
-import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
-import org.jboss.metadata.ejb.jboss.JBossGenericBeanMetaData;
 import org.jboss.metadata.ejb.jboss.JBossMetaData;
-import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
 import org.jboss.metadata.ejb.jboss.WebservicesMetaData;
-import org.jboss.metadata.ejb.spec.ActivationConfigPropertyMetaData;
-import org.jboss.metadata.javaee.spec.PortComponent;
 import org.jboss.wsf.spi.deployment.Deployment;
-import org.jboss.wsf.spi.metadata.j2ee.EJBArchiveMetaData;
-import org.jboss.wsf.spi.metadata.j2ee.EJBMetaData;
-import org.jboss.wsf.spi.metadata.j2ee.EJBSecurityMetaData;
-import org.jboss.wsf.spi.metadata.j2ee.MDBMetaData;
-import org.jboss.wsf.spi.metadata.j2ee.SLSBMetaData;
+import org.jboss.wsf.spi.deployment.integration.WebServiceDeclaration;
+import org.jboss.wsf.spi.deployment.integration.WebServiceDeployment;
+import org.jboss.wsf.spi.metadata.j2ee.*;
 import org.jboss.wsf.spi.metadata.j2ee.EJBArchiveMetaData.PublishLocationAdapter;
 
+import javax.ejb.ActivationConfigProperty;
+import javax.ejb.MessageDriven;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
 /**
  * Build container independent application meta data 
  *
@@ -65,12 +54,11 @@
 
    public EJBArchiveMetaData buildMetaData(Deployment dep, DeploymentUnit unit)
    {
-      Ejb3Deployment ejb3Deployment = unit.getAttachment(Ejb3Deployment.class);
-      dep.addAttachment(Ejb3Deployment.class, ejb3Deployment);
-
       EJBArchiveMetaData umd = new EJBArchiveMetaData();
-      buildEnterpriseBeansMetaData(umd, ejb3Deployment);
 
+      WebServiceDeployment webServiceDeployment = dep.getAttachment(WebServiceDeployment.class);
+      buildEnterpriseBeansMetaData(umd, webServiceDeployment);
+
       JBossMetaData jbMetaData = unit.getAttachment(JBossMetaData.class);
       if (jbMetaData != null)
          buildWebservicesMetaData(umd, jbMetaData);
@@ -104,68 +92,77 @@
       }
    }
 
-   private void buildEnterpriseBeansMetaData(EJBArchiveMetaData jarMetaData, Ejb3Deployment ejb3Deployment)
+   private void buildEnterpriseBeansMetaData(EJBArchiveMetaData jarMetaData, WebServiceDeployment ejb3Deployment)
    {
       List<EJBMetaData> ejbMetaDataList = new ArrayList<EJBMetaData>();
-      Iterator<Container> it = ejb3Deployment.getEjbContainers().values().iterator();
+      Iterator<WebServiceDeclaration> it = ejb3Deployment.getServiceEndpoints().iterator();
       while (it.hasNext())
       {
-         EJBContainer container = (EJBContainer)it.next();
-         
+         WebServiceDeclaration container = it.next();
+
+         // TODO: Add PortComponent parsing to EJBDescriptorHandler
+         PortComponentSpec pcMetaData = container.getAnnotation(PortComponentSpec.class);
+         MessageDriven mdbMetaData = container.getAnnotation(MessageDriven.class);
+
          EJBMetaData ejbMetaData = null;
-         PortComponent pcMetaData = null;
-         if (container instanceof StatelessContainer)
+
+         if(mdbMetaData!=null)
          {
-            ejbMetaData = new SLSBMetaData();
-            JBossEnterpriseBeanMetaData beanMetaData = container.getXml();
-            if (beanMetaData instanceof JBossGenericBeanMetaData)
-            {
-               pcMetaData = ((JBossGenericBeanMetaData)beanMetaData).getPortComponent();
-            }
-            else if (beanMetaData instanceof JBossSessionBeanMetaData)
-            {
-               pcMetaData = ((JBossSessionBeanMetaData)beanMetaData).getPortComponent();
-            }
-         }
-         else if (container instanceof MessagingContainer)
-         {
             ejbMetaData = new MDBMetaData();
-            MessagingContainer mdb = (MessagingContainer)container;
-            Map props = mdb.getActivationConfigProperties();
+
+            ActivationConfigProperty[] props = mdbMetaData.activationConfig();
             if (props != null)
             {
-               ActivationConfigPropertyMetaData destProp = (ActivationConfigPropertyMetaData)props.get("destination");
-               if (destProp != null)
+               String destination = getActivationProperty("destination", props);
+               if (destination != null)
                {
-                  String destination = destProp.getValue();
                   ((MDBMetaData)ejbMetaData).setDestinationJndiName(destination);
                }
             }
          }
+         else
+         {
+            ejbMetaData = new SLSBMetaData();
+         }
 
          if (ejbMetaData != null)
          {
-            ejbMetaData.setEjbName(container.getEjbName());
-            ejbMetaData.setEjbClass(container.getBeanClassName());
+            ejbMetaData.setEjbName(container.getComponentName());
+            ejbMetaData.setEjbClass(container.getComponentClassName());
 
             if (pcMetaData != null)
             {
-               ejbMetaData.setPortComponentName(pcMetaData.getPortComponentName());
-               ejbMetaData.setPortComponentURI(pcMetaData.getPortComponentURI());
+               ejbMetaData.setPortComponentName(pcMetaData.portComponentName());
+               ejbMetaData.setPortComponentURI(pcMetaData.portComponentURI());
                EJBSecurityMetaData smd = new EJBSecurityMetaData();
-               smd.setAuthMethod(pcMetaData.getAuthMethod());
-               smd.setTransportGuarantee(pcMetaData.getTransportGuarantee());
-               smd.setSecureWSDLAccess(pcMetaData.getSecureWSDLAccess());
+               smd.setAuthMethod(pcMetaData.authMethod());
+               smd.setTransportGuarantee(pcMetaData.transportGuarantee());
+               smd.setSecureWSDLAccess(pcMetaData.secureWSDLAccess());
                ejbMetaData.setSecurityMetaData(smd);
             }
-            
+
             ejbMetaDataList.add(ejbMetaData);
          }
       }
-      
+
       jarMetaData.setEnterpriseBeans(ejbMetaDataList);
    }
 
+   private String getActivationProperty(String name, ActivationConfigProperty[] props)
+   {
+      String result = null;
+      for(ActivationConfigProperty p : props)
+      {
+         if(p.propertyName().equals(name))
+         {
+            result = p.propertyValue();
+            break;
+         }
+      }
+
+      return result;
+   }
+
    private PublishLocationAdapter getPublishLocationAdpater(final WebservicesMetaData wsMetaData)
    {
       return new PublishLocationAdapter() {

Modified: trunk/webservices/src/main/org/jboss/wsf/container/jboss50/InvocationHandlerEJB3.java
===================================================================
--- trunk/webservices/src/main/org/jboss/wsf/container/jboss50/InvocationHandlerEJB3.java	2008-05-04 04:39:42 UTC (rev 73035)
+++ trunk/webservices/src/main/org/jboss/wsf/container/jboss50/InvocationHandlerEJB3.java	2008-05-04 18:17:33 UTC (rev 73036)
@@ -24,24 +24,15 @@
 // $Id: InvocationHandlerEJB3.java 4099 2007-08-02 13:36:49Z thomas.diesler at jboss.com $
 
 import org.jboss.dependency.spi.ControllerContext;
-import org.jboss.ejb3.BeanContext;
-import org.jboss.ejb3.BeanContextLifecycleCallback;
-import org.jboss.ejb3.stateless.StatelessBeanContext;
-import org.jboss.ejb3.stateless.StatelessContainer;
-import org.jboss.injection.lang.reflect.BeanProperty;
 import org.jboss.kernel.spi.dependency.KernelController;
 import org.jboss.wsf.common.ObjectNameFactory;
-import org.jboss.wsf.spi.SPIProvider;
-import org.jboss.wsf.spi.SPIProviderResolver;
 import org.jboss.wsf.spi.deployment.ArchiveDeployment;
 import org.jboss.wsf.spi.deployment.Endpoint;
-import org.jboss.wsf.spi.invocation.ExtensibleWebServiceContext;
 import org.jboss.wsf.spi.invocation.Invocation;
-import org.jboss.wsf.spi.invocation.InvocationType;
-import org.jboss.wsf.spi.invocation.WebServiceContextFactory;
+import org.jboss.wsf.spi.invocation.integration.InvocationContextCallback;
+import org.jboss.wsf.spi.invocation.integration.ServiceEndpointContainer;
 import org.jboss.wsf.spi.util.KernelLocator;
 
-import javax.ejb.EJBContext;
 import javax.management.ObjectName;
 import javax.xml.ws.WebServiceException;
 import java.lang.reflect.Method;
@@ -86,21 +77,18 @@
    public void invoke(Endpoint ep, Invocation wsInv) throws Exception
    {
       try
-      {         
+      {
          ControllerContext context = houston.getInstalledContext(objectName.getCanonicalName());
+         assert (context.getTarget() instanceof ServiceEndpointContainer) : "Invocation target mismatch";
 
-         Object target = context.getTarget();
-         if(! (target instanceof StatelessContainer) )
-            throw new IllegalArgumentException("Unexpected invocation target: " + target);
-         
-         StatelessContainer container = (StatelessContainer) target;
-         Class beanClass = container.getBeanClass();
+         ServiceEndpointContainer endpointContainer = (ServiceEndpointContainer) context.getTarget();
 
+         Class beanClass = endpointContainer.getServiceImplementationClass();
          Method method = getImplMethod(beanClass, wsInv.getJavaMethod());
          Object[] args = wsInv.getArgs();
-         CallbackImpl callback = new CallbackImpl(wsInv);
+         InvocationContextCallback invProps = new EJB3InvocationContextCallback(wsInv);
 
-         Object retObj = container.localInvoke(method, args, null, callback);
+         Object retObj = endpointContainer.invokeEndpoint(method, args, invProps);
 
          wsInv.setReturnValue(retObj);
       }
@@ -110,41 +98,18 @@
       }
    }
 
-   static class CallbackImpl implements BeanContextLifecycleCallback
+   static class EJB3InvocationContextCallback implements InvocationContextCallback
    {
-      private javax.xml.ws.handler.MessageContext jaxwsMessageContext;
-      private javax.xml.rpc.handler.MessageContext jaxrpcMessageContext;
+      private Invocation wsInv;
 
-      public CallbackImpl(Invocation epInv)
+      public EJB3InvocationContextCallback(Invocation wsInv)
       {
-         jaxrpcMessageContext = epInv.getInvocationContext().getAttachment(javax.xml.rpc.handler.MessageContext.class);
-         jaxwsMessageContext = epInv.getInvocationContext().getAttachment(javax.xml.ws.handler.MessageContext.class);
+         this.wsInv = wsInv;
       }
 
-      public void attached(BeanContext beanCtx)
+      public <T> T get(Class<T> propertyType)
       {
-         StatelessBeanContext sbc = (StatelessBeanContext)beanCtx;
-         sbc.setMessageContextJAXRPC(jaxrpcMessageContext);
-
-         BeanProperty beanProp = sbc.getWebServiceContextProperty();
-         if (beanProp != null)
-         {
-            EJBContext ejbCtx = beanCtx.getEJBContext();
-            SPIProvider spiProvider = SPIProviderResolver.getInstance().getProvider();
-            ExtensibleWebServiceContext wsContext = spiProvider.getSPI(WebServiceContextFactory.class).newWebServiceContext(InvocationType.JAXWS_EJB3, jaxwsMessageContext);
-            wsContext.addAttachment(EJBContext.class, ejbCtx);
-            beanProp.set(beanCtx.getInstance(), wsContext);
-         }
+         return wsInv.getInvocationContext().getAttachment(propertyType);
       }
-
-      public void released(BeanContext beanCtx)
-      {
-         StatelessBeanContext sbc = (StatelessBeanContext)beanCtx;
-         sbc.setMessageContextJAXRPC(null);
-
-         BeanProperty beanProp = sbc.getWebServiceContextProperty();
-         if (beanProp != null)
-            beanProp.set(beanCtx.getInstance(), null);
-      }
    }
 }
\ No newline at end of file

Modified: trunk/webservices/src/main/org/jboss/wsf/container/jboss50/JAXWSDeployerHookEJB3.java
===================================================================
--- trunk/webservices/src/main/org/jboss/wsf/container/jboss50/JAXWSDeployerHookEJB3.java	2008-05-04 04:39:42 UTC (rev 73035)
+++ trunk/webservices/src/main/org/jboss/wsf/container/jboss50/JAXWSDeployerHookEJB3.java	2008-05-04 18:17:33 UTC (rev 73036)
@@ -25,16 +25,14 @@
 
 import org.jboss.deployers.structure.spi.DeploymentUnit;
 import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
-import org.jboss.ejb3.EJBContainer;
-import org.jboss.ejb3.Ejb3Deployment;
-import org.jboss.ejb3.mdb.MessagingContainer;
-import org.jboss.ejb3.stateless.StatelessContainer;
 import org.jboss.metadata.serviceref.VirtualFileAdaptor;
+import org.jboss.wsf.spi.deployment.ArchiveDeployment;
 import org.jboss.wsf.spi.deployment.Deployment;
 import org.jboss.wsf.spi.deployment.Deployment.DeploymentType;
-import org.jboss.wsf.spi.deployment.ArchiveDeployment;
 import org.jboss.wsf.spi.deployment.Endpoint;
 import org.jboss.wsf.spi.deployment.Service;
+import org.jboss.wsf.spi.deployment.integration.WebServiceDeclaration;
+import org.jboss.wsf.spi.deployment.integration.WebServiceDeployment;
 
 import javax.jws.WebService;
 import javax.xml.ws.WebServiceProvider;
@@ -48,7 +46,7 @@
  */
 public class JAXWSDeployerHookEJB3 extends AbstractDeployerHookEJB
 {
-   /** Get the deployemnt type this deployer can handle
+   /** Get the deployment type this deployer can handle
     */
    public DeploymentType getDeploymentType()
    {
@@ -65,21 +63,21 @@
 
       Service service = dep.getService();
 
-      Ejb3Deployment ejb3Deployment = unit.getAttachment(Ejb3Deployment.class);
-      if (ejb3Deployment == null)
-         throw new IllegalStateException("Deployment unit does not contain ejb3 deployment");
+      WebServiceDeployment webServiceDeployment = unit.getAttachment(WebServiceDeployment.class);
+      if (webServiceDeployment == null)
+         throw new IllegalStateException("Deployment unit does not contain webServiceDeployment");
 
       // Copy the attachments
-      dep.addAttachment(Ejb3Deployment.class, ejb3Deployment);
+      dep.addAttachment(WebServiceDeployment.class, webServiceDeployment);
 
-      Iterator it = ejb3Deployment.getEjbContainers().values().iterator();
+      Iterator<WebServiceDeclaration> it = webServiceDeployment.getServiceEndpoints().iterator();
       while (it.hasNext())
       {
-         EJBContainer container = (EJBContainer)it.next();
+         WebServiceDeclaration container = it.next();
          if (isWebServiceBean(container))
          {
-            String ejbName = container.getEjbName();
-            String epBean = container.getBeanClassName();
+            String ejbName = container.getComponentName();
+            String epBean = container.getComponentClassName();
 
             // Create the endpoint
             Endpoint ep = newEndpoint(epBean);
@@ -94,16 +92,16 @@
    @Override
    public boolean isWebServiceDeployment(DeploymentUnit unit)
    {
-      Ejb3Deployment ejb3Deployment = unit.getAttachment(Ejb3Deployment.class);
-      if (ejb3Deployment == null)
+      WebServiceDeployment webServiceDeployment = unit.getAttachment(WebServiceDeployment.class);
+      if (null == webServiceDeployment )
          return false;
 
       boolean isWebServiceDeployment = false;
 
-      Iterator it = ejb3Deployment.getEjbContainers().values().iterator();
+      Iterator<WebServiceDeclaration> it = webServiceDeployment.getServiceEndpoints().iterator();
       while (it.hasNext())
       {
-         EJBContainer container = (EJBContainer)it.next();
+         WebServiceDeclaration container = it.next();
          if (isWebServiceBean(container))
          {
             isWebServiceDeployment = true;
@@ -114,15 +112,13 @@
       return isWebServiceDeployment;
    }
 
-   private boolean isWebServiceBean(EJBContainer container)
+   private boolean isWebServiceBean(WebServiceDeclaration container)
    {
       boolean isWebServiceBean = false;
-      if (container instanceof StatelessContainer || container instanceof MessagingContainer)
-      {
-         boolean isWebService = container.resolveAnnotation(WebService.class) != null;
-         boolean isWebServiceProvider = container.resolveAnnotation(WebServiceProvider.class) != null;
-         isWebServiceBean = isWebService || isWebServiceProvider;
-      }
+      boolean isWebService = container.getAnnotation(WebService.class) != null;
+      boolean isWebServiceProvider = container.getAnnotation(WebServiceProvider.class) != null;
+      isWebServiceBean = isWebService || isWebServiceProvider;
+
       return isWebServiceBean;
    }
 }
\ No newline at end of file

Modified: trunk/webservices/src/main/org/jboss/wsf/container/jboss50/RuntimeLoaderDeploymentAspect.java
===================================================================
--- trunk/webservices/src/main/org/jboss/wsf/container/jboss50/RuntimeLoaderDeploymentAspect.java	2008-05-04 04:39:42 UTC (rev 73035)
+++ trunk/webservices/src/main/org/jboss/wsf/container/jboss50/RuntimeLoaderDeploymentAspect.java	2008-05-04 18:17:33 UTC (rev 73036)
@@ -27,7 +27,7 @@
 import org.jboss.metadata.web.jboss.JBossWebMetaData;
 import org.jboss.wsf.spi.deployment.Deployment;
 import org.jboss.wsf.spi.deployment.DeploymentAspect;
-import org.jboss.ejb3.Ejb3Deployment;
+import org.jboss.wsf.spi.deployment.integration.WebServiceDeployment;
 
 /**
  * Determines the correct runtime loader for per deployment type
@@ -41,7 +41,7 @@
    public void create(Deployment dep)
    {
       // EJB3 endpoints
-      if (dep.getAttachment(Ejb3Deployment.class) != null)
+      if (dep.getAttachment(WebServiceDeployment.class) != null)
       {
          dep.setRuntimeClassLoader(dep.getInitialClassLoader());
       }

Modified: trunk/webservices/src/main/org/jboss/wsf/container/jboss50/SecurityHandlerEJB3.java
===================================================================
--- trunk/webservices/src/main/org/jboss/wsf/container/jboss50/SecurityHandlerEJB3.java	2008-05-04 04:39:42 UTC (rev 73035)
+++ trunk/webservices/src/main/org/jboss/wsf/container/jboss50/SecurityHandlerEJB3.java	2008-05-04 18:17:33 UTC (rev 73036)
@@ -23,21 +23,20 @@
 
 //$Id$
 
-import java.util.Iterator;
-
-import javax.annotation.security.RolesAllowed;
-
-import org.jboss.ejb3.EJBContainer;
-import org.jboss.ejb3.Ejb3Deployment;
 import org.jboss.ejb3.annotation.SecurityDomain;
 import org.jboss.metadata.javaee.spec.SecurityRoleMetaData;
 import org.jboss.metadata.javaee.spec.SecurityRolesMetaData;
 import org.jboss.metadata.web.jboss.JBossWebMetaData;
 import org.jboss.wsf.spi.deployment.Deployment;
+import org.jboss.wsf.spi.deployment.integration.WebServiceDeclaration;
+import org.jboss.wsf.spi.deployment.integration.WebServiceDeployment;
 
+import javax.annotation.security.RolesAllowed;
+import java.util.Iterator;
+
 /**
- * Handle web app security meta data for EJB3 
- * 
+ * Handle web app security meta data for EJB3
+ *
  * @author Thomas.Diesler at jboss.org
  * @since 12-May-2006
  */
@@ -47,14 +46,14 @@
    {
       String securityDomain = null;
 
-      Ejb3Deployment ejb3Deployment = dep.getAttachment(Ejb3Deployment.class);
-      if (ejb3Deployment != null)
+      WebServiceDeployment webServiceDeployment = dep.getAttachment(WebServiceDeployment.class);
+      if (webServiceDeployment != null)
       {
-         Iterator it = ejb3Deployment.getEjbContainers().values().iterator();
+         Iterator<WebServiceDeclaration> it = webServiceDeployment.getServiceEndpoints().iterator();
          while (it.hasNext())
          {
-            EJBContainer container = (EJBContainer)it.next();
-            SecurityDomain anSecurityDomain = (SecurityDomain)container.resolveAnnotation(SecurityDomain.class);
+            WebServiceDeclaration container = it.next();
+            SecurityDomain anSecurityDomain = container.getAnnotation(SecurityDomain.class);
             if (anSecurityDomain != null)
             {
                if (securityDomain != null && !securityDomain.equals(anSecurityDomain.value()))
@@ -76,14 +75,14 @@
 
    public void addSecurityRoles(JBossWebMetaData webApp, Deployment dep)
    {
-      Ejb3Deployment ejb3Deployment = dep.getAttachment(Ejb3Deployment.class);
-      if (ejb3Deployment != null)
+      WebServiceDeployment webServiceDeployment = dep.getAttachment(WebServiceDeployment.class);
+      if (webServiceDeployment != null)
       {
-         Iterator it = ejb3Deployment.getEjbContainers().values().iterator();
+         Iterator<WebServiceDeclaration> it = webServiceDeployment.getServiceEndpoints().iterator();
          while (it.hasNext())
          {
-            EJBContainer container = (EJBContainer)it.next();
-            RolesAllowed anRolesAllowed = (RolesAllowed)container.resolveAnnotation(RolesAllowed.class);
+            WebServiceDeclaration container = it.next();
+            RolesAllowed anRolesAllowed = container.getAnnotation(RolesAllowed.class);
             if (anRolesAllowed != null)
             {
                SecurityRolesMetaData securityRoles = webApp.getSecurityRoles();
@@ -97,4 +96,4 @@
          }
       }
    }
-}
+}
\ No newline at end of file

Modified: trunk/webservices/src/main/org/jboss/wsf/container/jboss50/WebServiceDeployerEJB.java
===================================================================
--- trunk/webservices/src/main/org/jboss/wsf/container/jboss50/WebServiceDeployerEJB.java	2008-05-04 04:39:42 UTC (rev 73035)
+++ trunk/webservices/src/main/org/jboss/wsf/container/jboss50/WebServiceDeployerEJB.java	2008-05-04 18:17:33 UTC (rev 73036)
@@ -21,27 +21,150 @@
  */
 package org.jboss.wsf.container.jboss50;
 
-import org.jboss.ejb.deployers.EjbDeployment;
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.ejb.deployers.MergedJBossMetaDataDeployer;
 import org.jboss.ejb3.Ejb3Deployment;
+import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
+import org.jboss.metadata.ejb.jboss.JBossMetaData;
 import org.jboss.metadata.web.jboss.JBossWebMetaData;
+import org.jboss.wsf.spi.deployment.integration.WebServiceDeclaration;
+import org.jboss.wsf.spi.deployment.integration.WebServiceDeployment;
 
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
 //$Id: WebServiceDeployerEJB.java 3146 2007-05-18 22:55:26Z thomas.diesler at jboss.com $
 
 /**
  * This web service deployer for EJB
- * 
+ *
  * @author Thomas.Diesler at jboss.org
  * @since 24-Apr-2007
  */
 public class WebServiceDeployerEJB extends AbstractWebServiceDeployer
 {
+   private static final Logger log = Logger.getLogger(WebServiceDeployerEJB.class);
+
    public WebServiceDeployerEJB()
    {
-      // Output of the EJBDeployer
-      addInput(EjbDeployment.class);
-      // Output of the EJB3Deployer
+      addInput(MergedJBossMetaDataDeployer.EJB_MERGED_ATTACHMENT_NAME);      
+
       addInput(Ejb3Deployment.class);
+      
       // Input for the TomcatDeployer
       addOutput(JBossWebMetaData.class);
+
+      addOutput(WebServiceDeployment.class);
+
    }
+
+   @Override
+   public void internalDeploy(DeploymentUnit unit) throws DeploymentException
+   {
+      JBossMetaData beans = (JBossMetaData)unit.getAttachment(
+        MergedJBossMetaDataDeployer.EJB_MERGED_ATTACHMENT_NAME
+      );
+
+      Ejb3Deployment ejb3Deployment = unit.getAttachment(Ejb3Deployment.class);
+      
+      if(beans!=null)
+      {
+         WebServiceDeploymentAdapter wsDeployment = new WebServiceDeploymentAdapter();
+         Iterator<JBossEnterpriseBeanMetaData> iterator = beans.getEnterpriseBeans().iterator();
+         while(iterator.hasNext())
+         {
+            JBossEnterpriseBeanMetaData ejb = iterator.next();
+            if(ejb.getEjbClass()!=null)
+               wsDeployment.getEndpoints().add( new WebServiceDeclarationAdapter(ejb, unit.getClassLoader()) );
+            else
+               log.warn("Ingore ejb deployment with null classname: " + ejb);
+         }
+
+         unit.addAttachment(WebServiceDeployment.class, wsDeployment);
+
+         super.internalDeploy(unit);
+      }
+   }
+
+   @Override
+   public void internalUndeploy(DeploymentUnit unit)
+   {
+      super.internalUndeploy(unit);
+   }
+
+   /**
+    * Adopts EJB3 bean meta data to a {@link org.jboss.wsf.spi.deployment.integration.WebServiceDeclaration}
+    */
+   private class WebServiceDeclarationAdapter implements WebServiceDeclaration
+   {
+
+      private JBossEnterpriseBeanMetaData ejbMetaData;
+      private ClassLoader loader;
+
+      public WebServiceDeclarationAdapter(JBossEnterpriseBeanMetaData  ejbMetaData, ClassLoader loader)
+      {
+         this.ejbMetaData = ejbMetaData;
+         this.loader = loader;
+      }
+
+      public String getContainerName()
+      {
+         throw new RuntimeException("Not implemented");
+      }
+
+      public String getComponentName()
+      {
+         return ejbMetaData.getName();
+      }
+
+      public String getComponentClassName()
+      {
+         return ejbMetaData.getEjbClass();
+      }
+
+      public <T extends Annotation> T getAnnotation(Class<T> annotation)
+      {
+         Class bean = getComponentClass();
+         T result = null;
+         if(bean.isAnnotationPresent(annotation))
+         {
+            result = (T)bean.getAnnotation(annotation);
+         }
+
+         return result;
+      }
+
+      private Class getComponentClass()
+      {
+         try
+         {
+            return loader.loadClass(getComponentClassName());
+         } catch (ClassNotFoundException e)
+         {
+            throw new RuntimeException("Failed to load component class "+ getComponentClassName()+". Loader:" + this.loader);
+         }
+      }
+   }
+
+   /**
+    * Adopts an EJB deployment to a {@link org.jboss.wsf.spi.deployment.integration.WebServiceDeployment}
+    */
+   private class WebServiceDeploymentAdapter implements WebServiceDeployment
+   {
+      private List<WebServiceDeclaration> endpoints = new ArrayList<WebServiceDeclaration>();
+
+      public List<WebServiceDeclaration> getServiceEndpoints()
+      {
+         return endpoints;
+      }
+
+      public List<WebServiceDeclaration> getEndpoints()
+      {
+         return endpoints;
+      }
+   }
 }




More information about the jboss-cvs-commits mailing list