[jboss-cvs] JBossAS SVN: r99104 - in projects/reloaded/trunk/naming-deployers/src: main/java/org/jboss/reloaded/naming/deployers/mc and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Jan 7 05:46:21 EST 2010


Author: wolfc
Date: 2010-01-07 05:46:20 -0500 (Thu, 07 Jan 2010)
New Revision: 99104

Added:
   projects/reloaded/trunk/naming-deployers/src/test/java/org/jboss/reloaded/naming/deployers/test/common/DummyContainer.java
   projects/reloaded/trunk/naming-deployers/src/test/java/org/jboss/reloaded/naming/deployers/test/common/DummyDeployer.java
Modified:
   projects/reloaded/trunk/naming-deployers/src/main/java/org/jboss/reloaded/naming/deployers/AppNamingDeployer.java
   projects/reloaded/trunk/naming-deployers/src/main/java/org/jboss/reloaded/naming/deployers/ComponentNamingDeployer.java
   projects/reloaded/trunk/naming-deployers/src/main/java/org/jboss/reloaded/naming/deployers/ModuleNamingDeployer.java
   projects/reloaded/trunk/naming-deployers/src/main/java/org/jboss/reloaded/naming/deployers/mc/MCJavaEEComponent.java
   projects/reloaded/trunk/naming-deployers/src/test/java/org/jboss/reloaded/naming/deployers/test/simple/SimpleTestCase.java
   projects/reloaded/trunk/naming-deployers/src/test/resources/dummy-deployers-beans.xml
Log:
RELOADED-12: component naming deployer works

Modified: projects/reloaded/trunk/naming-deployers/src/main/java/org/jboss/reloaded/naming/deployers/AppNamingDeployer.java
===================================================================
--- projects/reloaded/trunk/naming-deployers/src/main/java/org/jboss/reloaded/naming/deployers/AppNamingDeployer.java	2010-01-07 07:51:30 UTC (rev 99103)
+++ projects/reloaded/trunk/naming-deployers/src/main/java/org/jboss/reloaded/naming/deployers/AppNamingDeployer.java	2010-01-07 10:46:20 UTC (rev 99104)
@@ -68,7 +68,7 @@
          .addAnnotation(annotation(ApplicationScope.class, appName))
          .addConstructorParameter(String.class.getName(), appName);
       builder.addPropertyMetaData("nameSpaces", builder.createInject("NameSpaces"));
-      deploymentUnit.addAttachment(BeanMetaData.class, builder.getBeanMetaData());
+      deploymentUnit.addAttachment("java:app:" + BeanMetaData.class, builder.getBeanMetaData());
    }
 
    protected boolean isJavaEEApplication(DeploymentUnit deploymentUnit)

Modified: projects/reloaded/trunk/naming-deployers/src/main/java/org/jboss/reloaded/naming/deployers/ComponentNamingDeployer.java
===================================================================
--- projects/reloaded/trunk/naming-deployers/src/main/java/org/jboss/reloaded/naming/deployers/ComponentNamingDeployer.java	2010-01-07 07:51:30 UTC (rev 99103)
+++ projects/reloaded/trunk/naming-deployers/src/main/java/org/jboss/reloaded/naming/deployers/ComponentNamingDeployer.java	2010-01-07 10:46:20 UTC (rev 99104)
@@ -51,6 +51,9 @@
       setInputs(informer.getRequiredAttachments());
       addInput("java:module");
       setOutput(BeanMetaData.class);
+      // if we don't work on components only you'll see a duplicate install of java:module
+      // because AbstractDeploymentUnit.getAttachments inherits attachments from the parent.
+      setComponentsOnly(true);
    }
 
    @Override
@@ -68,12 +71,25 @@
          .addAnnotation(annotation(DeploymentScope.class, moduleName))
          .addAnnotation(annotation(InstanceScope.class, name))
          .addConstructorParameter(String.class.getName(), name);
+      if(appName != null)
+         builder.addAnnotation(annotation(ApplicationScope.class, appName));
       AbstractInjectionValueMetaData javaModule = new AbstractInjectionValueMetaData("java:module");
       javaModule.setSearch(new ParentsLookupStrategy());
       builder.addConstructorParameter(JavaEEModule.class.getName(), javaModule);
-      if(appName != null)
-         builder.addAnnotation(annotation(ApplicationScope.class, appName));
+      builder.addPropertyMetaData("nameSpaces", builder.createInject("NameSpaces"));      
 
