Author: cziegeler
Date: Wed Feb 2 10:38:45 2005
New Revision: 149543
URL: http://svn.apache.org/viewcvs?view=rev&rev=149543
Log:
Rename handler and subclass to avoid code duplication
Added:
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/handler/NonThreadSafePoolableComponentHandler.java
- copied, changed from r149541,
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/handler/PoolableComponentHandler.java
Removed:
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/handler/PoolableComponentHandler.java
Modified:
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/handler/AbstractComponentHandler.java
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/handler/NewPoolableComponentHandler.java
Modified:
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/handler/AbstractComponentHandler.java
URL:
http://svn.apache.org/viewcvs/cocoon/trunk/src/core/java/org/apache/cocoon/core/container/handler/AbstractComponentHandler.java?view=diff&r1=149542&r2=149543
==============================================================================
---
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/handler/AbstractComponentHandler.java
(original)
+++
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/handler/AbstractComponentHandler.java
Wed Feb 2 10:38:45 2005
@@ -131,7 +131,7 @@
}
if( info.getModel() == ComponentInfo.MODEL_POOLED ) {
- handler = new PoolableComponentHandler( info, componentEnv.logger,
factory, info.getConfiguration() );
+ handler = new NonThreadSafePoolableComponentHandler( info,
componentEnv.logger, factory, info.getConfiguration() );
} else if( info.getModel() == ComponentInfo.MODEL_SINGLETON ) {
handler = new ThreadSafeComponentHandler( info,
componentEnv.logger, factory );
} else {
Modified:
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/handler/NewPoolableComponentHandler.java
URL:
http://svn.apache.org/viewcvs/cocoon/trunk/src/core/java/org/apache/cocoon/core/container/handler/NewPoolableComponentHandler.java?view=diff&r1=149542&r2=149543
==============================================================================
---
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/handler/NewPoolableComponentHandler.java
(original)
+++
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/handler/NewPoolableComponentHandler.java
Wed Feb 2 10:38:45 2005
@@ -21,8 +21,6 @@
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
import java.util.Set;
import org.apache.avalon.framework.configuration.Configuration;
@@ -61,35 +59,7 @@
* @version CVS $Id$
*/
public class NewPoolableComponentHandler
-extends AbstractFactoryHandler {
-
- /** The default max size of the pool */
- public static final int DEFAULT_MAX_POOL_SIZE = 8;
-
- /**
- * Object used to synchronize access to the get and put methods
- */
- protected final Object semaphore = new Object();
-
- /**
- * The maximum size of the pool.
- */
- private final int max;
-
- /**
- * List of the Poolable instances which are available for use.
- */
- private LinkedList ready;
-
- /**
- * Store the size of the ready list to optimize operations which require
this value.
- */
- private int readySize;
-
- /**
- * Total number of Poolable instances in the pool
- */
- private int size;
+extends NonThreadSafePoolableComponentHandler {
/**
* Create a PoolableComponentHandler which manages a pool of Components
@@ -104,90 +74,9 @@
final ComponentFactory factory,
final Configuration config )
throws Exception {
- super(info, logger, factory);
-
- final int poolMax = config.getAttributeAsInteger( "pool-max",
DEFAULT_MAX_POOL_SIZE );
- this.max = ( poolMax <= 0 ? Integer.MAX_VALUE : poolMax );
-
- // Create the pool lists.
- this.ready = new LinkedList();
- }
-
- /**
- * Dispose of the ComponentHandler and any associated Pools and Factories.
- */
- public void dispose() {
- super.dispose();
-
- // Any Poolables in the m_ready list need to be disposed of
- synchronized( this.semaphore ) {
- // Remove objects in the ready list.
- for( Iterator iter = this.ready.iterator(); iter.hasNext(); ) {
- Object poolable = iter.next();
- iter.remove();
- this.readySize--;
- this.permanentlyRemovePoolable( poolable );
- }
-
- if( ( this.size > 0 ) && this.logger.isDebugEnabled() ) {
- this.logger.debug( "There were " + this.size
- + " outstanding objects when the pool was
disposed." );
- }
- }
+ super(info, logger, factory, config);
}
- /**
- * Permanently removes a poolable from the pool's active list and
- * destroys it so that it will not ever be reused.
- * <p>
- * This method is only called by threads that have m_semaphore locked.
- */
- protected void permanentlyRemovePoolable( Object poolable ) {
- this.size--;
- this.decommission( poolable );
- }
-
- /**
- * Gets a Poolable from the pool. If there is room in the pool, a new
Poolable will be
- * created. Depending on the parameters to the constructor, the method
may block or throw
- * an exception if a Poolable is not available on the pool.
- *
- * @return Always returns a Poolable. Contract requires that put must
always be called with
- * the Poolable returned.
- * @throws Exception An exception may be thrown as described above or if
there is an exception
- * thrown by the ObjectFactory's newInstance() method.
- */
- protected Object getFromPool() throws Exception {
- Object poolable;
- synchronized( this.semaphore ) {
- // 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 = this.ready.removeLast();
- this.readySize--;
- } else {
- // Create a new poolable. May throw an exception if the
poolable can not be
- // instantiated.
- poolable = this.factory.newInstance();
- this.size++;
-
- if( this.logger.isDebugEnabled() ) {
- this.logger.debug( "Created a new " +
poolable.getClass().getName()
- + " from the object factory." );
- }
- }
- }
-
- this.factory.exitingPool(poolable);
-
- if( this.logger.isDebugEnabled() ) {
- this.logger.debug( "Got a " + poolable.getClass().getName() + "
from the pool." );
- }
-
- return poolable;
- }
-
-
/* (non-Javadoc)
* @see
org.apache.cocoon.core.container.handler.AbstractComponentHandler#doGet()
*/
@@ -202,51 +91,6 @@
// nothing to do
}
- /**
- * Returns a poolable to the pool
- *
- * @param poolable Poolable to return to the pool.
- */
- protected void putIntoPool( final Object poolable ) {
- try {
- this.factory.enteringPool(poolable);
- } catch (Exception ignore) {
- this.logger.warn("Exception during putting component back into the
pool.", ignore);
- }
-
- synchronized( this.semaphore ) {
- if( this.size <= this.max ) {
- if( this.disposed ) {
- // The pool has already been disposed.
- if( this.logger.isDebugEnabled() ) {
- this.logger.debug( "Put called for a " +
poolable.getClass().getName()
- + " after the pool was disposed." );
- }
-
- this.permanentlyRemovePoolable( poolable );
- } else {
- // There is room in the pool to keep this poolable.
- if( this.logger.isDebugEnabled() ) {
- this.logger.debug( "Put a " +
poolable.getClass().getName()
- + " back into the pool." );
- }
-
- this.ready.addLast( poolable );
- this.readySize++;
-
- }
- } else {
- // More Poolables were created than can be held in the pool,
so remove.
- if( this.logger.isDebugEnabled() ) {
- this.logger.debug( "No room to put a " +
poolable.getClass().getName()
- + " back into the pool, so remove it."
);
- }
-
- this.permanentlyRemovePoolable( poolable );
- }
- }
- }
-
protected void doInitialize() {
// nothing to do here
}
Copied:
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/handler/NonThreadSafePoolableComponentHandler.java
(from r149541,
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/handler/PoolableComponentHandler.java)
URL:
http://svn.apache.org/viewcvs/cocoon/trunk/src/core/java/org/apache/cocoon/core/container/handler/NonThreadSafePoolableComponentHandler.java?view=diff&rev=149543&p1=cocoon/trunk/src/core/java/org/apache/cocoon/core/container/handler/PoolableComponentHandler.java&r1=149541&p2=cocoon/trunk/src/core/java/org/apache/cocoon/core/container/handler/NonThreadSafePoolableComponentHandler.java&r2=149543
==============================================================================
---
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/handler/PoolableComponentHandler.java
(original)
+++
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/handler/NonThreadSafePoolableComponentHandler.java
Wed Feb 2 10:38:45 2005
@@ -53,7 +53,7 @@
*
* @version CVS $Id$
*/
-public class PoolableComponentHandler
+public class NonThreadSafePoolableComponentHandler
extends AbstractFactoryHandler {
/** The default max size of the pool */
@@ -92,7 +92,7 @@
* managed by the ComponentHandler.
* @param config The configuration to use to configure the pool.
*/
- public PoolableComponentHandler( final ComponentInfo info,
+ public NonThreadSafePoolableComponentHandler( final ComponentInfo info,
final Logger logger,
final ComponentFactory factory,
final Configuration config )
@@ -150,7 +150,7 @@
* @throws Exception An exception may be thrown as described above or if
there is an exception
* thrown by the ObjectFactory's newInstance() method.
*/
- protected Object doGet() throws Exception {
+ protected Object getFromPool() throws Exception {
Object poolable;
synchronized( this.semaphore ) {
// Look for a Poolable at the end of the m_ready list
@@ -185,7 +185,7 @@
*
* @param poolable Poolable to return to the pool.
*/
- protected void doPut( final Object poolable ) {
+ protected void putIntoPool( final Object poolable ) {
try {
this.factory.enteringPool(poolable);
} catch (Exception ignore) {
@@ -227,5 +227,20 @@
protected void doInitialize() {
// nothing to do here
+ }
+
+
+ /* (non-Javadoc)
+ * @see
org.apache.cocoon.core.container.handler.AbstractComponentHandler#doGet()
+ */
+ protected Object doGet() throws Exception {
+ return this.getFromPool();
+ }
+
+ /* (non-Javadoc)
+ * @see
org.apache.cocoon.core.container.handler.AbstractComponentHandler#doPut(java.lang.Object)
+ */
+ protected void doPut(Object component) throws Exception {
+ this.putIntoPool(component);
}
}