[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