-      unit.addAttachment(BeanMetaData.class, builder.getBeanMetaData());
+      // VDF can't do component composition, so each BMD must be in a separate component
+      DeploymentUnit component = unit.getParent().addComponent(name + ".java:comp");
+      component.addAttachment(BeanMetaData.class, builder.getBeanMetaData());
    }
+
+   @Override
+   protected void internalUndeploy(DeploymentUnit unit)
+   {
+      if(!informer.isJavaEEComponent(unit))
+         return;
+      
+      String name = informer.getComponentName(unit);
+      unit.removeComponent(name + ".java:comp");
+   }
 }

Modified: projects/reloaded/trunk/naming-deployers/src/main/java/org/jboss/reloaded/naming/deployers/ModuleNamingDeployer.java
===================================================================
--- projects/reloaded/trunk/naming-deployers/src/main/java/org/jboss/reloaded/naming/deployers/ModuleNamingDeployer.java	2010-01-07 07:51:30 UTC (rev 99103)
+++ projects/reloaded/trunk/naming-deployers/src/main/java/org/jboss/reloaded/naming/deployers/ModuleNamingDeployer.java	2010-01-07 10:46:20 UTC (rev 99104)
@@ -85,7 +85,7 @@
          builder.addConstructorParameter(JavaEEApplication.class.getName(), (Object) null);
       builder.addPropertyMetaData("nameSpaces", builder.createInject("NameSpaces"));
 
-      unit.addAttachment(BeanMetaData.class, builder.getBeanMetaData());
+      unit.addAttachment("java:module:" + BeanMetaData.class, builder.getBeanMetaData());
    }
 
    /**

Modified: projects/reloaded/trunk/naming-deployers/src/main/java/org/jboss/reloaded/naming/deployers/mc/MCJavaEEComponent.java
===================================================================
--- projects/reloaded/trunk/naming-deployers/src/main/java/org/jboss/reloaded/naming/deployers/mc/MCJavaEEComponent.java	2010-01-07 07:51:30 UTC (rev 99103)
+++ projects/reloaded/trunk/naming-deployers/src/main/java/org/jboss/reloaded/naming/deployers/mc/MCJavaEEComponent.java	2010-01-07 10:46:20 UTC (rev 99104)
@@ -21,6 +21,7 @@
  */
 package org.jboss.reloaded.naming.deployers.mc;
 
+import org.jboss.logging.Logger;
 import org.jboss.reloaded.naming.spi.JavaEEComponent;
 import org.jboss.reloaded.naming.spi.JavaEEModule;
 import org.jnp.interfaces.NamingContext;
