[jboss-cvs] JBossAS SVN: r75214 - in projects/microcontainer/trunk: kernel/src/main/org/jboss/kernel/plugins/annotations and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Jun 30 09:13:26 EDT 2008


Author: alesj
Date: 2008-06-30 09:13:25 -0400 (Mon, 30 Jun 2008)
New Revision: 75214

Added:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AliasScopeAction.java
Modified:
   projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractController.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/AliasesAnnotationPlugin.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/PreInstallAction.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ScopedKernelController.java
   projects/microcontainer/trunk/kernel/src/resources/tests/org/jboss/test/kernel/deployment/test/ScopingAliasTestCase.xml
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/dependency/test/PlainAliasAnnotationTestCase.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/dependency/test/PlainAliasTestCase.java
Log:
[JBMICROCONT-309]; move alias to the right scoped controller.

Modified: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractController.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractController.java	2008-06-30 13:08:09 UTC (rev 75213)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractController.java	2008-06-30 13:13:25 UTC (rev 75214)
@@ -472,14 +472,35 @@
 
    public void addAlias(Object alias, Object original) throws Throwable
    {
-      Map<ControllerState, ControllerContextAction> map = Collections.<ControllerState, ControllerContextAction>singletonMap(ControllerState.INSTALLED, new AliasControllerContextAction());
+      Map<ControllerState, ControllerContextAction> map = createAliasActions();
       ControllerContextActions actions = new AbstractControllerContextActions(map);
-      install(new AliasControllerContext(alias, original, actions));
+      AliasControllerContext context = new AliasControllerContext(alias, original, actions);
+      preAliasInstall(context);
+      install(context);
    }
 
