[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