mcconnell 2003/10/19 03:45:53 Modified: merlin/activation/impl/src/java/org/apache/avalon/activation/appliance/impl DefaultAppliance.java Log: Improve handling of collection process by notifying proxy of instance destruction. Revision Changes Path 1.7 +15 -4 avalon/merlin/activation/impl/src/java/org/apache/avalon/activation/appliance/impl/DefaultAppliance.java Index: DefaultAppliance.java =================================================================== RCS file: /home/cvs/avalon/merlin/activation/impl/src/java/org/apache/avalon/activation/appliance/impl/DefaultAppliance.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- DefaultAppliance.java 19 Oct 2003 10:31:00 -0000 1.6 +++ DefaultAppliance.java 19 Oct 2003 10:45:53 -0000 1.7 @@ -625,7 +625,7 @@ private void destroyInstance( Object instance ) { final int id = System.identityHashCode( instance ); - getLogger().debug( "component disposal: " + id ); + getLogger().debug( "destroy: " + id ); try { applyStop( instance ); @@ -1171,7 +1171,7 @@ implements InvocationHandler { private final Object m_instance; - private boolean m_disposed = false; + private boolean m_destroyed = false; /** * Create a proxy invocation handler. @@ -1200,7 +1200,7 @@ { if( proxy == null ) throw new NullPointerException( "proxy" ); if( method == null ) throw new NullPointerException( "method" ); - if( m_disposed ) throw new IllegalStateException( "disposed" ); + if( m_destroyed ) throw new IllegalStateException( "destroyed" ); try { @@ -1225,7 +1225,7 @@ protected void finalize() throws Throwable { - if( !m_disposed ) + if( !m_destroyed ) { final String message = "Releasing component [" @@ -1244,6 +1244,11 @@ { return m_instance; } + + void notifyDestroyed() + { + m_destroyed = true; + } } private class StandardFactory implements Factory @@ -1319,6 +1324,12 @@ public void destroy( Object instance ) { if( instance == null ) throw new NullPointerException( "instance" ); + if( Proxy.isProxyClass( instance.getClass() ) ) + { + ApplianceInvocationHandler handler = + (ApplianceInvocationHandler) Proxy.getInvocationHandler( instance ); + handler.notifyDestroyed(); + } destroyInstance( getProviderInstance( instance ) ); } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]