+   /**
+    * Create alias controller context actions.
+    *
+    * @return the alias controller context actions
+    */
+   protected Map<ControllerState, ControllerContextAction> createAliasActions()
+   {
+      return Collections.<ControllerState, ControllerContextAction>singletonMap(ControllerState.INSTALLED, new AliasControllerContextAction());
+   }
+
+   /**
+    * Apply pre install - e.g. scope key in scoped controller.
+    *
+    * @param aliasContext the new alias context
+    */
+   protected void preAliasInstall(ControllerContext aliasContext)
+   {
+   }
+
    public void removeAlias(Object alias)
    {
-      uninstall(alias + "_Alias");
+      uninstall(alias + "_Alias_" + toString());
    }
 
    /**
@@ -1633,7 +1654,7 @@
 
       public AliasControllerContext(Object alias, Object original, ControllerContextActions actions)
       {
-         super(alias + "_Alias", actions);
+         super(alias + "_Alias_" + AbstractController.this.toString(), actions);
          this.alias = alias;
          this.original = original;
          DependencyInfo info = getDependencyInfo();

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/AliasesAnnotationPlugin.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/AliasesAnnotationPlugin.java	2008-06-30 13:08:09 UTC (rev 75213)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/annotations/AliasesAnnotationPlugin.java	2008-06-30 13:13:25 UTC (rev 75214)
@@ -61,8 +61,8 @@
 
          if (aliases == null || aliases.contains(alias) == false)
          {
-            // impl detail (_Alias)
-            if (controller.getContext(alias + "_Alias", null) == null)
+            // impl detail (_Alias_<Controller>)
+            if (controller.getContext(alias + "_Alias_" + controller, null) == null)
             {
                controller.addAlias(alias, beanMetaData.getName());
             }
@@ -91,8 +91,8 @@
 
          if (aliases == null || aliases.contains(alias) == false)
          {
-            // impl detail (_Alias)
-            if (controller.getContext(alias + "_Alias", null) != null)
+            // impl detail (_Alias_<Controller>)
+            if (controller.getContext(alias + "_Alias_" + controller, null) != null)
             {
                controller.removeAlias(alias);
             }

Copied: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AliasScopeAction.java (from rev 75212, projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/PreInstallAction.java)
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AliasScopeAction.java	                        (rev 0)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AliasScopeAction.java	2008-06-30 13:13:25 UTC (rev 75214)
@@ -0,0 +1,86 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.kernel.plugins.dependency;
+
+import org.jboss.dependency.plugins.action.SimpleControllerContextAction;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.kernel.spi.dependency.KernelController;
+import org.jboss.kernel.spi.metadata.KernelMetaDataRepository;
+import org.jboss.metadata.plugins.loader.memory.MemoryMetaDataLoader;
+import org.jboss.metadata.spi.repository.MutableMetaDataRepository;
+import org.jboss.metadata.spi.retrieval.MetaDataItem;
+import org.jboss.metadata.spi.retrieval.MetaDataRetrieval;
+import org.jboss.metadata.spi.scope.ScopeKey;
+
+/**
+ * Alias scope action.
+ *
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
+ */
+public class AliasScopeAction extends SimpleControllerContextAction<ControllerContext>
+{
+   protected ControllerContext contextCast(ControllerContext context)
+   {
+      return context;
+   }
+
+   protected boolean validateContext(ControllerContext context)
+   {
+      return true;
+   }
+
+   protected void installAction(ControllerContext context) throws Throwable
+   {
+      KernelController controller = (KernelController)context.getController();
+      KernelMetaDataRepository repository = controller.getKernel().getMetaDataRepository();
+      ScopeKey scopeKey = context.getScopeInfo().getInstallScope();
+      if (scopeKey != null)
+      {
+         MutableMetaDataRepository mmdr = repository.getMetaDataRepository();
+         MetaDataRetrieval mdr = mmdr.getMetaDataRetrieval(scopeKey);
+         if (mdr == null)
+         {
+            mdr = new MemoryMetaDataLoader(scopeKey);
+            mmdr.addMetaDataRetrieval(mdr);
+         }
+         MetaDataItem<ScopedKernelController> controllerItem = mdr.retrieveMetaData(ScopedKernelController.class);
+         ScopedKernelController scopedController;
+         if (controllerItem != null)
+            scopedController = controllerItem.getValue();
+         else
+            throw new IllegalArgumentException("Scoped controller should exist: " + scopeKey);
+
+         scopedController.addScopedControllerContext(context);
+      }
+   }
+
+   protected void uninstallAction(ControllerContext context)
+   {
+      Controller controller = context.getController();
+      if (controller instanceof ScopedKernelController == false)
+         throw new IllegalArgumentException("Current controller should be scoped: " + controller);
+
+      ScopedKernelController scopedController = (ScopedKernelController)controller;
+      scopedController.removeScopedControllerContext(context);
+   }
+}
\ No newline at end of file

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/PreInstallAction.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/PreInstallAction.java	2008-06-30 13:08:09 UTC (rev 75213)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/PreInstallAction.java	2008-06-30 13:13:25 UTC (rev 75214)
@@ -121,6 +121,10 @@
          KernelControllerContext context,
          KernelMetaDataRepository repository) throws Throwable
    {
+      ScopeKey scopeKey = context.getScopeInfo().getInstallScope();
+      if (scopeKey != null)
+         return scopeKey;
+
       MetaData retrieval = repository.getMetaData(context);
       if (retrieval != null)
       {
@@ -193,10 +197,10 @@
                   throw new IllegalArgumentException("Underlying controller not AbstractController instance!");
                parentController = (AbstractController) controller;
             }
-            scopedController = new ScopedKernelController(controller.getKernel(), parentController);
+            scopedController = new ScopedKernelController(controller.getKernel(), parentController, scopeKey);
             ((MutableMetaData)mdr).addMetaData(scopedController, ScopedKernelController.class);
          }
-         scopedController.addControllerContext(context);
+         scopedController.addScopedControllerContext(context);
       }
    }
 
@@ -220,7 +224,7 @@
             throw new IllegalArgumentException("Expecting ScopedKernelController instance in scope:" + scopeKey);
          }
          ScopedKernelController scopedController = controllerItem.getValue();
