[jboss-cvs] JBossAS SVN: r107713 - in trunk: server/src/main/java/org/jboss/as/naming/javaee and 4 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Aug 20 09:18:58 EDT 2010


Author: wolfc
Date: 2010-08-20 09:18:57 -0400 (Fri, 20 Aug 2010)
New Revision: 107713

Modified:
   trunk/ejb3/src/main/java/org/jboss/ejb3/deployers/JBossASKernel.java
   trunk/server/src/main/java/org/jboss/as/naming/javaee/NamingJavaEEApplicationInformer.java
   trunk/server/src/main/java/org/jboss/as/naming/javaee/NamingJavaEEModuleInformer.java
   trunk/testsuite/build.xml
   trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/NamingListener.java
   trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployer.java
   trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java
   trunk/tomcat/src/resources/war-deployers-jboss-beans.xml
Log:
JBAS-7862: pickup JavaEEModule from the naming deployers

Modified: trunk/ejb3/src/main/java/org/jboss/ejb3/deployers/JBossASKernel.java
===================================================================
--- trunk/ejb3/src/main/java/org/jboss/ejb3/deployers/JBossASKernel.java	2010-08-20 09:07:09 UTC (rev 107712)
+++ trunk/ejb3/src/main/java/org/jboss/ejb3/deployers/JBossASKernel.java	2010-08-20 13:18:57 UTC (rev 107713)
@@ -140,14 +140,17 @@
       if(service instanceof EJBContainer)
       {
          EJBContainer container = EJBContainer.class.cast(service);
-         // TODO: use a resolver
+         // TODO: use an informer
          JavaEEModule module = container.getModule();
+         String moduleName = stripSuffix(module.getName());
          JavaEEApplication app = module.getApplication();
-         String encFactoryBeanName = "jboss.ejb3:" + (app != null ? "application=" + stripSuffix(app.getName()) + "," : "") + "module=" + stripSuffix(module.getName()) + ",component=" + container.getEjbName() + ",service=EjbEncFactory";
+         String appName = app != null ? stripSuffix(app.getName()) : null;
+         String scopedBeanName = "application=" + (appName != null ? appName : moduleName) + ",module=" + moduleName + ",component=" + container.getEjbName();
+         String encFactoryBeanName = "jboss.ejb3:" + scopedBeanName + ",service=EjbEncFactory";
          // create an EjbEncFactory for this container
          {
             BeanMetaDataBuilder builder = BeanMetaDataBuilderFactory.createBuilder(encFactoryBeanName, NamingComponentEjbEncFactory.class.getName());
-            String componentBeanName = "jboss.naming:" + (app != null ? "application=" + stripSuffix(app.getName()) + "," : "") + "module=" + stripSuffix(module.getName()) + ",component=" + container.getEjbName();
+            String componentBeanName = "jboss.naming:" + scopedBeanName;
             builder.addConstructorParameter(JavaEEComponent.class.getName(), new AbstractInjectionValueMetaData(componentBeanName));
             // TODO: is deployment always available at this stage?
             deployment.getBeanFactories().add(builder.getBeanMetaDataFactory());

Modified: trunk/server/src/main/java/org/jboss/as/naming/javaee/NamingJavaEEApplicationInformer.java
===================================================================
--- trunk/server/src/main/java/org/jboss/as/naming/javaee/NamingJavaEEApplicationInformer.java	2010-08-20 09:07:09 UTC (rev 107712)
+++ trunk/server/src/main/java/org/jboss/as/naming/javaee/NamingJavaEEApplicationInformer.java	2010-08-20 13:18:57 UTC (rev 107713)
@@ -1,16 +1,14 @@
 package org.jboss.as.naming.javaee;
 
 import org.jboss.deployers.structure.spi.DeploymentUnit;
-import org.jboss.metadata.ear.jboss.JBossAppMetaData;
 import org.jboss.reloaded.naming.deployers.javaee.JavaEEApplicationInformer;
-import org.jboss.system.metadata.ServiceDeployment;
 
 /**
  * @author <a href="cdewolf at redhat.com">Carlo de Wolf</a>
  */
 public class NamingJavaEEApplicationInformer implements JavaEEApplicationInformer
 {
-   private static final String REQUIRED_ATTACHMENTS[] = { JBossAppMetaData.class.getName(), ServiceDeployment.class.getName() };
+   private static final String REQUIRED_ATTACHMENTS[] = null;
 
    public String getApplicationName(DeploymentUnit deploymentUnit) throws IllegalArgumentException
    {
@@ -23,17 +21,11 @@
 
    public boolean isJavaEEApplication(DeploymentUnit deploymentUnit)
    {
-      return deploymentUnit.isAttachmentPresent(JBossAppMetaData.class) || isTopLevelServiceArchive(deploymentUnit);
+      // JavaEE 6.0 FR 5.2.2
+      // practically everything deployed standalone is considered a JavaEEApplication in terms of naming
+      return deploymentUnit.isTopLevel();
    }
 
-   /**
-    * In a deployment consisting of x.sar/ejbs.jar, the x.sar substitutes an EAR.
-    */
-   protected boolean isTopLevelServiceArchive(DeploymentUnit deploymentUnit)
-   {
-      return deploymentUnit.isTopLevel() && deploymentUnit.isAttachmentPresent(ServiceDeployment.class);
-   }
-
    public String[] getRequiredAttachments()
    {
       return REQUIRED_ATTACHMENTS;

Modified: trunk/server/src/main/java/org/jboss/as/naming/javaee/NamingJavaEEModuleInformer.java
===================================================================
--- trunk/server/src/main/java/org/jboss/as/naming/javaee/NamingJavaEEModuleInformer.java	2010-08-20 09:07:09 UTC (rev 107712)
+++ trunk/server/src/main/java/org/jboss/as/naming/javaee/NamingJavaEEModuleInformer.java	2010-08-20 13:18:57 UTC (rev 107713)
@@ -39,6 +39,10 @@
 
    protected static <T> T[] concat(T[] array1, T[] array2)
    {
+      if(array1 == null)
+         return array2;
+      if(array2 == null)
+         return array1;
       T[] result = (T[]) Array.newInstance(array1.getClass().getComponentType(), array1.length + array2.length);
       System.arraycopy(array1, 0, result, 0, array1.length);
       System.arraycopy(array2, 0, result, array1.length, array2.length);

Modified: trunk/testsuite/build.xml
===================================================================
--- trunk/testsuite/build.xml	2010-08-20 09:07:09 UTC (rev 107712)
+++ trunk/testsuite/build.xml	2010-08-20 13:18:57 UTC (rev 107713)
@@ -1186,11 +1186,6 @@
       <include name="org/jboss/test/aop/test/Scoped*TestCase.class"/>
    </patternset>
    
-   <patternset id="naming-servlet.excludes">
-      <!-- Testing functionality that does not currently exist - See: JBAS-7908 -->
-      <exclude name="org/jboss/test/web/test/NamingServletUnitTestCase.class"/>
-   </patternset>
-
    <!-- The union of the excludes -->
    <patternset id="all.excludes">
       <patternset refid="aop-with-classloader.excludes"/>
@@ -1214,7 +1209,6 @@
       <patternset refid="jbossmessaging.excludes"/>
       <patternset refid="springdeployer.excludes"/>
       <patternset refid="jbas7273.excludes"/>
-      <patternset refid="naming-servlet.excludes"/>
    </patternset>
 
    <!-- A target that allows for conditional dependency on the compilation and

Modified: trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/NamingListener.java
===================================================================
--- trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/NamingListener.java	2010-08-20 09:07:09 UTC (rev 107712)
+++ trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/NamingListener.java	2010-08-20 13:18:57 UTC (rev 107713)
@@ -24,6 +24,8 @@
 import org.apache.catalina.InstanceEvent;
 import org.apache.catalina.InstanceListener;
 import org.jboss.logging.Logger;
+import org.jboss.reloaded.naming.CurrentComponent;
+import org.jboss.reloaded.naming.spi.JavaEEComponent;
 
 /**
  * An InstanceListener used to push/pop the application naming context.
@@ -34,13 +36,14 @@
 public class NamingListener implements InstanceListener
 {
    private static Logger log = Logger.getLogger(NamingListener.class);
-   public static ThreadLocal<Object> idLocal = new ThreadLocal<Object>();
+   public static ThreadLocal<JavaEEComponent> idLocal = new ThreadLocal<JavaEEComponent>();
 
-   private Object id;
+   private JavaEEComponent id;
 
    public NamingListener()
    {
       id = idLocal.get();
+      assert id != null : "id is null";
    }
 
    public Object getId()
@@ -48,7 +51,7 @@
       return id;
    }
 
-   public void setId(Object id)
+   public void setId(JavaEEComponent id)
    {
       this.id = id;
    }
@@ -61,14 +64,14 @@
          || type.equals(InstanceEvent.BEFORE_DISPATCH_EVENT) )
       {
          // Push naming id
-         //TODO
+         CurrentComponent.push(id);
       }
       // Pop the identity on the after init/destroy
       else if ( type.equals(InstanceEvent.AFTER_REQUEST_EVENT)
          || type.equals(InstanceEvent.AFTER_DISPATCH_EVENT) )
       {
          // Pop naming id
-         //TODO
+         CurrentComponent.pop();
       }
    }
    

Modified: trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployer.java
===================================================================
--- trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployer.java	2010-08-20 09:07:09 UTC (rev 107712)
+++ trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployer.java	2010-08-20 13:18:57 UTC (rev 107713)
@@ -21,22 +21,23 @@
  */
 package org.jboss.web.tomcat.service.deployers;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-import java.util.Set;
-
-import javax.management.ObjectName;
-
+import org.jboss.beans.metadata.api.annotations.Inject;
 import org.jboss.deployers.structure.spi.DeploymentUnit;
 import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
 import org.jboss.metadata.web.jboss.JBossWebMetaData;
 import org.jboss.metadata.web.spec.WebMetaData;
 import org.jboss.mx.util.ObjectNameFactory;
+import org.jboss.reloaded.naming.deployers.javaee.JavaEEComponentInformer;
 import org.jboss.security.plugins.JaasSecurityManagerServiceMBean;
 import org.jboss.web.deployers.AbstractWarDeployer;
 import org.jboss.web.deployers.AbstractWarDeployment;
 
+import javax.management.ObjectName;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import java.util.Set;
+
 /**
  * A concrete implementation of the AbstractWarDeployer that creates {@link #TomcatDeployment} instances as the web
  * application bean representation.
@@ -123,8 +124,12 @@
 
    private boolean standalone = false;
 
-   public TomcatDeployer()
+   private JavaEEComponentInformer componentInformer;
+
+   public TomcatDeployer(@Inject JavaEEComponentInformer componentInformer)
    {
+      this.componentInformer = componentInformer;
+      setInputs(componentInformer.getRequiredAttachments());
    }
 
    public String getName()
@@ -397,11 +402,17 @@
       deployment.setSecurityManagementName(securityManagement);
       deployment.setPolicyRegistrationName(policyRegistrationName);
 
+      // TODO: I haven't got a clue as to why this is set very late in WebModule, but the informer depends on it
+      deployment.setDeploymentUnit(unit);
+      // TODO: until deployment is a MC bean
+      ((TomcatDeployment) deployment).setJavaEEComponentInformer(componentInformer);
+
       // Add a dependency on the webserver itself
       List<String> depends = metaData.getDepends();
       if (depends == null)
          depends = new ArrayList<String>();
       depends.add(TOMCAT_SERVICE_NAME.getCanonicalName());
+      depends.add(((TomcatDeployment) deployment).getJavaEEModuleName());
       metaData.setDepends(depends);
 
       deployment.setServer(super.getServer());

Modified: trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java
===================================================================
--- trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java	2010-08-20 09:07:09 UTC (rev 107712)
+++ trunk/tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java	2010-08-20 13:18:57 UTC (rev 107713)
@@ -21,33 +21,10 @@
  */
 package org.jboss.web.tomcat.service.deployers;
 
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLDecoder;
-import java.security.CodeSource;
-import java.security.cert.Certificate;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.LinkRef;
-
-import org.apache.catalina.Container;
-import org.apache.catalina.Engine;
-import org.apache.catalina.LifecycleEvent;
-import org.apache.catalina.LifecycleListener;
-import org.apache.catalina.Loader;
+import org.apache.catalina.*;
 import org.apache.catalina.core.StandardContext;
 import org.apache.tomcat.util.modeler.Registry;
+import org.jboss.beans.metadata.api.annotations.Inject;
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.deployers.spi.DeploymentException;
@@ -59,12 +36,14 @@
 import org.jboss.metadata.web.spec.TldMetaData;
 import org.jboss.mx.util.MBeanServerLocator;
 import org.jboss.naming.NonSerializableFactory;
+import org.jboss.reloaded.naming.deployers.javaee.JavaEEComponentInformer;
+import org.jboss.reloaded.naming.spi.JavaEEComponent;
+import org.jboss.reloaded.naming.spi.JavaEEModule;
 import org.jboss.security.SecurityUtil;
 import org.jboss.vfs.VFS;
 import org.jboss.vfs.VirtualFile;
 import org.jboss.web.WebApplication;
 import org.jboss.web.deployers.AbstractWarDeployment;
-import org.jboss.web.deployers.SharedJBossWebMetaDataDeployer;
 import org.jboss.web.deployers.SharedTldMetaDataDeployer;
 import org.jboss.web.tomcat.security.JaccContextValve;
 import org.jboss.web.tomcat.security.RunAsListener;
@@ -73,9 +52,20 @@
 import org.jboss.web.tomcat.service.NamingListener;
 import org.jboss.web.tomcat.service.TomcatInjectionContainer;
 import org.jboss.web.tomcat.service.WebCtxLoader;
-import org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve;
 import org.omg.CORBA.ORB;
 
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.LinkRef;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLDecoder;
+import java.security.CodeSource;
+import java.security.cert.Certificate;
+import java.util.*;
+
 /**
  * A tomcat web application deployment.
  * 
@@ -98,6 +88,8 @@
 
    private ORB orb = null;
 
+   private JavaEEComponentInformer componentInformer;
+
    public ORB getORB()
    {
       return orb;
@@ -299,8 +291,8 @@
       JBossContextConfig.metaDataLocal.set(metaData);
       JBossContextConfig.deployerConfig.set(config);
       JBossContextConfig.tldMetaDataMapLocal.set(tldMetaDataMap);
-      // TODO: acquire the component ID
-      NamingListener.idLocal.set(null);
+      JavaEEComponent component = createJavaEEComponent();
+      NamingListener.idLocal.set(component);
 
       JBossContextConfig.kernelLocal.set(kernel);
       JBossContextConfig.deploymentUnitLocal.set(unit);
@@ -656,4 +648,66 @@
       return (Engine) parentContainer;
    }
 
+   private JavaEEComponent createJavaEEComponent()
+   {
+      final String beanName = getJavaEEModuleName();
+      
+      // TODO: must come in via MC injection
+      final JavaEEModule module = getBean(beanName, JavaEEModule.class);
+
+      // Web uses a Module context
+      return new JavaEEComponent() {
+
+         public Context getContext()
+         {
+            return module.getContext();
+         }
+
+         public JavaEEModule getModule()
+         {
+            return module;
+         }
+
+         public String getName()
+         {
+            return module.getName();
+         }
+      };
+   }
+
+   private <T> T getBean(String beanName, Class<T> type)
+   {
+      ControllerContext context = kernel.getController().getInstalledContext(beanName);
+      if(context == null)
+         throw new IllegalArgumentException("Can't find bean " + beanName + " in " + kernel);
+      Object target = context.getTarget();
+      if(target == null)
+         throw new IllegalArgumentException("Bean " + beanName + " has no target instance in " + kernel);
+      return type.cast(target);
+   }
+
+   // TODO: weirdness, if I make this package private I get IllegalAccessError
+   public String getJavaEEModuleName()
+   {
+      // TODO: must come in via MC injection
+//      NamingJavaEEComponentInformer componentInformer = new NamingJavaEEComponentInformer();
+//      componentInformer.setJavaEEModuleIdentifier(new SimpleJavaEEModuleIdentifier());
+//      final JavaEEComponentInformer componentInformer = (JavaEEComponentInformer) kernel.getController().getContextByClass(JavaEEComponentInformer.class).getTarget();
+      assert componentInformer != null : "componentInformer is null";
+      // assert ControllerState.INSTALLED
+
+      final String applicationName = componentInformer.getApplicationName(unit);
+      final String moduleName = componentInformer.getModulePath(unit);
+
+      // TODO: remove hard coded "jboss.naming" constant
+      final String beanName = "jboss.naming:" + (applicationName != null ? "application=" + applicationName + "," : "") + "module=" + moduleName;
+
+      return beanName;
+   }
+
+   @Inject
+   public void setJavaEEComponentInformer(JavaEEComponentInformer componentInformer)
+   {
+      this.componentInformer = componentInformer;
+   }
 }
\ No newline at end of file

Modified: trunk/tomcat/src/resources/war-deployers-jboss-beans.xml
===================================================================
--- trunk/tomcat/src/resources/war-deployers-jboss-beans.xml	2010-08-20 09:07:09 UTC (rev 107712)
+++ trunk/tomcat/src/resources/war-deployers-jboss-beans.xml	2010-08-20 13:18:57 UTC (rev 107713)
@@ -144,7 +144,8 @@
 
    <!-- The WebMetaData to service mbean deployer -->
    <bean name="WarDeployer" class="org.jboss.web.tomcat.service.deployers.TomcatDeployer">
-
+      <constructor><parameter><inject bean="NamingJavaEEComponentInformer"/></parameter></constructor>
+      
       <!-- Inject the MainDeployer for resolving cross deployment refs -->
       <property name="mainDeployer"><inject bean="MainDeployer" /></property>
 



More information about the jboss-cvs-commits mailing list