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]>