You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2004/11/01 10:57:38 UTC
svn commit: rev 56221 - cocoon/trunk/src/core/java/org/apache/cocoon/core/container
Author: cziegeler
Date: Mon Nov 1 01:57:38 2004
New Revision: 56221
Modified:
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/AbstractComponentHandler.java
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/AbstractServiceManager.java
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CocoonServiceManager.java
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CocoonServiceSelector.java
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/ComponentFactory.java
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/PoolableComponentHandler.java
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/SingleThreadedComponentHandler.java
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/ThreadSafeComponentHandler.java
Log:
PoolableHandler can pool plain objects now
Remove unused code
Clean up exception messages
Modified: cocoon/trunk/src/core/java/org/apache/cocoon/core/container/AbstractComponentHandler.java
==============================================================================
--- cocoon/trunk/src/core/java/org/apache/cocoon/core/container/AbstractComponentHandler.java (original)
+++ cocoon/trunk/src/core/java/org/apache/cocoon/core/container/AbstractComponentHandler.java Mon Nov 1 01:57:38 2004
@@ -236,4 +236,20 @@
this.logger.debug( "ThreadSafeComponentHandler initialized for: " + this.factory.getCreatedClass().getName() );
}
}
+
+ /**
+ * Decommission a component
+ * @param component Object to be decommissioned
+ */
+ protected void decommission( final Object component ) {
+ try {
+ this.factory.decommission( component );
+ } catch( final Exception e ) {
+ if( this.logger.isWarnEnabled() ) {
+ this.logger.warn( "Error decommissioning component: "
+ + this.factory.getCreatedClass().getName(), e );
+ }
+ }
+ }
+
}
Modified: cocoon/trunk/src/core/java/org/apache/cocoon/core/container/AbstractServiceManager.java
==============================================================================
--- cocoon/trunk/src/core/java/org/apache/cocoon/core/container/AbstractServiceManager.java (original)
+++ cocoon/trunk/src/core/java/org/apache/cocoon/core/container/AbstractServiceManager.java Mon Nov 1 01:57:38 2004
@@ -154,9 +154,9 @@
throw new ConfigurationException( message, ce );
} catch( final Exception e ) {
- final String message = "Unexpected exception for role: " + role;
+ final String message = "Unexpected exception for role [" + role + "]";
if( this.getLogger().isErrorEnabled() ) {
- this.getLogger().error( "Unexpected exception for role: " + role, e );
+ this.getLogger().error( message, e );
}
throw new ConfigurationException( message, e );
}
Modified: cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CocoonServiceManager.java
==============================================================================
--- cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CocoonServiceManager.java (original)
+++ cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CocoonServiceManager.java Mon Nov 1 01:57:38 2004
@@ -124,9 +124,9 @@
} catch (ServiceException se) {
throw se;
} catch( final Exception e ) {
- final String message = "Could not find component";
+ final String message = "Could not find component for role [" + role + "]";
if( this.getLogger().isDebugEnabled() ) {
- this.getLogger().debug( message + " for role: " + role, e );
+ this.getLogger().debug( message, e );
}
throw new ServiceException( role, message, e );
}
@@ -140,9 +140,9 @@
}
if( handler == null ) {
- final String message = "Could not find component";
+ final String message = "Could not find component for role: [" + role + "]";
if( this.getLogger().isDebugEnabled() ) {
- this.getLogger().debug( message + " for role: " + role );
+ this.getLogger().debug( message );
}
throw new ServiceException( role, message );
}
@@ -160,19 +160,20 @@
// Rethrow instead of wrapping a ServiceException with another one
throw ce;
} catch( final Exception e ) {
- final String message = "Could not access the Component";
+ final String message = "Could not access the component for role [" + role + "]";
if( this.getLogger().isDebugEnabled() ) {
- this.getLogger().debug( message + " for role [" + role + "]", e );
+ this.getLogger().debug( message, e );
}
throw new ServiceException( role, message, e );
}
} catch ( ServiceException se) {
+ // Rethrow insteand of wrapping it again
throw se;
} catch( final Exception e ) {
- final String message = "Could not access the Component";
+ final String message = "Could not access the component for role [" + role + "]";
if( this.getLogger().isDebugEnabled() ) {
- this.getLogger().debug( message + " for role [" + role + "]", e );
+ this.getLogger().debug( message, e );
}
throw new ServiceException( role, message, e );
Modified: cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CocoonServiceSelector.java
==============================================================================
--- cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CocoonServiceSelector.java (original)
+++ cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CocoonServiceSelector.java Mon Nov 1 01:57:38 2004
@@ -51,8 +51,8 @@
/** The role of this selector. Set in <code>configure()</code>. */
protected String roleName;
- /** The default hint */
- protected String defaultHint;
+ /** The default key */
+ protected String defaultKey;
/** Create the selector */
public CocoonServiceSelector() {
@@ -64,36 +64,39 @@
*/
public Object select( Object hint )
throws ServiceException {
+ final String key;
+ if (hint == null) {
+ key = this.defaultKey;
+ } else {
+ key = hint.toString();
+ }
+
if( !this.initialized ) {
if( this.getLogger().isWarnEnabled() ) {
- this.getLogger().warn( "Looking up component on an uninitialized ComponentLocator "
- + "with hint [" + hint + "]" );
+ this.getLogger().warn( "Selecting a component on an uninitialized service selector "
+ + "with key [" + key + "]" );
}
}
if( this.disposed ) {
throw new IllegalStateException(
- "You cannot select a Component from a disposed ServiceSelector" );
- }
-
- if (hint == null) {
- hint = this.defaultHint;
+ "You cannot select a component from a disposed service selector." );
}
- AbstractComponentHandler handler = (AbstractComponentHandler)this.componentHandlers.get( hint );
+ AbstractComponentHandler handler = (AbstractComponentHandler)this.componentHandlers.get( key );
// Retrieve the instance of the requested component
if( null == handler ) {
// Doesn't exist here : try in parent selector
if ( this.parentSelector != null ) {
- return this.parentSelector.select(hint);
+ return this.parentSelector.select(key);
}
final String message = this.roleName
- + ": ServiceSelector could not find the component for hint [" + hint + "]";
+ + ": service selector could not find the component for key [" + key + "]";
if( this.getLogger().isDebugEnabled() ) {
this.getLogger().debug( message );
}
- throw new ServiceException( hint.toString(), message );
+ throw new ServiceException( key, message );
}
Object component = null;
@@ -105,25 +108,25 @@
throw ce;
} catch( final Exception e ) {
final String message = this.roleName
- + ": ServiceSelector could not access the Component for hint [" + hint + "]";
+ + ": service selector could not access the component for key [" + key + "]";
if( this.getLogger().isDebugEnabled() ) {
this.getLogger().debug( message, e );
}
- throw new ServiceException( hint.toString(), message, e );
+ throw new ServiceException( key, message, e );
}
if( null == component ) {
// Doesn't exist here : try in parent selector
if ( this.parentSelector != null ) {
- component = this.parentSelector.select(hint);
+ component = this.parentSelector.select(key);
} else {
final String message = this.roleName
- + ": ServiceSelector could not find the component for hint [" + hint + "]";
+ + ": service selector could not find the component for key [" + key + "]";
if( this.getLogger().isDebugEnabled() ) {
this.getLogger().debug( message );
}
- throw new ServiceException( hint.toString(), message );
+ throw new ServiceException( key, message );
}
}
@@ -136,24 +139,27 @@
* @see org.apache.avalon.framework.service.ServiceSelector#isSelectable(java.lang.Object)
*/
public boolean isSelectable( Object hint ) {
- if( !this.initialized ) return false;
- if( this.disposed ) return false;
-
+ final String key;
if (hint == null) {
- hint = this.defaultHint;
+ key = this.defaultKey;
+ } else {
+ key = hint.toString();
}
+ if( !this.initialized ) return false;
+ if( this.disposed ) return false;
+
boolean exists = false;
try {
- AbstractComponentHandler handler = (AbstractComponentHandler)this.componentHandlers.get( hint );
+ AbstractComponentHandler handler = (AbstractComponentHandler)this.componentHandlers.get( key );
exists = (handler != null);
} catch( Throwable t ) {
// We can safely ignore all exceptions
}
if ( !exists && this.parentSelector != null ) {
- exists = this.parentSelector.isSelectable( hint );
+ exists = this.parentSelector.isSelectable( key );
}
return exists;
}
@@ -218,8 +224,8 @@
throws ConfigurationException {
this.roleName = getRoleName(config);
- // Get default hint
- this.defaultHint = config.getAttribute(this.getDefaultHintAttributeName(), null);
+ // Get default key
+ this.defaultKey = config.getAttribute(this.getDefaultKeyAttributeName(), null);
// Add components
String compInstanceName = getComponentInstanceName();
@@ -260,7 +266,7 @@
throw new ConfigurationException(message);
}
- this.addComponent( className, hint, instance );
+ this.addComponent( className, hint.toString(), instance );
}
}
@@ -334,7 +340,7 @@
}
/** Add a new component to the manager.
- * @param hint the hint name for the new component.
+ * @param hint the key for the new component.
* @param component the class of this component.
* @param configuration the configuration for this component.
*/
@@ -342,9 +348,10 @@
final Class component,
final Configuration configuration )
throws ServiceException {
+ final String key = hint.toString();
if( this.initialized ) {
- throw new ServiceException( hint.toString(),
- "Cannot add components to an initialized ServiceSelector", null );
+ throw new ServiceException( key,
+ "Cannot add components to an initialized service selector" );
}
try {
@@ -353,22 +360,22 @@
this.serviceManager);
handler.initialize();
- this.componentHandlers.put( hint, handler );
+ this.componentHandlers.put( key, handler );
if( this.getLogger().isDebugEnabled() ) {
this.getLogger().debug(
- "Adding " + component.getName() + " for hint [" + hint.toString() + "]" );
+ "Adding " + component.getName() + " for key [" + key + "]" );
}
} catch (ServiceException se) {
throw se;
} catch( final Exception e ) {
final String message =
- "Could not set up Component for hint [ " + hint + "]";
+ "Could not set up component for key [ " + key + "]";
if( this.getLogger().isErrorEnabled() ) {
this.getLogger().error( message, e );
}
- throw new ServiceException( hint.toString(), message, e );
+ throw new ServiceException(key, message, e );
}
}
@@ -397,14 +404,14 @@
}
/**
- * Get the name of the attribute giving the default hint to use if
+ * Get the name of the attribute giving the default key to use if
* none is given. The default here is "default", but this can be
* overriden in subclasses. If this method returns <code>null</code>,
- * no default hint can be specified.
+ * no default key can be specified.
*
* @return "<code>default</code>", but can be changed by subclasses
*/
- protected String getDefaultHintAttributeName() {
+ protected String getDefaultKeyAttributeName() {
return "default";
}
@@ -422,28 +429,6 @@
}
return name;
- }
-
- /**
- * Get the default hint, if any for this selector.
- */
- public String getDefaultHint() {
- return this.defaultHint;
- }
-
- /**
- * Does this selector declare a given hint? Check is performed on the components declared for this
- * selector only, and <strong>not</strong> those potentially inherited from the parent selector.
- *
- * @param hint the hint to check for
- * @return <code>true</code> if this selector has the specified hint
- */
- protected boolean hasDeclaredComponent(Object hint) {
- if (hint == null) {
- hint = this.defaultHint;
- }
-
- return this.isSelectable(hint);
}
/**
Modified: cocoon/trunk/src/core/java/org/apache/cocoon/core/container/ComponentFactory.java
==============================================================================
--- cocoon/trunk/src/core/java/org/apache/cocoon/core/container/ComponentFactory.java (original)
+++ cocoon/trunk/src/core/java/org/apache/cocoon/core/container/ComponentFactory.java Mon Nov 1 01:57:38 2004
@@ -20,13 +20,11 @@
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.container.ContainerUtil;
import org.apache.avalon.framework.context.Context;
-import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.logger.LogEnabled;
import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.parameters.Parameterizable;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.avalon.framework.service.ServiceManager;
-import org.apache.avalon.framework.service.Serviceable;
/**
* Factory for Avalon based components.
@@ -114,14 +112,8 @@
}
}
-
- if( component instanceof Contextualizable ) {
- ContainerUtil.contextualize( component, this.context );
- }
-
- if( component instanceof Serviceable ) {
- ContainerUtil.service( component, this.serviceManager );
- }
+ ContainerUtil.contextualize( component, this.context );
+ ContainerUtil.service( component, this.serviceManager );
if ( component instanceof CocoonServiceSelector ) {
((CocoonServiceSelector)component).setLoggerManager(this.loggerManager);
Modified: cocoon/trunk/src/core/java/org/apache/cocoon/core/container/PoolableComponentHandler.java
==============================================================================
--- cocoon/trunk/src/core/java/org/apache/cocoon/core/container/PoolableComponentHandler.java (original)
+++ cocoon/trunk/src/core/java/org/apache/cocoon/core/container/PoolableComponentHandler.java Mon Nov 1 01:57:38 2004
@@ -19,7 +19,6 @@
import java.util.Iterator;
import java.util.LinkedList;
-import org.apache.avalon.excalibur.pool.Poolable;
import org.apache.avalon.excalibur.pool.Recyclable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.logger.Logger;
@@ -115,10 +114,10 @@
synchronized( this.semaphore ) {
// Remove objects in the ready list.
for( Iterator iter = this.ready.iterator(); iter.hasNext(); ) {
- Poolable poolable = (Poolable)iter.next();
+ Object poolable = (Object)iter.next();
iter.remove();
this.readySize--;
- permanentlyRemovePoolable( poolable );
+ this.permanentlyRemovePoolable( poolable );
}
if( ( this.size > 0 ) && this.logger.isDebugEnabled() ) {
@@ -136,26 +135,7 @@
*/
protected void permanentlyRemovePoolable( Object poolable ) {
this.size--;
- this.removePoolable( poolable );
- }
-
- /**
- * Called when an object is being removed permanently from the pool.
- * This is the method to override when you need to enforce destructional
- * policies.
- * <p>
- * This method is only called by threads that have m_semaphore locked.
- *
- * @param poolable Poolable to be completely removed from the pool.
- */
- protected void removePoolable( Object poolable ) {
- try {
- this.factory.decommission( poolable );
- } catch( Exception e ) {
- if( this.logger.isDebugEnabled() ) {
- this.logger.debug( "Error decommissioning object", e );
- }
- }
+ this.decommission( poolable );
}
/**
@@ -174,7 +154,7 @@
// Look for a Poolable at the end of the m_ready list
if( this.readySize > 0 ){
// A poolable is ready and waiting in the pool
- poolable = (Poolable)this.ready.removeLast();
+ poolable = this.ready.removeLast();
this.readySize--;
} else {
// Create a new poolable. May throw an exception if the poolable can not be
Modified: cocoon/trunk/src/core/java/org/apache/cocoon/core/container/SingleThreadedComponentHandler.java
==============================================================================
--- cocoon/trunk/src/core/java/org/apache/cocoon/core/container/SingleThreadedComponentHandler.java (original)
+++ cocoon/trunk/src/core/java/org/apache/cocoon/core/container/SingleThreadedComponentHandler.java Mon Nov 1 01:57:38 2004
@@ -59,15 +59,7 @@
* @param component Component to be be put/released back to the handler.
*/
protected void doPut( final Object component ) {
- try {
- this.factory.decommission( component );
- } catch( final Exception e ) {
- if( this.logger.isWarnEnabled() )
- {
- this.logger.warn( "Error decommissioning component: "
- + this.factory.getCreatedClass().getName(), e );
- }
- }
+ this.decommission( component );
}
}
Modified: cocoon/trunk/src/core/java/org/apache/cocoon/core/container/ThreadSafeComponentHandler.java
==============================================================================
--- cocoon/trunk/src/core/java/org/apache/cocoon/core/container/ThreadSafeComponentHandler.java (original)
+++ cocoon/trunk/src/core/java/org/apache/cocoon/core/container/ThreadSafeComponentHandler.java Mon Nov 1 01:57:38 2004
@@ -71,15 +71,9 @@
* Dispose of the ComponentHandler and any associated Pools and Factories.
*/
public void dispose() {
- try {
- this.factory.decommission( this.instance );
- this.instance = null;
- } catch( final Exception e ) {
- if( this.logger.isWarnEnabled() ) {
- this.logger.warn( "Error decommissioning component: " +
- this.factory.getCreatedClass().getName(), e );
- }
- }
+ this.decommission( this.instance );
+ this.instance = null;
+
super.dispose();
}
}