-         scopedController.removeControllerContext(context);
+         scopedController.removeScopedControllerContext(context);
          if (scopedController.isActive() == false)
          {
             try

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ScopedKernelController.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ScopedKernelController.java	2008-06-30 13:08:09 UTC (rev 75213)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ScopedKernelController.java	2008-06-30 13:13:25 UTC (rev 75214)
@@ -24,10 +24,14 @@
 import java.util.HashSet;
 import java.util.Properties;
 import java.util.Set;
+import java.util.Map;
+import java.util.HashMap;
 
 import org.jboss.dependency.plugins.AbstractController;
+import org.jboss.dependency.plugins.action.ControllerContextAction;
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.ScopeInfo;
 import org.jboss.kernel.Kernel;
 import org.jboss.kernel.KernelFactory;
 import org.jboss.kernel.plugins.bootstrap.basic.BasicKernelInitializer;
@@ -43,6 +47,7 @@
 import org.jboss.kernel.spi.metadata.KernelMetaDataRepository;
 import org.jboss.kernel.spi.registry.KernelRegistryEntry;
 import org.jboss.kernel.spi.registry.KernelRegistryPlugin;
+import org.jboss.metadata.spi.scope.ScopeKey;
 
 /**
  * Scoped Kernel controller.
@@ -51,12 +56,17 @@
  */
 public class ScopedKernelController extends AbstractKernelController
 {
+   /** Alias scope action instance */
+   private static final AliasScopeAction ALIAS_SCOPE_ACTION = new AliasScopeAction();
+
    protected Kernel parentKernel;
+   private ScopeKey scopeKey;
 
-   public ScopedKernelController(Kernel parentKernel, AbstractController parentController) throws Exception
+   public ScopedKernelController(Kernel parentKernel, AbstractController parentController, ScopeKey scopeKey) throws Exception
    {
       super();
       this.parentKernel = parentKernel;
+      this.scopeKey = scopeKey;
       if (parentKernel.getController() instanceof AbstractController == false)
          throw new IllegalArgumentException("Underlying controller not AbstractController instance!");
       setUnderlyingController((AbstractController)parentKernel.getController());
@@ -67,6 +77,16 @@
    }
 
    /**
+    * Get scope key.
+    *
+    * @return the scope key
+    */
+   protected ScopeKey getScopeKey()
+   {
+      return scopeKey;
+   }
+
+   /**
     * Is parent controller a kernel controller.
     *
     * @return true if parent controller in kernel controller
@@ -93,12 +113,12 @@
 
    // Scoped helper methods 
 
-   void addControllerContext(KernelControllerContext context)
+   void addScopedControllerContext(ControllerContext context)
    {
       super.addControllerContext(context);
    }
 
-   void removeControllerContext(KernelControllerContext context)
+   void removeScopedControllerContext(ControllerContext context)
    {
       super.removeControllerContext(context);
    }
@@ -116,6 +136,19 @@
 
    // Controller methods
 
+   protected Map<ControllerState, ControllerContextAction> createAliasActions()
+   {
+      Map<ControllerState, ControllerContextAction> map = new HashMap<ControllerState, ControllerContextAction>(super.createAliasActions());
+      map.put(ControllerState.PRE_INSTALL, ALIAS_SCOPE_ACTION);
+      return map;
+   }
+
+   protected void preAliasInstall(ControllerContext aliasContext)
+   {
+      ScopeInfo scopeInfo = aliasContext.getScopeInfo();
+      scopeInfo.setInstallScope(scopeKey);
+   }
+
    public ControllerContext getContext(Object name, ControllerState state)
    {
       ControllerContext context = super.getContext(name, state);

Modified: projects/microcontainer/trunk/kernel/src/resources/tests/org/jboss/test/kernel/deployment/test/ScopingAliasTestCase.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/tests/org/jboss/test/kernel/deployment/test/ScopingAliasTestCase.xml	2008-06-30 13:08:09 UTC (rev 75213)
+++ projects/microcontainer/trunk/kernel/src/resources/tests/org/jboss/test/kernel/deployment/test/ScopingAliasTestCase.xml	2008-06-30 13:13:25 UTC (rev 75214)
@@ -33,13 +33,6 @@
       </constructor>
    </bean>
 
-   <bean name="simple2" class="org.jboss.test.kernel.deployment.support.SimpleBeanImpl">
-      <annotation>@org.jboss.beans.metadata.api.annotations.Aliases(value={"simple"})</annotation>
-      <constructor>
-         <parameter>main</parameter>
-      </constructor>
-   </bean>
-
    <bean name="simple3" class="org.jboss.test.kernel.deployment.support.SimpleBeanImpl">
       <annotation>@org.jboss.beans.metadata.api.annotations.Aliases(value={"simple"})</annotation>
       <annotation>@org.jboss.metadata.plugins.scope.ApplicationScope("testApp")</annotation>
@@ -49,5 +42,11 @@
       </constructor>
    </bean>
 
+  <bean name="simple-main" class="org.jboss.test.kernel.deployment.support.SimpleBeanImpl">
+     <annotation>@org.jboss.beans.metadata.api.annotations.Aliases(value={"simple"})</annotation>
+     <constructor>
+        <parameter>main</parameter>
+     </constructor>
+  </bean>
 
 </deployment>

Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/dependency/test/PlainAliasAnnotationTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/dependency/test/PlainAliasAnnotationTestCase.java	2008-06-30 13:08:09 UTC (rev 75213)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/dependency/test/PlainAliasAnnotationTestCase.java	2008-06-30 13:13:25 UTC (rev 75214)
@@ -22,11 +22,12 @@
 package org.jboss.test.kernel.dependency.test;
 
 import junit.framework.Test;
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
 import org.jboss.beans.metadata.spi.BeanMetaData;
-import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
-import org.jboss.test.kernel.dependency.support.AliasSimpleBeanImpl;
+import org.jboss.dependency.spi.Controller;
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
+import org.jboss.test.kernel.dependency.support.AliasSimpleBeanImpl;
 
 /**
  * Plain alias tests.
@@ -56,7 +57,7 @@
       setBeanMetaDatas(new BeanMetaData[]{new AbstractBeanMetaData("OriginalBean", AliasSimpleBeanImpl.class.getName())});
    }
 
-   protected void checkDirectAlias() throws Throwable
+   protected void checkDirectAlias(Controller controller) throws Throwable
    {
       // not yet registered
    }

Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/dependency/test/PlainAliasTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/dependency/test/PlainAliasTestCase.java	2008-06-30 13:08:09 UTC (rev 75213)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/dependency/test/PlainAliasTestCase.java	2008-06-30 13:13:25 UTC (rev 75214)
@@ -64,13 +64,18 @@
       return getUtil().getContext(name);
    }
 
+   protected Controller getController()
+   {
+      return getUtil().getKernel().getController();
+   }
+
    public void testPlainAliasCorrectOrder() throws Throwable
    {
       buildMetaData();
 
       ControllerContext context1 = assertInstall(0, "OriginalBean");
       ControllerContext context2 = getAlias("MyAlias");
-      assertContext("MyAlias_Alias");
+      assertContext("MyAlias_Alias_" + getController());
 
       SimpleBean bean1 = (SimpleBean) context1.getTarget();
       assertNotNull(bean1);
@@ -88,12 +93,12 @@
       ControllerContext context1 = getAlias("MyAlias");
       assertNull(context1);
 
-      checkDirectAlias();
+      checkDirectAlias(getController());
 
       ControllerContext context2 = assertInstall(0, "OriginalBean");
       context1 = assertContext("MyAlias");
       assertEquals(ControllerState.INSTALLED, context1.getState());
-      getDirectAlias(ControllerState.INSTALLED);
+      getDirectAlias(ControllerState.INSTALLED, getController());
 
       SimpleBean bean1 = (SimpleBean) context2.getTarget();
       assertNotNull(bean1);
@@ -103,14 +108,14 @@
       assertEquals(alias, context1);      
    }
 
-   protected void checkDirectAlias() throws Throwable
+   protected void checkDirectAlias(Controller controller) throws Throwable
    {
-      getDirectAlias(ControllerState.START).getState();
+      getDirectAlias(ControllerState.START, controller).getState();
    }
 
-   protected ControllerContext getDirectAlias(ControllerState state) throws Throwable
+   protected ControllerContext getDirectAlias(ControllerState state, Controller controller) throws Throwable
    {
-      return assertContext("MyAlias_Alias", state);
+      return assertContext("MyAlias_Alias_" + controller, state);
    }
 
    public void testPlainAliasReinstall() throws Throwable
@@ -128,7 +133,7 @@
       ControllerContext alias = assertContext("MyAlias");
       assertEquals(alias, context1);
 
-      ControllerContext directAlias = assertContext("MyAlias_Alias");
+      ControllerContext directAlias = assertContext("MyAlias_Alias_" + getController());
       assertEquals(ControllerState.INSTALLED, directAlias.getState());
 
       assertUninstall("OriginalBean");
@@ -139,11 +144,11 @@
       assertNull(getUtil().getContext("MyAlias"));
 
       context1 = assertInstall(0, "OriginalBean");
-      directAlias = assertContext("MyAlias_Alias");
+      directAlias = assertContext("MyAlias_Alias_" + getController());
       assertEquals(ControllerState.INSTALLED, directAlias.getState());
       assertEquals(context1, assertContext("MyAlias"));
 
-      assertUninstall("MyAlias_Alias");
+      assertUninstall("MyAlias_Alias_" + getController());
       assertEquals(ControllerState.ERROR, directAlias.getState());
       assertEquals(ControllerState.INSTALLED, context1.getState());
       assertNull(getUtil().getContext("MyAlias"));
@@ -171,8 +176,7 @@
       setBeanMetaDatas(new BeanMetaData[]{metaData1});
    }
 
-   protected void installAlias()
-         throws Throwable
+   protected void installAlias() throws Throwable
    {
       Controller controller = getUtil().getKernel().getController();
       controller.addAlias("MyAlias", "OriginalBean");




More information about the jboss-cvs-commits mailing list