@@ -31,6 +32,8 @@
  */
 public class MCJavaEEComponent extends AbstractNameSpace implements JavaEEComponent
 {
+   private static final Logger log = Logger.getLogger(MCJavaEEComponent.class);
+   
    private JavaEEModule module;
 
    public MCJavaEEComponent(String name, JavaEEModule module)
@@ -49,6 +52,8 @@
    {
       NamingServer srv = new NamingServer();
       context = new NamingContext(nameSpaces.getGlobalContext().getEnvironment(), null, srv);
+
+      log.debug("Installed context " + context + " for JavaEE component " + name + " in module " + module.getName());
    }
 
    @Override

Added: projects/reloaded/trunk/naming-deployers/src/test/java/org/jboss/reloaded/naming/deployers/test/common/DummyContainer.java
===================================================================
--- projects/reloaded/trunk/naming-deployers/src/test/java/org/jboss/reloaded/naming/deployers/test/common/DummyContainer.java	                        (rev 0)
+++ projects/reloaded/trunk/naming-deployers/src/test/java/org/jboss/reloaded/naming/deployers/test/common/DummyContainer.java	2010-01-07 10:46:20 UTC (rev 99104)
@@ -0,0 +1,106 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright (c) 2010, 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.reloaded.naming.deployers.test.common;
+
+import org.jboss.logging.Logger;
+import org.jboss.reloaded.naming.CurrentComponent;
+import org.jboss.reloaded.naming.spi.JavaEEComponent;
+import org.jboss.util.naming.NonSerializableFactory;
+import org.jboss.util.naming.Util;
+
+import javax.naming.InitialContext;
+import java.util.concurrent.Callable;
+
+/**
+ * @author <a href="cdewolf at redhat.com">Carlo de Wolf</a>
+ */
+public class DummyContainer
+{
+   private static Logger log = Logger.getLogger(DummyContainer.class);
+   
+   private JavaEEComponent component;
+   private InitialContext ctx;
+
+   public DummyContainer(JavaEEComponent component)
+   {
+      this.component = component;
+   }
+
+   private <R> R around(Callable<R> callable)
+   {
+      CurrentComponent.push(component);
+      try
+      {
+         return callable.call();
+      }
+      catch(Exception e)
+      {
+         if(e instanceof RuntimeException)
+            throw (RuntimeException) e;
+         throw new RuntimeException(e);
+      }
+      finally
+      {
+         CurrentComponent.pop();
+      }
+   }
+
+   public Object getValue(final String name)
+   {
+      return around(new Callable<Object>() {
+         public Object call() throws Exception
+         {
+            return ctx.lookup(name);
+         }
+      });
+   }
+
+   public void setValue(final String name, final String value)
+   {
+      around(new Callable<Void>() {
+         public Void call() throws Exception
+         {
+            Util.bind(ctx, name, value);
+            return null;
+         }
+      });
+   }
+
+   public void start() throws Exception
+   {
+      ctx = new InitialContext();
+
+      // normally done somewhere else
+      NonSerializableFactory.rebind(component.getModule().getContext(), component.getName(), this);
+      
+      log.info("Started container " + this + " with java:comp context " + component.getContext());
+   }
+
+   public void stop() throws Exception
+   {
+      Util.unbind(component.getModule().getContext(), component.getName());
+
+      if(ctx != null)
+         ctx.close();
+      ctx = null;
+   }
+}


Property changes on: projects/reloaded/trunk/naming-deployers/src/test/java/org/jboss/reloaded/naming/deployers/test/common/DummyContainer.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Added: projects/reloaded/trunk/naming-deployers/src/test/java/org/jboss/reloaded/naming/deployers/test/common/DummyDeployer.java
===================================================================
--- projects/reloaded/trunk/naming-deployers/src/test/java/org/jboss/reloaded/naming/deployers/test/common/DummyDeployer.java	                        (rev 0)
+++ projects/reloaded/trunk/naming-deployers/src/test/java/org/jboss/reloaded/naming/deployers/test/common/DummyDeployer.java	2010-01-07 10:46:20 UTC (rev 99104)
@@ -0,0 +1,79 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright (c) 2010, 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.reloaded.naming.deployers.test.common;
+
+import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
+import org.jboss.beans.metadata.plugins.builder.BeanMetaDataBuilderFactory;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+import org.jboss.dependency.plugins.graph.Search;
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.metadata.plugins.scope.ApplicationScope;
+import org.jboss.metadata.plugins.scope.DeploymentScope;
+import org.jboss.metadata.plugins.scope.InstanceScope;
+import org.jboss.reloaded.naming.deployers.javaee.JavaEEComponentInformer;
+import org.jboss.reloaded.naming.spi.JavaEEComponent;
+
+import static org.jboss.reloaded.naming.deployers.util.AnnotationHelper.annotation;
+
+/**
+ * @author <a href="cdewolf at redhat.com">Carlo de Wolf</a>
+ */
+public class DummyDeployer extends AbstractSimpleRealDeployer<DummyMetaData>
+{
+   private JavaEEComponentInformer informer;
+   
+   public DummyDeployer()
+   {
+      super(DummyMetaData.class);
+      setOutput(BeanMetaData.class);
+      setComponentsOnly(true);
+      //setUseUnitName(true);
+   }
+
+   @Override
+   public void deploy(DeploymentUnit unit, DummyMetaData deployment) throws DeploymentException
+   {
+      String appName = informer.getApplicationName(unit);
+      String moduleName = informer.getModulePath(unit);
+      String name = informer.getComponentName(unit);
+
+      // create JavaEEModule bean
+      BeanMetaDataBuilder builder = BeanMetaDataBuilderFactory.createBuilder(name, DummyContainer.class.getName())
+         .addAnnotation(annotation(DeploymentScope.class, moduleName))
+         .addAnnotation(annotation(InstanceScope.class, name));
+      if(appName != null)
+         builder.addAnnotation(annotation(ApplicationScope.class, appName));
+      AbstractInjectionValueMetaData javaComponent = new AbstractInjectionValueMetaData("java:comp");
+      javaComponent.setSearch(Search.LOCAL);
+      builder.addConstructorParameter(JavaEEComponent.class.getName(), javaComponent);
+
+      unit.addAttachment(BeanMetaData.class, builder.getBeanMetaData());
+   }
+
+   public void setJavaEEComponentInformer(JavaEEComponentInformer informer)
+   {
+      this.informer = informer;
+   }
+}


Property changes on: projects/reloaded/trunk/naming-deployers/src/test/java/org/jboss/reloaded/naming/deployers/test/common/DummyDeployer.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Modified: projects/reloaded/trunk/naming-deployers/src/test/java/org/jboss/reloaded/naming/deployers/test/simple/SimpleTestCase.java
===================================================================
--- projects/reloaded/trunk/naming-deployers/src/test/java/org/jboss/reloaded/naming/deployers/test/simple/SimpleTestCase.java	2010-01-07 07:51:30 UTC (rev 99103)
+++ projects/reloaded/trunk/naming-deployers/src/test/java/org/jboss/reloaded/naming/deployers/test/simple/SimpleTestCase.java	2010-01-07 10:46:20 UTC (rev 99104)
@@ -38,17 +38,20 @@
 import org.jboss.kernel.spi.deployment.KernelDeployment;
 import org.jboss.metadata.ear.jboss.JBossAppMetaData;
 import org.jboss.reloaded.naming.deployers.test.common.DummiesMetaData;
+import org.jboss.reloaded.naming.deployers.test.common.DummyContainer;
 import org.jboss.reloaded.naming.service.NameSpaces;
+import org.jboss.util.naming.Util;
 import org.jboss.virtual.AssembledDirectory;
 import org.junit.BeforeClass;
-import org.junit.Ignore;
 import org.junit.Test;
 
+import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NameNotFoundException;
 import javax.naming.NamingException;
 import java.net.URL;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.fail;
 
@@ -164,18 +167,39 @@
    }
 
    @Test
