donaldp 2002/11/07 18:20:44
Modified: fortress/src/java/org/apache/excalibur/fortress
AbstractContainer.java
fortress/src/java/org/apache/excalibur/fortress/handler
AbstractComponentHandler.java
fortress/src/java/org/apache/excalibur/fortress/lookup
FortressServiceManager.java
FortressServiceSelector.java
Log:
Move all LifecycleExtension handling into ComponentHandler objects so it is
consistent and in one place rather than scattered through the access medium ala
Service/Component Manager/Selectors
Revision Changes Path
1.66 +3 -3
jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/AbstractContainer.java
Index: AbstractContainer.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/AbstractContainer.java,v
retrieving revision 1.65
retrieving revision 1.66
diff -u -r1.65 -r1.66
--- AbstractContainer.java 8 Nov 2002 01:58:31 -0000 1.65
+++ AbstractContainer.java 8 Nov 2002 02:20:43 -0000 1.66
@@ -226,7 +226,7 @@
if( !hintMap.containsKey( "selector" ) )
{
hintMap.put( "selector",
- new FortressServiceSelector( this, role,
m_extManager, m_context ) );
+ new FortressServiceSelector( this, role ) );
}
}
else
@@ -422,7 +422,7 @@
public void service( final ServiceManager parent )
throws ServiceException
{
- m_serviceManager = new FortressServiceManager( this, parent, m_extManager,
m_context );
+ m_serviceManager = new FortressServiceManager( this, parent );
}
/**
1.27 +15 -2
jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/handler/AbstractComponentHandler.java
Index: AbstractComponentHandler.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/handler/AbstractComponentHandler.java,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- AbstractComponentHandler.java 8 Nov 2002 01:58:31 -0000 1.26
+++ AbstractComponentHandler.java 8 Nov 2002 02:20:43 -0000 1.27
@@ -105,6 +105,7 @@
/** Initialization policy */
private boolean m_isLazy;
+ private LifecycleExtensionManager m_extManager;
/**
* Create a ComponentHandler that takes care of hiding the details of
@@ -138,6 +139,7 @@
(InstrumentManager)context.get( ContainerConstants.INSTRUMENT_MANAGER );
m_factory = new ComponentFactory( componentClass, config, service, context,
m_logkit,
extManager, instrumentManager );
+ m_extManager = extManager;
addChildInstrumentable( m_factory );
m_context = context;
m_isLazy = isLazy.booleanValue();
@@ -219,7 +221,9 @@
throw new IllegalStateException( message );
}
- return doGet();
+ final Object result = doGet();
+ m_extManager.executeAccessExtensions( result, m_context );
+ return result;
}
/**
@@ -242,6 +246,15 @@
final String message =
"You cannot put a component in an uninitialized holder";
throw new IllegalStateException( message );
+ }
+
+ try
+ {
+ m_extManager.executeReleaseExtensions( component, m_context );
+ }
+ catch( Exception e )
+ {
+ // REVISIT(MC): we need to log this somewhere
}
doPut( component );
1.20 +23 -77
jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/lookup/FortressServiceManager.java
Index: FortressServiceManager.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/lookup/FortressServiceManager.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- FortressServiceManager.java 8 Nov 2002 00:54:14 -0000 1.19
+++ FortressServiceManager.java 8 Nov 2002 02:20:43 -0000 1.20
@@ -50,20 +50,16 @@
package org.apache.excalibur.fortress.lookup;
import java.util.Map;
-import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.ComponentSelector;
-import org.apache.avalon.framework.context.Context;
+import org.apache.avalon.framework.container.ContainerUtil;
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.ServiceSelector;
-import org.apache.avalon.framework.service.WrapperServiceManager;
import org.apache.avalon.framework.service.WrapperServiceSelector;
-import org.apache.avalon.framework.container.ContainerUtil;
import org.apache.commons.collections.StaticBucketMap;
import org.apache.excalibur.container.lookup.AbstractServiceManager;
import org.apache.excalibur.fortress.Container;
import org.apache.excalibur.fortress.handler.ComponentHandler;
-import org.apache.excalibur.fortress.lifecycle.LifecycleExtensionManager;
/**
* This is the Default ServiceManager for the Container. It provides
@@ -73,73 +69,40 @@
* @author <a href="mailto:bloritsch@;apache.org">Berin Loritsch</a>
* @version CVS $Revision$ $Date$
*/
-public class FortressServiceManager extends AbstractServiceManager
+public class FortressServiceManager
+ extends AbstractServiceManager
{
- private final Container m_components;
+ private final Container m_container;
private final Map m_used;
private final ServiceManager m_parent;
- private final Context m_context;
- private final LifecycleExtensionManager m_extManager;
-
- /**
- * This constructor is for a ContainerComponentManager with no parent
- * ComponentLocator
- */
- public FortressServiceManager( final Container container,
- final LifecycleExtensionManager extManager,
- final Context context )
- {
- this( container, (ServiceManager)null, extManager, context );
- }
-
- /**
- * This constructor is for a ContainerComponentManager with no parent
- * ComponentLocator
- */
- public FortressServiceManager( final Container container,
- final ComponentManager parent,
- final LifecycleExtensionManager extManager,
- final Context context )
- {
- this( container, ( parent != null ) ?
- new WrapperServiceManager( parent ) :
- null,
- extManager,
- context );
- }
/**
* This constructor is for a ContainerComponentManager with a parent
* ComponentLocator
*/
public FortressServiceManager( final Container container,
- final ServiceManager parent,
- final LifecycleExtensionManager extManager,
- final Context context )
+ final ServiceManager parent )
{
super( parent );
+ if( null == container )
+ {
+ throw new NullPointerException( "container" );
+ }
m_parent = parent;
- m_components = container;
- m_context = context;
- m_extManager = extManager;
+ m_container = container;
m_used = new StaticBucketMap();
-
- if( m_components == null )
- {
- throw new NullPointerException( "The Container is null, the
ServiceManager is unusable" );
- }
}
protected Object obtainService( String role )
throws ServiceException
{
- if( !m_components.has( role, null ) )
+ if( !m_container.has( role, null ) )
{
return null;
}
- Object temp = m_components.get( role, null );
+ Object temp = m_container.get( role, null );
if( temp instanceof ServiceSelector )
{
@@ -156,55 +119,36 @@
throw new ServiceException( role, "Invalid entry in component manager"
);
}
- ComponentHandler handler = (ComponentHandler)temp;
-
- final Object component;
-
try
{
+ final ComponentHandler handler = (ComponentHandler)temp;
if( !handler.isInitialized() )
{
ContainerUtil.initialize( handler );
}
- component = handler.get();
-
- m_extManager.executeAccessExtensions( component, m_context );
+ final Object component = handler.get();
+ m_used.put( component, handler );
+ return component;
}
- catch( ServiceException ce )
+ catch( final ServiceException ce )
{
throw ce; // rethrow
}
- catch( Exception e )
+ catch( final Exception e )
{
throw new ServiceException( role, "Could not return a reference to the
Component", e );
}
-
- m_used.put( component, handler );
-
- return component;
}
protected boolean serviceExists( String role )
{
- return m_components.has( role, null );
+ return m_container.has( role, null );
}
public void release( Object component )
{
- final ComponentHandler handler;
-
- try
- {
- m_extManager.executeReleaseExtensions( component, m_context );
- }
- catch( Exception e )
- {
- // REVISIT(MC): need to log this somewhere ?
- }
-
- handler = (ComponentHandler)m_used.remove( component );
-
+ final ComponentHandler handler = (ComponentHandler)m_used.remove( component
);
if( null == handler )
{
if( null == m_parent )
@@ -215,6 +159,8 @@
* is an error condition--but if the component is usually
* ThreadSafe, the impact is essentially nill.
*/
+ //Pete: This occurs when objects are released more often than
+ //when they are aquired
}
else
{
1.13 +7 -25
jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/lookup/FortressServiceSelector.java
Index: FortressServiceSelector.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/lookup/FortressServiceSelector.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- FortressServiceSelector.java 8 Nov 2002 00:54:14 -0000 1.12
+++ FortressServiceSelector.java 8 Nov 2002 02:20:43 -0000 1.13
@@ -49,16 +49,13 @@
*/
package org.apache.excalibur.fortress.lookup;
-import org.apache.commons.collections.StaticBucketMap;
-import org.apache.avalon.framework.context.Context;
+import java.util.Map;
+import org.apache.avalon.framework.container.ContainerUtil;
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceSelector;
-import org.apache.avalon.framework.container.ContainerUtil;
+import org.apache.commons.collections.StaticBucketMap;
import org.apache.excalibur.fortress.Container;
import org.apache.excalibur.fortress.handler.ComponentHandler;
-import org.apache.excalibur.fortress.lifecycle.LifecycleExtensionManager;
-
-import java.util.Map;
/**
* This is the Default ServiceSelector for the Container. It provides
@@ -68,23 +65,18 @@
* @author <a href="mailto:bloritsch@;apache.org">Berin Loritsch</a>
* @version CVS $Revision$ $Date$
*/
-public class FortressServiceSelector implements ServiceSelector
+public class FortressServiceSelector
+ implements ServiceSelector
{
private final String m_role;
private final Container m_components;
private final Map m_used;
- private final Context m_context;
- private final LifecycleExtensionManager m_extManager;
public FortressServiceSelector( final Container container,
- final String role,
- final LifecycleExtensionManager extManager,
- final Context context )
+ final String role )
{
m_role = role;
m_components = container;
- m_context = context;
- m_extManager = extManager;
m_used = new StaticBucketMap();
}
@@ -111,7 +103,6 @@
}
final Object component = handler.get();
- m_extManager.executeAccessExtensions( component, m_context );
m_used.put( component, handler );
return component;
}
@@ -133,15 +124,6 @@
public void release( Object component )
{
- try
- {
- m_extManager.executeReleaseExtensions( component, m_context );
- }
- catch( Exception e )
- {
- // REVISIT(MC): we need to log this somewhere
- }
-
final ComponentHandler handler =
(ComponentHandler)m_used.remove( component );
handler.put( component );
--
To unsubscribe, e-mail: <mailto:avalon-cvs-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:avalon-cvs-help@;jakarta.apache.org>