[jboss-cvs] JBossAS SVN: r75298 - in projects/microcontainer/trunk: kernel/src/main/org/jboss/kernel/plugins/dependency and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Jul 2 04:18:05 EDT 2008
Author: alesj
Date: 2008-07-02 04:18:05 -0400 (Wed, 02 Jul 2008)
New Revision: 75298
Added:
projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractAliasControllerContext.java
projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AliasControllerContext.java
projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/ScopedAliasControllerContext.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractScopeAction.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/InstallExistingScopeAction.java
Modified:
projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractController.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelController.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/InstallScopeAction.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
Log:
[JBMICROCONT-309]; refactoring in order to allow scoped alias controller context.
Added: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractAliasControllerContext.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractAliasControllerContext.java (rev 0)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractAliasControllerContext.java 2008-07-02 08:18:05 UTC (rev 75298)
@@ -0,0 +1,78 @@
+/*
+* 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.dependency.plugins;
+
+import org.jboss.dependency.spi.ControllerContextActions;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.DependencyInfo;
+import org.jboss.util.JBossStringBuilder;
+
+/**
+ * Abstract alias controller context.
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public abstract class AbstractAliasControllerContext extends AbstractControllerContext implements AliasControllerContext
+{
+ private Object alias;
+ private Object original;
+
+ public AbstractAliasControllerContext(Object alias, String id, Object original, ControllerContextActions actions)
+ {
+ super(alias + "_Alias_" + id, actions);
+ if (alias == null)
+ throw new IllegalArgumentException("Null alias");
+ if (id == null)
+ throw new IllegalArgumentException("Null id");
+ if (original == null)
+ throw new IllegalArgumentException("Null original");
+
+ this.alias = alias;
+ this.original = original;
+ DependencyInfo info = getDependencyInfo();
+ info.addIDependOn(new AbstractDependencyItem(getName(), original, ControllerState.INSTALLED, ControllerState.INSTANTIATED));
+ }
+
+ public Object getAlias()
+ {
+ return alias;
+ }
+
+ public Object getOriginal()
+ {
+ return original;
+ }
+
+ public void toString(JBossStringBuilder buffer)
+ {
+ buffer.append("alias=").append(alias);
+ buffer.append(" original=").append(original).append(" ");
+ super.toString(buffer);
+ }
+
+ public void toShortString(JBossStringBuilder buffer)
+ {
+ buffer.append("alias=").append(alias);
+ buffer.append(" original=").append(original).append(" ");
+ super.toShortString(buffer);
+ }
+}
\ No newline at end of file
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-07-02 07:37:00 UTC (rev 75297)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractController.java 2008-07-02 08:18:05 UTC (rev 75298)
@@ -48,7 +48,6 @@
import org.jboss.dependency.spi.DependencyItem;
import org.jboss.dependency.spi.LifecycleCallbackItem;
import org.jboss.util.JBossObject;
-import org.jboss.util.JBossStringBuilder;
/**
* Abstract controller.
@@ -488,7 +487,7 @@
{
Map<ControllerState, ControllerContextAction> map = createAliasActions();
ControllerContextActions actions = new AbstractControllerContextActions(map);
- AliasControllerContext context = new AliasControllerContext(alias, original, actions);
+ AliasControllerContext context = new InnerAliasControllerContext(alias, original, actions);
preAliasInstall(context);
install(context);
// is alias in error
@@ -1667,43 +1666,12 @@
// --- alias dependency
- private class AliasControllerContext extends AbstractControllerContext
+ private class InnerAliasControllerContext extends AbstractAliasControllerContext
{
- private Object alias;
- private Object original;
-
- public AliasControllerContext(Object alias, Object original, ControllerContextActions actions)
+ private InnerAliasControllerContext(Object alias, Object original, ControllerContextActions actions)
{
- super(alias + "_Alias_" + getId(), actions);
- this.alias = alias;
- this.original = original;
- DependencyInfo info = getDependencyInfo();
- info.addIDependOn(new AbstractDependencyItem(getName(), original, ControllerState.INSTALLED, ControllerState.INSTANTIATED));
+ super(alias, getId(), original, actions);
}
-
- public Object getAlias()
- {
- return alias;
- }
-
- public Object getOriginal()
- {
- return original;
- }
-
- public void toString(JBossStringBuilder buffer)
- {
- buffer.append("alias=").append(alias);
- buffer.append(" original=").append(original).append(" ");
- super.toString(buffer);
- }
-
- public void toShortString(JBossStringBuilder buffer)
- {
- buffer.append("alias=").append(alias);
- buffer.append(" original=").append(original).append(" ");
- super.toShortString(buffer);
- }
}
private class AliasControllerContextAction extends SimpleControllerContextAction<AliasControllerContext>
@@ -1734,7 +1702,6 @@
try
{
ControllerContext lookup = getRegisteredControllerContext(original, true);
- // todo - do we need to add it to context.aliases?
registerControllerContext(alias, lookup);
if (log.isTraceEnabled())
log.trace("Added alias " + alias + " for context " + context);
Added: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AliasControllerContext.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AliasControllerContext.java (rev 0)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AliasControllerContext.java 2008-07-02 08:18:05 UTC (rev 75298)
@@ -0,0 +1,46 @@
+/*
+* 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.dependency.plugins;
+
+import org.jboss.dependency.spi.ControllerContext;
+
+/**
+ * Alias controller context.
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public interface AliasControllerContext extends ControllerContext
+{
+ /**
+ * Get the alias.
+ *
+ * @return the alias to register
+ */
+ Object getAlias();
+
+ /**
+ * Get the original.
+ *
+ * @return the original to map to
+ */
+ Object getOriginal();
+}
Added: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/ScopedAliasControllerContext.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/ScopedAliasControllerContext.java (rev 0)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/ScopedAliasControllerContext.java 2008-07-02 08:18:05 UTC (rev 75298)
@@ -0,0 +1,78 @@
+/*
+* 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.dependency.plugins;
+
+import java.util.Map;
+
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.ControllerContextActions;
+import org.jboss.dependency.spi.ScopeInfo;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.plugins.action.ControllerContextAction;
+import org.jboss.metadata.spi.scope.ScopeKey;
+
+/**
+ * Scoped alias controller context.
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class ScopedAliasControllerContext extends AbstractAliasControllerContext
+{
+ private ScopedAliasControllerContext(Object alias, Object original, ScopeKey scopeKey, ControllerContextActions actions)
+ {
+ super(alias, scopeKey.toString(), original, actions);
+ ScopeInfo scopeInfo = getScopeInfo();
+ scopeInfo.setInstallScope(scopeKey);
+ }
+
+ /**
+ * Add scoped alias.
+ *
+ * @param alias the alias
+ * @param original the original
+ * @param scopeKey the scope key
+ * @param controller the controller
+ * @throws Throwable for any error
+ */
+ public static void addAlias(Object alias, Object original, ScopeKey scopeKey, Controller controller) throws Throwable
+ {
+ if (controller instanceof AbstractController == false)
+ throw new IllegalArgumentException("Can only handle AbstractController.");
+
+ AbstractController ac = (AbstractController)controller;
+ Map<ControllerState, ControllerContextAction> map = ac.createAliasActions();
+ ControllerContextActions actions = new AbstractControllerContextActions(map);
+ controller.install(new ScopedAliasControllerContext(alias, original, scopeKey, actions));
+ }
+
+ /**
+ * Remove alias.
+ *
+ * @param alias the alias
+ * @param scopeKey the scope key
+ * @param controller the controller
+ */
+ public static void removeAlias(Object alias, ScopeKey scopeKey, Controller controller)
+ {
+ controller.uninstall(alias + "_Alias_" + scopeKey);
+ }
+}
\ No newline at end of file
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelController.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelController.java 2008-07-02 07:37:00 UTC (rev 75297)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelController.java 2008-07-02 08:18:05 UTC (rev 75298)
@@ -26,12 +26,14 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.HashMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import org.jboss.beans.metadata.spi.BeanMetaData;
import org.jboss.beans.metadata.spi.SupplyMetaData;
import org.jboss.dependency.plugins.ScopedController;
+import org.jboss.dependency.plugins.action.ControllerContextAction;
import org.jboss.dependency.spi.ControllerContext;
import org.jboss.dependency.spi.ControllerState;
import org.jboss.kernel.Kernel;
@@ -76,6 +78,13 @@
{
}
+ protected Map<ControllerState, ControllerContextAction> createAliasActions()
+ {
+ Map<ControllerState, ControllerContextAction> map = new HashMap<ControllerState, ControllerContextAction>(super.createAliasActions());
+ map.put(ControllerState.PRE_INSTALL, InstallScopeAction.INSTANCE);
+ return map;
+ }
+
/**
* Create event emitter.
*
Copied: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractScopeAction.java (from rev 75218, projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/InstallScopeAction.java)
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractScopeAction.java (rev 0)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractScopeAction.java 2008-07-02 08:18:05 UTC (rev 75298)
@@ -0,0 +1,60 @@
+/*
+* 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.ControllerContext;
+import org.jboss.dependency.spi.ScopeInfo;
+import org.jboss.metadata.spi.scope.ScopeKey;
+
+/**
+ * Abstract scope action.
+ *
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
+ */
+public abstract class AbstractScopeAction extends SimpleControllerContextAction<ControllerContext>
+{
+ protected ControllerContext contextCast(ControllerContext context)
+ {
+ return context;
+ }
+
+ protected boolean validateContext(ControllerContext context)
+ {
+ return true;
+ }
+
+ /**
+ * Get install scope key.
+ *
+ * @param context the context
+ * @return install scope key
+ */
+ protected ScopeKey getScopeKey(ControllerContext context)
+ {
+ ScopeInfo scopeInfo = context.getScopeInfo();
+ if (scopeInfo != null)
+ return scopeInfo.getInstallScope();
+
+ return null;
+ }
+}
\ No newline at end of file
Copied: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/InstallExistingScopeAction.java (from rev 75218, projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/InstallScopeAction.java)
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/InstallExistingScopeAction.java (rev 0)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/InstallExistingScopeAction.java 2008-07-02 08:18:05 UTC (rev 75298)
@@ -0,0 +1,83 @@
+/*
+* 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.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.spi.repository.MutableMetaDataRepository;
+import org.jboss.metadata.spi.retrieval.MetaDataItem;
+import org.jboss.metadata.spi.retrieval.MetaDataRetrieval;
+import org.jboss.metadata.spi.scope.ScopeKey;
+
+/**
+ * Install into existing scope action.
+ *
+ * It expects scoped controller already to be present
+ * under the right scope key.
+ *
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
+ */
+public class InstallExistingScopeAction extends AbstractScopeAction
+{
+ public static final InstallExistingScopeAction INSTANCE = new InstallExistingScopeAction();
+
+ protected void installAction(ControllerContext context) throws Throwable
+ {
+ ScopeKey scopeKey = getScopeKey(context);
+ if (scopeKey != null)
+ {
+ Controller controller = context.getController();
+ if (controller instanceof KernelController == false)
+ throw new IllegalArgumentException("Can only handle kernel controller: " + controller);
+
+ KernelController kernelController = (KernelController)controller;
+ KernelMetaDataRepository repository = kernelController.getKernel().getMetaDataRepository();
+
+ MutableMetaDataRepository mmdr = repository.getMetaDataRepository();
+ MetaDataRetrieval mdr = mmdr.getMetaDataRetrieval(scopeKey);
+ if (mdr == null)
+ throw new IllegalArgumentException("No metadata retrieval for scope: " + scopeKey);
+
+ MetaDataItem<ScopedKernelController> controllerItem = mdr.retrieveMetaData(ScopedKernelController.class);
+ if (controllerItem == null)
+ throw new IllegalArgumentException("Scoped controller should exist: " + scopeKey);
+
+ ScopedKernelController scopedController = controllerItem.getValue();
+ scopedController.addScopedControllerContext(context);
+ }
+ }
+
+ protected void uninstallAction(ControllerContext context)
+ {
+ if (getScopeKey(context) != null)
+ {
+ 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/InstallScopeAction.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/InstallScopeAction.java 2008-07-02 07:37:00 UTC (rev 75297)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/InstallScopeAction.java 2008-07-02 08:18:05 UTC (rev 75298)
@@ -21,12 +21,13 @@
*/
package org.jboss.kernel.plugins.dependency;
-import org.jboss.dependency.plugins.action.SimpleControllerContextAction;
+import org.jboss.dependency.plugins.AbstractController;
import org.jboss.dependency.spi.Controller;
import org.jboss.dependency.spi.ControllerContext;
-import org.jboss.dependency.spi.ScopeInfo;
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.MutableMetaData;
import org.jboss.metadata.spi.repository.MutableMetaDataRepository;
import org.jboss.metadata.spi.retrieval.MetaDataItem;
import org.jboss.metadata.spi.retrieval.MetaDataRetrieval;
@@ -34,39 +35,13 @@
/**
* Install scope action.
- *
- * It expects scoped controller already to be present
- * under the right scope key.
*
* @author <a href="ales.justin at jboss.com">Ales Justin</a>
*/
-public class InstallScopeAction extends SimpleControllerContextAction<ControllerContext>
+public class InstallScopeAction extends AbstractScopeAction
{
- protected ControllerContext contextCast(ControllerContext context)
- {
- return context;
- }
+ public static final InstallScopeAction INSTANCE = new InstallScopeAction();
- protected boolean validateContext(ControllerContext context)
- {
- return true;
- }
-
- /**
- * Get install scope key.
- *
- * @param context the context
- * @return install scope key
- */
- protected ScopeKey getScopeKey(ControllerContext context)
- {
- ScopeInfo scopeInfo = context.getScopeInfo();
- if (scopeInfo != null)
- return scopeInfo.getInstallScope();
-
- return null;
- }
-
protected void installAction(ControllerContext context) throws Throwable
{
ScopeKey scopeKey = getScopeKey(context);
@@ -82,27 +57,83 @@
MutableMetaDataRepository mmdr = repository.getMetaDataRepository();
MetaDataRetrieval mdr = mmdr.getMetaDataRetrieval(scopeKey);
if (mdr == null)
- throw new IllegalArgumentException("No metadata retrieval for scope: " + scopeKey);
-
+ {
+ mdr = new MemoryMetaDataLoader(scopeKey);
+ mmdr.addMetaDataRetrieval(mdr);
+ }
MetaDataItem<ScopedKernelController> controllerItem = mdr.retrieveMetaData(ScopedKernelController.class);
- if (controllerItem == null)
- throw new IllegalArgumentException("Scoped controller should exist: " + scopeKey);
-
- ScopedKernelController scopedController = controllerItem.getValue();
+ ScopedKernelController scopedController;
+ if (controllerItem != null)
+ {
+ scopedController = controllerItem.getValue();
+ }
+ else
+ {
+ AbstractController parentController = null;
+ ScopeKey parentKey = scopeKey.getParent();
+ while (parentController == null && parentKey != null)
+ {
+ MetaDataRetrieval pmdr = mmdr.getMetaDataRetrieval(parentKey);
+ if (pmdr != null)
+ {
+ MetaDataItem<ScopedKernelController> pci = pmdr.retrieveMetaData(ScopedKernelController.class);
+ if (pci != null)
+ {
+ parentController = pci.getValue();
+ }
+ }
+ parentKey = parentKey.getParent();
+ }
+ if (parentController == null)
+ {
+ if (kernelController instanceof AbstractController == false)
+ throw new IllegalArgumentException("Underlying controller not AbstractController instance!");
+ parentController = (AbstractController)kernelController;
+ }
+ scopedController = new ScopedKernelController(kernelController.getKernel(), parentController, scopeKey);
+ ((MutableMetaData)mdr).addMetaData(scopedController, ScopedKernelController.class);
+ }
scopedController.addScopedControllerContext(context);
}
}
protected void uninstallAction(ControllerContext context)
{
- if (getScopeKey(context) != null)
+ ScopeKey scopeKey = getScopeKey(context);
+ if (scopeKey != null)
{
Controller controller = context.getController();
- if (controller instanceof ScopedKernelController == false)
- throw new IllegalArgumentException("Current controller should be scoped: " + controller);
+ if (controller instanceof KernelController == false)
+ throw new IllegalArgumentException("Can only handle kernel controller: " + controller);
- ScopedKernelController scopedController = (ScopedKernelController)controller;
+ KernelController kernelController = (KernelController)controller;
+ KernelMetaDataRepository repository = kernelController.getKernel().getMetaDataRepository();
+
+ // find scoped controller
+ MutableMetaDataRepository mmdr = repository.getMetaDataRepository();
+ MetaDataRetrieval mdr = mmdr.getMetaDataRetrieval(scopeKey);
+ if (mdr == null)
+ {
+ throw new IllegalArgumentException("Expecting MetaDataRetrieval instance in scope: " + scopeKey);
+ }
+ MetaDataItem<ScopedKernelController> controllerItem = mdr.retrieveMetaData(ScopedKernelController.class);
+ if (controllerItem == null)
+ {
+ throw new IllegalArgumentException("Expecting ScopedKernelController instance in scope:" + scopeKey);
+ }
+ ScopedKernelController scopedController = controllerItem.getValue();
scopedController.removeScopedControllerContext(context);
+ if (scopedController.isActive() == false)
+ {
+ try
+ {
+ ((MutableMetaData)mdr).removeMetaData(ScopedKernelController.class);
+ }
+ finally
+ {
+ scopedController.release();
+ }
+ }
}
}
}
\ 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-07-02 07:37:00 UTC (rev 75297)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/PreInstallAction.java 2008-07-02 08:18:05 UTC (rev 75298)
@@ -206,11 +206,11 @@
protected void removeScoping(KernelControllerContext context) throws Throwable
{
- KernelController controller = (KernelController)context.getController();
- KernelMetaDataRepository repository = controller.getKernel().getMetaDataRepository();
ScopeKey scopeKey = context.getScopeInfo().getInstallScope();
if (scopeKey != null)
{
+ KernelController controller = (KernelController)context.getController();
+ KernelMetaDataRepository repository = controller.getKernel().getMetaDataRepository();
// find scoped controller
MutableMetaDataRepository mmdr = repository.getMetaDataRepository();
MetaDataRetrieval mdr = mmdr.getMetaDataRetrieval(scopeKey);
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-07-02 07:37:00 UTC (rev 75297)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ScopedKernelController.java 2008-07-02 08:18:05 UTC (rev 75298)
@@ -56,9 +56,6 @@
*/
public class ScopedKernelController extends AbstractKernelController
{
- /** Alias scope action instance */
- private static final InstallScopeAction ALIAS_SCOPE_ACTION = new InstallScopeAction();
-
protected Kernel parentKernel;
private ScopeKey scopeKey;
@@ -139,7 +136,7 @@
protected Map<ControllerState, ControllerContextAction> createAliasActions()
{
Map<ControllerState, ControllerContextAction> map = new HashMap<ControllerState, ControllerContextAction>(super.createAliasActions());
- map.put(ControllerState.PRE_INSTALL, ALIAS_SCOPE_ACTION);
+ map.put(ControllerState.PRE_INSTALL, InstallExistingScopeAction.INSTANCE);
return map;
}
More information about the jboss-cvs-commits
mailing list