-   @Ignore
    public void testComponents() throws Exception
    {
       AssembledDirectory root = AssembledDirectory.createAssembledDirectory("components", "components.jar");
       VFSDeployment deployment = new AbstractVFSDeployment(root);
+      //((MutableAttachments) deployment.getPredeterminedManagedObjects()).addAttachment(DummiesMetaData.class, DummiesMetaData.create("A", "B"));
       ((MutableAttachments) deployment.getPredeterminedManagedObjects()).addAttachment(DummiesMetaData.class, DummiesMetaData.create("A", "B"));
       mainDeployer.deploy(deployment);
 
       // basically the lookup is what really checks the functionality, not null is a bonus
       assertNotNull(ctx.lookup("java:global"));
-      assertNotNull(ctx.lookup("java:global/components"));
+      Context c = (Context) ctx.lookup("java:global/components");
+      assertNotNull(c);
 
+      Util.bind(c, "test", "Hello world");
+
+      DummyContainer containerA = (DummyContainer) ctx.lookup("java:global/components/A");
+
+      String result = (String) containerA.getValue("java:module/test");
+      assertEquals("Hello world", result);
+
+      DummyContainer containerB = (DummyContainer) ctx.lookup("java:global/components/B");
+
+      containerA.setValue("java:comp/local", "a local value");
+      try
+      {
+         containerB.getValue("java:comp/local");
+      }
+      catch(RuntimeException e)
+      {
+         // good
+         // TODO: should be a NameNotFoundException
+      }
+
       mainDeployer.undeploy(deployment);
 
       assertNameNotFound("java:global/components");

Modified: projects/reloaded/trunk/naming-deployers/src/test/resources/dummy-deployers-beans.xml
===================================================================
--- projects/reloaded/trunk/naming-deployers/src/test/resources/dummy-deployers-beans.xml	2010-01-07 07:51:30 UTC (rev 99103)
+++ projects/reloaded/trunk/naming-deployers/src/test/resources/dummy-deployers-beans.xml	2010-01-07 10:46:20 UTC (rev 99104)
@@ -1,4 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <deployment xmlns="urn:jboss:bean-deployer:2.0">
    <bean name="DummiesDeployer" class="org.jboss.reloaded.naming.deployers.test.common.DummiesDeployer"/>
+   <bean name="DummyDeployer" class="org.jboss.reloaded.naming.deployers.test.common.DummyDeployer">
+      <property name="javaEEComponentInformer"><inject bean="JavaEEComponentInformer"/></property>      
+   </bean>
 </deployment>
\ No newline at end of file




More information about the jboss-cvs-commits mailing list