bloritsch    2003/01/23 11:48:51

  Modified:    fortress/examples/src/java/org/apache/excalibur/fortress/examples/viewer
                        Main.java
               fortress/src/java/org/apache/excalibur/fortress/container
                        AbstractContainer.java
               fortress/src/java/org/apache/excalibur/fortress/util
                        ContextManager.java
  Log:
  force a shutdown order and provide debug messages to see where things get stuck at 
destruction time
  
  Revision  Changes    Path
  1.12      +9 -3      
jakarta-avalon-excalibur/fortress/examples/src/java/org/apache/excalibur/fortress/examples/viewer/Main.java
  
  Index: Main.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/fortress/examples/src/java/org/apache/excalibur/fortress/examples/viewer/Main.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- Main.java 10 Nov 2002 16:18:23 -0000      1.11
  +++ Main.java 23 Jan 2003 19:48:50 -0000      1.12
  @@ -71,6 +71,8 @@
       public static final void main( String[] args )
           throws Exception
       {
  +        ContainerManager cm = null;
  +
           try
           {
               final FortressConfig config = new FortressConfig();
  @@ -81,10 +83,10 @@
               config.setLoggerManagerConfiguration( 
"resource://org/apache/excalibur/fortress/examples/viewer/ComponentViewer.xlog" );
               config.setRoleManagerConfiguration( 
"resource://org/apache/excalibur/fortress/examples/viewer/ComponentViewer.roles" );
   
  -            ContainerManager cm = new DefaultContainerManager( config.getContext() 
);
  +            cm = new DefaultContainerManager( config.getContext() );
               ContainerUtil.initialize( cm );
   
  -            //(ComponentViewer)cm.getContainer();
  +            (ComponentViewer)cm.getContainer();
           }
           catch( CascadingException e )
           {
  @@ -101,6 +103,10 @@
                   else
                       t = null;
               }
  +        }
  +        finally
  +        {
  +            //ContainerUtil.dispose( cm );
           }
       }
   }
  
  
  
  1.26      +2 -3      
jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/container/AbstractContainer.java
  
  Index: AbstractContainer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/container/AbstractContainer.java,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- AbstractContainer.java    9 Jan 2003 11:50:53 -0000       1.25
  +++ AbstractContainer.java    23 Jan 2003 19:48:51 -0000      1.26
  @@ -596,8 +596,7 @@
               final ComponentHandlerEntry entry = (ComponentHandlerEntry)i.next();
               final ComponentHandler handler = entry.getHandler();
   
  -            // TODO: stop() here?
  -
  +            if (getLogger().isDebugEnabled()) getLogger().debug("Shutting down: " + 
handler);
               ContainerUtil.dispose( handler );
           }
       }
  
  
  
  1.57      +36 -2     
jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/util/ContextManager.java
  
  Index: ContextManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/util/ContextManager.java,v
  retrieving revision 1.56
  retrieving revision 1.57
  diff -u -r1.56 -r1.57
  --- ContextManager.java       9 Jan 2003 12:53:25 -0000       1.56
  +++ ContextManager.java       23 Jan 2003 19:48:51 -0000      1.57
  @@ -50,6 +50,8 @@
   package org.apache.excalibur.fortress.util;
   
   import java.util.ArrayList;
  +import java.util.Collections;
  +import java.util.Comparator;
   import java.util.Iterator;
   import org.apache.avalon.excalibur.logger.LogKitLoggerManager;
   import org.apache.avalon.excalibur.logger.LoggerManager;
  @@ -311,6 +313,7 @@
        */
       public void dispose()
       {
  +        Collections.sort( ownedComponents, new DestroyOrderComparator() );
           // Dispose owned components
           Iterator ownedComponentsIter = ownedComponents.iterator();
           while( ownedComponentsIter.hasNext() )
  @@ -319,6 +322,8 @@
   
               try
               {
  +                if (getLogger().isDebugEnabled()) getLogger().debug("Shutting down: 
" + o);
  +
                   ContainerUtil.shutdown( o );
               }
               catch( Exception e )
  @@ -326,8 +331,9 @@
                   getLogger().warn( "Unable to dispose of owned component "
                                     + o.getClass().getName(), e );
               }
  +
  +            ownedComponentsIter.remove();
           }
  -        ownedComponents.clear();
       }
   
       /**
  @@ -903,6 +909,34 @@
               {
                   m_containerManagerContext.put( ASSEMBLY_CONFIGURATION, 
containerConfig );
               }
  +        }
  +    }
  +
  +    private final class DestroyOrderComparator implements Comparator
  +    {
  +        public boolean equals( Object other )
  +        {
  +            return other instanceof DestroyOrderComparator;
  +        }
  +
  +        public int compare( Object a, Object b )
  +        {
  +            int typeA = typeOf(a);
  +            int typeB = typeOf(b);
  +
  +            if (typeA < typeB) return -1;
  +            if (typeA > typeB) return 1;
  +            return 0;
  +        }
  +
  +        private int typeOf(Object obj)
  +        {
  +            int retVal = 1; // Doesn't matter the type
  +
  +            if (obj instanceof CommandManager) retVal = 2;
  +            if (obj instanceof ThreadManager) retVal = 0;
  +
  +            return retVal;
           }
       }
   }
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to