[jboss-cvs] JBossAS SVN: r63349 - in projects/microcontainer/trunk: container/src/main/org/jboss/reflect/plugins/javassist and 5 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Jun 5 10:09:19 EDT 2007
Author: adrian at jboss.org
Date: 2007-06-05 10:09:19 -0400 (Tue, 05 Jun 2007)
New Revision: 63349
Modified:
projects/microcontainer/trunk/container/src/main/org/jboss/metadata/spi/repository/MutableMetaDataRepository.java
projects/microcontainer/trunk/container/src/main/org/jboss/reflect/plugins/javassist/JavassistArrayInfoImpl.java
projects/microcontainer/trunk/container/src/main/org/jboss/util/collection/temp/WeakTypeCache.java
projects/microcontainer/trunk/container/src/main/org/jboss/util/collection/temp/WeakValueHashMap.java
projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractCallbackItem.java
projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractController.java
projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractDependencyInfo.java
projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AttributeCallbackItem.java
projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/OwnerCallbackItem.java
projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/SingleCallbackItem.java
projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/spi/Controller.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractNamedAliasMetaData.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelControllerContext.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/KernelControllerContextAction.java
Log:
Add support for "shutdown" to the container api.
Also some javadoc and source-code tidyup.
Modified: projects/microcontainer/trunk/container/src/main/org/jboss/metadata/spi/repository/MutableMetaDataRepository.java
===================================================================
--- projects/microcontainer/trunk/container/src/main/org/jboss/metadata/spi/repository/MutableMetaDataRepository.java 2007-06-05 13:56:47 UTC (rev 63348)
+++ projects/microcontainer/trunk/container/src/main/org/jboss/metadata/spi/repository/MutableMetaDataRepository.java 2007-06-05 14:09:19 UTC (rev 63349)
@@ -44,7 +44,6 @@
* Remove a meta data retrieval for the given scope
*
* @param key the key
- * @param retrieval the retrieval
* @return any previous retrieval
*/
MetaDataRetrieval removeMetaDataRetrieval(ScopeKey key);
Modified: projects/microcontainer/trunk/container/src/main/org/jboss/reflect/plugins/javassist/JavassistArrayInfoImpl.java
===================================================================
--- projects/microcontainer/trunk/container/src/main/org/jboss/reflect/plugins/javassist/JavassistArrayInfoImpl.java 2007-06-05 13:56:47 UTC (rev 63348)
+++ projects/microcontainer/trunk/container/src/main/org/jboss/reflect/plugins/javassist/JavassistArrayInfoImpl.java 2007-06-05 14:09:19 UTC (rev 63349)
@@ -67,6 +67,7 @@
* @param factory the factory
* @param ctClass the ctClass
* @param clazz the class
+ * @param componentType the component type
*/
JavassistArrayInfoImpl(JavassistTypeInfoFactoryImpl factory, CtClass ctClass, Class<? extends Object> clazz, TypeInfo componentType)
{
Modified: projects/microcontainer/trunk/container/src/main/org/jboss/util/collection/temp/WeakTypeCache.java
===================================================================
--- projects/microcontainer/trunk/container/src/main/org/jboss/util/collection/temp/WeakTypeCache.java 2007-06-05 13:56:47 UTC (rev 63348)
+++ projects/microcontainer/trunk/container/src/main/org/jboss/util/collection/temp/WeakTypeCache.java 2007-06-05 14:09:19 UTC (rev 63349)
@@ -189,7 +189,7 @@
/**
* Put a result into the cache
*
- * @param clazz the class
+ * @param type the type
* @param result the value
*/
private void put(ParameterizedType type, T result)
Modified: projects/microcontainer/trunk/container/src/main/org/jboss/util/collection/temp/WeakValueHashMap.java
===================================================================
--- projects/microcontainer/trunk/container/src/main/org/jboss/util/collection/temp/WeakValueHashMap.java 2007-06-05 13:56:47 UTC (rev 63348)
+++ projects/microcontainer/trunk/container/src/main/org/jboss/util/collection/temp/WeakValueHashMap.java 2007-06-05 14:09:19 UTC (rev 63349)
@@ -240,6 +240,9 @@
/**
* WeakValueRef.
+ *
+ * @param <K> the key type
+ * @param <V> the value type
*/
private static class WeakValueRef<K, V> extends WeakReference<V> implements Map.Entry<K, V>
{
@@ -249,6 +252,8 @@
/**
* Safely create a new WeakValueRef
*
+ * @param <K> the key type
+ * @param <V> the value type
* @param key the key
* @param val the value
* @param q the reference queue
Modified: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractCallbackItem.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractCallbackItem.java 2007-06-05 13:56:47 UTC (rev 63348)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractCallbackItem.java 2007-06-05 14:09:19 UTC (rev 63349)
@@ -31,6 +31,7 @@
/**
* Abstract callback item.
*
+ * @param <T> the callback type
* @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
*/
public abstract class AbstractCallbackItem<T> extends JBossObject implements CallbackItem<T>
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 2007-06-05 13:56:47 UTC (rev 63348)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractController.java 2007-06-05 14:09:19 UTC (rev 63349)
@@ -21,13 +21,15 @@
*/
package org.jboss.dependency.plugins;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.jboss.dependency.spi.CallbackItem;
@@ -39,7 +41,6 @@
import org.jboss.dependency.spi.DependencyItem;
import org.jboss.dependency.spi.LifecycleCallbackItem;
import org.jboss.util.JBossObject;
-import org.jboss.util.collection.CollectionsFactory;
/**
* Abstract controller.
@@ -52,23 +53,26 @@
/** The lock */
private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
+ /** Whether we are shutdown */
+ private boolean shutdown = false;
+
/** The states in order List<ControllerState> */
- private List<ControllerState> states = CollectionsFactory.createCopyOnWriteList();
+ private List<ControllerState> states = new CopyOnWriteArrayList<ControllerState>();;
/** All contexts by name Map<Object, ControllerContext> */
- private Map<Object, ControllerContext> allContexts = CollectionsFactory.createConcurrentReaderMap();
+ private Map<Object, ControllerContext> allContexts = new ConcurrentHashMap<Object, ControllerContext>();
/** The contexts by state Map<ControllerState, Set<ControllerContext>> */
- private Map<ControllerState, Set<ControllerContext>> contextsByState = CollectionsFactory.createConcurrentReaderMap();
+ private Map<ControllerState, Set<ControllerContext>> contextsByState = new ConcurrentHashMap<ControllerState, Set<ControllerContext>>();;
/** The error contexts Map<Name, ControllerContext> */
- private Map<Object, ControllerContext> errorContexts = CollectionsFactory.createConcurrentReaderMap();
+ private Map<Object, ControllerContext> errorContexts = new ConcurrentHashMap<Object, ControllerContext>();;
/** The contexts that are currently being installed */
- private Set<ControllerContext> installing = CollectionsFactory.createCopyOnWriteSet();
+ private Set<ControllerContext> installing = new CopyOnWriteArraySet<ControllerContext>();;
/** The child controllers */
- private Set<AbstractController> childControllers = CollectionsFactory.createCopyOnWriteSet();
+ private Set<AbstractController> childControllers = new CopyOnWriteArraySet<AbstractController>();;
/** The callback items */
private Map<Object, Set<CallbackItem>> installCallbacks = new ConcurrentHashMap<Object, Set<CallbackItem>>();
@@ -94,6 +98,84 @@
addState(ControllerState.INSTALLED, null);
}
+ public boolean isShutdown()
+ {
+ lockWrite();
+ try
+ {
+ return shutdown;
+ }
+ finally
+ {
+ unlockWrite();
+ }
+ }
+
+ /**
+ * Check whether the controller is shutdown
+ *
+ * @throws IllegalStateException when already shutdown
+ */
+ public void checkShutdown()
+ {
+ lockWrite();
+ try
+ {
+ if (shutdown)
+ throw new IllegalStateException("Already shutdown");
+ }
+ finally
+ {
+ unlockWrite();
+ }
+ }
+
+ // TODO need tests for shutdown
+ public void shutdown()
+ {
+ lockWrite();
+ try
+ {
+ Set<AbstractController> children = getControllers();
+ if (children != null && children.isEmpty() == false)
+ {
+ for (AbstractController child : children)
+ {
+ try
+ {
+ child.shutdown();
+ }
+ catch (Throwable t)
+ {
+ log.warn("Error during shutdown of child: " + child, t);
+ }
+ }
+ }
+
+ Set<ControllerContext> contexts = getAllContexts();
+ if (contexts != null && contexts.isEmpty() == false)
+ {
+ for (ControllerContext context : contexts)
+ {
+ try
+ {
+ uninstall(context.getName());
+ }
+ catch (Throwable t)
+ {
+ log.warn("Error during shutdown while uninstalling: " + context, t);
+ }
+ }
+ }
+ }
+ finally
+ {
+ shutdown = true;
+ unlockWrite();
+ }
+
+ }
+
public void addState(ControllerState state, ControllerState before)
{
lockWrite();
@@ -111,7 +193,7 @@
states.add(index, state);
}
- Set<ControllerContext> contexts = CollectionsFactory.createCopyOnWriteSet();
+ Set<ControllerContext> contexts = new CopyOnWriteArraySet<ControllerContext>();
contextsByState.put(state, contexts);
}
finally
@@ -171,6 +253,26 @@
}
}
+ public Set<ControllerContext> getAllContexts()
+ {
+ lockRead();
+ try
+ {
+ LinkedHashSet<ControllerContext> result = new LinkedHashSet<ControllerContext>();
+ for (int i = states.size()-1; i>=0; --i)
+ {
+ ControllerState state = states.get(i);
+ result.addAll(contextsByState.get(state));
+ result.addAll(errorContexts.values());
+ }
+ return result;
+ }
+ finally
+ {
+ unlockRead();
+ }
+ }
+
public ControllerContext getContext(Object name, ControllerState state)
{
if (name == null)
@@ -179,7 +281,7 @@
lockRead();
try
{
- ControllerContext result = getRegisterControllerContext(name, false);
+ ControllerContext result = getRegisteredControllerContext(name, false);
if (result != null && state != null)
{
int required = states.indexOf(state);
@@ -241,7 +343,7 @@
Object name = context.getName();
if (name == null)
throw new IllegalArgumentException("Null name " + context.toShortString());
-
+
install(context, trace);
}
@@ -288,7 +390,7 @@
if (errorContexts.remove(name) != null && trace)
log.trace("Tidied up context in error state: " + name);
- ControllerContext context = getRegisterControllerContext(name, false);
+ ControllerContext context = getRegisteredControllerContext(name, false);
if (context != null)
{
if (trace)
@@ -336,10 +438,12 @@
lockWrite();
try
{
+ checkShutdown();
+
Object name = context.getName();
// Check the name is not already registered
- if (getRegisterControllerContext(name, false) != null)
+ if (getRegisteredControllerContext(name, false) != null)
throw new IllegalStateException(name + " is already installed.");
// Check any alias is not already registered
@@ -348,7 +452,7 @@
{
for (Object alias : aliases)
{
- if (getRegisterControllerContext(alias, false) != null)
+ if (getRegisteredControllerContext(alias, false) != null)
throw new IllegalStateException(alias + " an alias of " + name + " is already installed.");
}
}
@@ -416,6 +520,8 @@
lockWrite();
try
{
+ checkShutdown();
+
ControllerState fromState = context.getState();
int currentIndex = states.indexOf(fromState);
int requiredIndex = states.indexOf(state);
@@ -463,11 +569,13 @@
lockWrite();
try
{
+ checkShutdown();
+
if (ControllerMode.ON_DEMAND.equals(context.getMode()) == false)
throw new IllegalStateException("Context is not ON DEMAND: " + context.toShortString());
// Sanity check
- getRegisterControllerContext(context.getName(), true);
+ getRegisteredControllerContext(context.getName(), true);
// Already done
if (ControllerState.INSTALLED.equals(context.getRequiredState()))
@@ -1201,7 +1309,7 @@
* @throws IllegalArgumentException for null parameters
* @throws IllegalStateException if the context if must exist is true and the context does not exist
*/
- protected ControllerContext getRegisterControllerContext(Object name, boolean mustExist)
+ protected ControllerContext getRegisteredControllerContext(Object name, boolean mustExist)
{
if (name == null)
throw new IllegalArgumentException("Null name");
Modified: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractDependencyInfo.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractDependencyInfo.java 2007-06-05 13:56:47 UTC (rev 63348)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractDependencyInfo.java 2007-06-05 14:09:19 UTC (rev 63349)
@@ -24,6 +24,8 @@
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CopyOnWriteArraySet;
import org.jboss.dependency.spi.CallbackItem;
import org.jboss.dependency.spi.Controller;
@@ -33,7 +35,6 @@
import org.jboss.dependency.spi.LifecycleCallbackItem;
import org.jboss.util.JBossObject;
import org.jboss.util.JBossStringBuilder;
-import org.jboss.util.collection.CollectionsFactory;
/**
* A DependencyInfo.
@@ -44,22 +45,22 @@
public class AbstractDependencyInfo extends JBossObject implements DependencyInfo
{
/** My dependencies */
- private Set<DependencyItem> iDependOn = CollectionsFactory.createCopyOnWriteSet();
+ private Set<DependencyItem> iDependOn = new CopyOnWriteArraySet<DependencyItem>();;
/** Dependencies referencing me */
- private Set<DependencyItem> dependsOnMe = CollectionsFactory.createCopyOnWriteSet();
+ private Set<DependencyItem> dependsOnMe = new CopyOnWriteArraySet<DependencyItem>();;
/** Unresolved dependencies */
- private Set<DependencyItem> unresolved = CollectionsFactory.createCopyOnWriteSet();
+ private Set<DependencyItem> unresolved = new CopyOnWriteArraySet<DependencyItem>();;
/** Install callbacks */
- private Set<CallbackItem> installCallbacks = CollectionsFactory.createCopyOnWriteSet();
+ private Set<CallbackItem> installCallbacks = new CopyOnWriteArraySet<CallbackItem>();;
/** Uninstall callbacks */
- private Set<CallbackItem> uninstallCallbacks = CollectionsFactory.createCopyOnWriteSet();
+ private Set<CallbackItem> uninstallCallbacks = new CopyOnWriteArraySet<CallbackItem>();
/** Lifecycle callbacks */
- private List<LifecycleCallbackItem> lifecycleCallbacks = CollectionsFactory.createCopyOnWriteList();
+ private List<LifecycleCallbackItem> lifecycleCallbacks = new CopyOnWriteArrayList<LifecycleCallbackItem>();
Modified: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AttributeCallbackItem.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AttributeCallbackItem.java 2007-06-05 13:56:47 UTC (rev 63348)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AttributeCallbackItem.java 2007-06-05 14:09:19 UTC (rev 63349)
@@ -29,6 +29,7 @@
/**
* Attribute callback item.
*
+ * @param <T> the callback type
* @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
*/
public class AttributeCallbackItem<T> extends OwnerCallbackItem<T, AttributeDispatchContext>
Modified: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/OwnerCallbackItem.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/OwnerCallbackItem.java 2007-06-05 13:56:47 UTC (rev 63348)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/OwnerCallbackItem.java 2007-06-05 14:09:19 UTC (rev 63349)
@@ -30,6 +30,7 @@
/**
* Owner callback item.
*
+ * @param <T> the callback type
* @param <C> owner type
* @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
*/
Modified: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/SingleCallbackItem.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/SingleCallbackItem.java 2007-06-05 13:56:47 UTC (rev 63348)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/SingleCallbackItem.java 2007-06-05 14:09:19 UTC (rev 63349)
@@ -29,6 +29,7 @@
/**
* Single callback item.
*
+ * @param <T> the callback type
* @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
*/
public class SingleCallbackItem<T> extends OwnerCallbackItem<T, InvokeDispatchContext>
Modified: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/spi/Controller.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/spi/Controller.java 2007-06-05 13:56:47 UTC (rev 63348)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/spi/Controller.java 2007-06-05 14:09:19 UTC (rev 63349)
@@ -118,4 +118,16 @@
* @return set of contexts in certain state
*/
Set<ControllerContext> getContextsByState(ControllerState state);
+
+ /**
+ * Whether the controller is shutdown
+ *
+ * @return true when shutdown
+ */
+ boolean isShutdown();
+
+ /**
+ * Shutdown the controller
+ */
+ void shutdown();
}
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractNamedAliasMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractNamedAliasMetaData.java 2007-06-05 13:56:47 UTC (rev 63348)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractNamedAliasMetaData.java 2007-06-05 14:09:19 UTC (rev 63349)
@@ -32,6 +32,10 @@
*/
public class AbstractNamedAliasMetaData extends AbstractAliasMetaData implements NamedAliasMetaData
{
+ /** The serialVersionUID */
+ private static final long serialVersionUID = -6917262743964306852L;
+
+ /** The name */
protected Object name;
/**
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelControllerContext.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelControllerContext.java 2007-06-05 13:56:47 UTC (rev 63348)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelControllerContext.java 2007-06-05 14:09:19 UTC (rev 63349)
@@ -25,7 +25,6 @@
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Iterator;
-import java.util.List;
import java.util.Set;
import java.util.Stack;
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/KernelControllerContextAction.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/KernelControllerContextAction.java 2007-06-05 13:56:47 UTC (rev 63348)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/KernelControllerContextAction.java 2007-06-05 14:09:19 UTC (rev 63349)
@@ -29,9 +29,7 @@
import org.jboss.beans.metadata.spi.BeanMetaData;
import org.jboss.beans.metadata.spi.ParameterMetaData;
import org.jboss.dependency.plugins.action.SimpleControllerContextAction;
-import org.jboss.dependency.spi.Controller;
import org.jboss.dependency.spi.ControllerContext;
-import org.jboss.dependency.spi.ControllerState;
import org.jboss.dependency.spi.dispatch.InvokeDispatchContext;
import org.jboss.joinpoint.spi.Joinpoint;
import org.jboss.kernel.plugins.config.Configurator;
More information about the jboss-cvs-commits
mailing list