You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@turbine.apache.org by gk...@apache.org on 2021/09/08 12:44:03 UTC
[turbine-fulcrum-pool] 31/49: Fix/update javadocs for pool and
localization for mvn site to build cleanly
This is an automated email from the ASF dual-hosted git repository.
gk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/turbine-fulcrum-pool.git
commit 0fc9ae3941006ceaae780e0cb2e1a5728967eee0
Author: Jeffery Painter <pa...@apache.org>
AuthorDate: Mon Nov 5 15:42:25 2018 +0000
Fix/update javadocs for pool and localization for mvn site to build cleanly
git-svn-id: https://svn.apache.org/repos/asf/turbine/fulcrum/trunk/pool@1845817 13f79535-47bb-0310-9956-ffa450edef68
---
.../apache/fulcrum/pool/ArrayCtorRecyclable.java | 2 +
.../org/apache/fulcrum/pool/BoundedBuffer.java | 2 +-
.../apache/fulcrum/pool/DefaultPoolService.java | 732 ++++++++++-----------
.../apache/fulcrum/pool/InitableRecyclable.java | 9 +-
src/java/org/apache/fulcrum/pool/PoolBuffer.java | 16 +-
src/java/org/apache/fulcrum/pool/PoolService.java | 4 +-
.../org/apache/fulcrum/pool/PoolServiceTest.java | 167 ++---
7 files changed, 451 insertions(+), 481 deletions(-)
diff --git a/src/java/org/apache/fulcrum/pool/ArrayCtorRecyclable.java b/src/java/org/apache/fulcrum/pool/ArrayCtorRecyclable.java
index fd335c0..68dbae3 100644
--- a/src/java/org/apache/fulcrum/pool/ArrayCtorRecyclable.java
+++ b/src/java/org/apache/fulcrum/pool/ArrayCtorRecyclable.java
@@ -35,6 +35,8 @@ public interface ArrayCtorRecyclable extends Recyclable
* Recycles the object for a new client. Objects implementing
* this interface must also provide a matching constructor.
* The recycle methods must call their super.
+ *
+ * @param params the parameters to recycle
*/
public void recycle(Object[] params);
}
diff --git a/src/java/org/apache/fulcrum/pool/BoundedBuffer.java b/src/java/org/apache/fulcrum/pool/BoundedBuffer.java
index 40abd8d..56bfbed 100644
--- a/src/java/org/apache/fulcrum/pool/BoundedBuffer.java
+++ b/src/java/org/apache/fulcrum/pool/BoundedBuffer.java
@@ -107,7 +107,7 @@ public class BoundedBuffer
/**
* Puts an item in the buffer only if there is capacity available.
*
- * @param item the item to be inserted.
+ * @param x the item to be inserted.
* @return true if accepted, else false.
*/
public synchronized boolean offer(Object x)
diff --git a/src/java/org/apache/fulcrum/pool/DefaultPoolService.java b/src/java/org/apache/fulcrum/pool/DefaultPoolService.java
index 30b4739..b2a5995 100644
--- a/src/java/org/apache/fulcrum/pool/DefaultPoolService.java
+++ b/src/java/org/apache/fulcrum/pool/DefaultPoolService.java
@@ -34,402 +34,360 @@ import org.apache.fulcrum.factory.FactoryException;
import org.apache.fulcrum.factory.FactoryService;
/**
- * The Pool Service extends the Factory Service by adding support
- * for pooling instantiated objects. When a new instance is
- * requested, the service first checks its pool if one is available.
- * If the the pool is empty, a new instance will be requested
- * from the FactoryService.
+ * The Pool Service extends the Factory Service by adding support for pooling
+ * instantiated objects. When a new instance is requested, the service first
+ * checks its pool if one is available. If the the pool is empty, a new instance
+ * will be requested from the FactoryService.
*
- * For objects implementing the Recyclable interface, a recycle
- * method will be called, when they taken from the pool, and
- * a dispose method, when they are returned to the pool.
+ * For objects implementing the Recyclable interface, a recycle method will be
+ * called, when they taken from the pool, and a dispose method, when they are
+ * returned to the pool.
*
* @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
* @author <a href="mailto:mcconnell@apache.org">Stephen McConnell</a>
* @version $Id$
*
- * @avalon.component name="pool" lifestyle="transient"
- * @avalon.service type="org.apache.fulcrum.pool.PoolService"
+ * avalon.component name="pool" lifestyle="transient"
+ * avalon.service type="org.apache.fulcrum.pool.PoolService"
*/
-public class DefaultPoolService extends AbstractLogEnabled implements PoolService, Serviceable, Disposable, Initializable, Configurable
-{
- /**
- * The property specifying the pool capacity.
- */
- public static final String POOL_CAPACITY = "capacity";
- /**
- * The default capacity of pools.
- */
- private int poolCapacity = DEFAULT_POOL_CAPACITY;
- /**
- * The pool repository, one pool for each class.
- */
- private HashMap<String, PoolBuffer> poolRepository = new HashMap<>();
- private Map<String, Integer> capacityMap;
- private FactoryService factoryService;
- private ServiceManager manager;
+public class DefaultPoolService extends AbstractLogEnabled
+ implements PoolService, Serviceable, Disposable, Initializable, Configurable {
+ /**
+ * The property specifying the pool capacity.
+ */
+ public static final String POOL_CAPACITY = "capacity";
+ /**
+ * The default capacity of pools.
+ */
+ private int poolCapacity = DEFAULT_POOL_CAPACITY;
+ /**
+ * The pool repository, one pool for each class.
+ */
+ private HashMap<String, PoolBuffer> poolRepository = new HashMap<>();
+ private Map<String, Integer> capacityMap;
+ private FactoryService factoryService;
+ private ServiceManager manager;
- /**
- * Gets an instance of a named class either from the pool
- * or by calling the Factory Service if the pool is empty.
- *
- * @param className the name of the class.
- * @return the instance.
- * @throws PoolException if recycling fails.
- */
- public Object getInstance(String className) throws PoolException
- {
- try
- {
- Object instance = pollInstance(className, null, null);
- return instance == null ? getFactory().getInstance(className) : instance;
- }
- catch (FactoryException fe)
- {
- throw new PoolException(fe);
- }
- }
- /**
- * Gets an instance of a named class either from the pool
- * or by calling the Factory Service if the pool is empty.
- * The specified class loader will be passed to the Factory Service.
- *
- * @param className the name of the class.
- * @param loader the class loader.
- * @return the instance.
- * @throws PoolException if recycling fails.
- */
- public Object getInstance(String className, ClassLoader loader) throws PoolException
- {
- try
- {
- Object instance = pollInstance(className, null, null);
- return instance == null ? getFactory().getInstance(className, loader) : instance;
- }
- catch (FactoryException fe)
- {
- throw new PoolException(fe);
- }
- }
- /**
- * Gets an instance of a named class either from the pool
- * or by calling the Factory Service if the pool is empty.
- * Parameters for its constructor are given as an array of objects,
- * primitive types must be wrapped with a corresponding class.
- *
- * @param className the name of the class.
- * @param loader the class loader.
- * @param params an array containing the parameters of the constructor.
- * @param signature an array containing the signature of the constructor.
- * @return the instance.
- * @throws PoolException if recycling fails.
- */
- public Object getInstance(String className, Object[] params, String[] signature) throws PoolException
- {
- try
- {
- Object instance = pollInstance(className, params, signature);
- return instance == null ? getFactory().getInstance(className, params, signature) : instance;
- }
- catch (FactoryException fe)
- {
- throw new PoolException(fe);
- }
- }
- /**
- * Gets an instance of a named class either from the pool
- * or by calling the Factory Service if the pool is empty.
- * Parameters for its constructor are given as an array of objects,
- * primitive types must be wrapped with a corresponding class.
- * The specified class loader will be passed to the Factory Service.
- *
- * @param className the name of the class.
- * @param loader the class loader.
- * @param params an array containing the parameters of the constructor.
- * @param signature an array containing the signature of the constructor.
- * @return the instance.
- * @throws PoolException if recycling fails.
- */
- public Object getInstance(String className, ClassLoader loader, Object[] params, String[] signature)
- throws PoolException
- {
- try
- {
- Object instance = pollInstance(className, params, signature);
- return instance == null ? getFactory().getInstance(className, loader, params, signature) : instance;
- }
- catch (FactoryException fe)
- {
- throw new PoolException(fe);
- }
- }
- /**
- * Tests if specified class loaders are supported for a named class.
- *
- * @param className the name of the class.
- * @return true if class loaders are supported, false otherwise.
- * @throws PoolException if test fails.
- */
- public boolean isLoaderSupported(String className) throws FactoryException
- {
- return getFactory().isLoaderSupported(className);
- }
- /**
- * Gets an instance of a specified class either from the pool
- * or by instatiating from the class if the pool is empty.
- *
- * @param clazz the class.
- * @return the instance.
- * @throws PoolException if recycling fails.
- */
- @SuppressWarnings("unchecked")
- public Object getInstance(Class clazz) throws PoolException
- {
- try
- {
- Object instance = pollInstance(clazz.getName(), null, null);
- return instance == null ? factoryService.getInstance(clazz) : instance;
- }
- catch (FactoryException fe)
- {
- throw new PoolException(fe);
- }
- }
- /**
- * Gets an instance of a specified class either from the pool
- * or by instatiating from the class if the pool is empty.
- *
- * @todo There is a whacky .toString() on the clazzz, but otherwise it
- * won't compile..
- * @param clazz the class.
- * @param params an array containing the parameters of the constructor.
- * @param signature an array containing the signature of the constructor.
- * @return the instance.
- * @throws PoolException if recycling fails.
- */
- public Object getInstance(Class clazz, Object params[], String signature[]) throws PoolException
- {
- try
- {
- Object instance = pollInstance(clazz.getName(), params, signature);
- //FactoryService fs = getFactory();
- return instance == null ? getFactory().getInstance(clazz.toString(), params, signature) : instance;
- }
- catch (FactoryException fe)
- {
- throw new PoolException(fe);
- }
- }
- /**
- * Puts a used object back to the pool. Objects implementing
- * the Recyclable interface can provide a recycle method to
- * be called when they are reused and a dispose method to be
- * called when they are returned to the pool.
- *
- * @param instance the object instance to recycle.
- * @return true if the instance was accepted.
- */
- @SuppressWarnings("unchecked")
- public boolean putInstance(Object instance)
- {
- if (instance != null)
- {
- HashMap<String, PoolBuffer> repository = poolRepository;
- String className = instance.getClass().getName();
- PoolBuffer pool = (PoolBuffer) repository.get(className);
- if (pool == null)
- {
- pool = new PoolBuffer(getCapacity(className));
- repository = (HashMap<String, PoolBuffer>) repository.clone();
- repository.put(className, pool);
- poolRepository = repository;
- if (instance instanceof ArrayCtorRecyclable)
- {
- pool.setArrayCtorRecyclable(true);
- }
- }
- return pool.offer(instance);
- }
- else
- {
- return false;
- }
- }
- /**
- * Gets the capacity of the pool for a named class.
- *
- * @param className the name of the class.
- */
- public int getCapacity(String className)
- {
- PoolBuffer pool = (PoolBuffer) poolRepository.get(className);
- if (pool == null)
- {
- /* Check class specific capacity. */
- int capacity = poolCapacity;
- if (capacityMap != null)
- {
- Integer cap = (Integer) capacityMap.get(className);
- if (cap != null)
- {
- capacity = cap.intValue();
- }
- }
- return capacity;
- }
- else
- {
- return pool.capacity();
- }
- }
- /**
- * Sets the capacity of the pool for a named class.
- * Note that the pool will be cleared after the change.
- *
- * @param className the name of the class.
- * @param capacity the new capacity.
- */
- @SuppressWarnings("unchecked")
- public void setCapacity(String className, int capacity)
- {
- HashMap<String, PoolBuffer> repository = poolRepository;
- repository = repository != null ? (HashMap<String, PoolBuffer>) repository.clone() : new HashMap<String, PoolBuffer>();
- repository.put(className, new PoolBuffer(capacity));
- poolRepository = repository;
- }
- /**
- * Gets the current size of the pool for a named class.
- *
- * @param className the name of the class.
- */
- public int getSize(String className)
- {
- PoolBuffer pool = (PoolBuffer) poolRepository.get(className);
- return pool != null ? pool.size() : 0;
- }
- /**
- * Clears instances of a named class from the pool.
- *
- * @param className the name of the class.
- */
- @SuppressWarnings("unchecked")
- public void clearPool(String className)
- {
- HashMap<String, PoolBuffer> repository = poolRepository;
- if (repository.get(className) != null)
- {
- repository = (HashMap<String, PoolBuffer>) repository.clone();
- repository.remove(className);
- poolRepository = repository;
- }
- }
- /**
- * Clears all instances from the pool.
- */
- public void clearPool()
- {
- poolRepository = new HashMap<String, PoolBuffer>();
- }
- /**
- * Polls and recycles an object of the named class from the pool.
- *
- * @param className the name of the class.
- * @param params an array containing the parameters of the constructor.
- * @param signature an array containing the signature of the constructor.
- * @return the object or null.
- * @throws PoolException if recycling fails.
- */
- private Object pollInstance(String className, Object[] params, String[] signature) throws PoolException
- {
- PoolBuffer pool = (PoolBuffer) poolRepository.get(className);
- return pool != null ? pool.poll(params, signature, factoryService) : null;
- }
- /**
- * Gets the factory service.
- *
- * @return the factory service.
- */
- protected FactoryService getFactory()
- {
- return factoryService;
- }
-
- // ---------------- Avalon Lifecycle Methods ---------------------
- /**
- * Avalon component lifecycle method
- */
- public void configure(Configuration conf)
- {
- final Configuration capacities = conf.getChild(POOL_CAPACITY, false);
- if (capacities != null)
- {
- Configuration defaultConf = capacities.getChild("default");
- int capacity = defaultConf.getValueAsInteger(DEFAULT_POOL_CAPACITY);
- if (capacity <= 0)
- {
- throw new IllegalArgumentException("Capacity must be >0");
- }
- poolCapacity = capacity;
- Configuration[] nameVal = capacities.getChildren();
- for (int i = 0; i < nameVal.length; i++)
- {
- String key = nameVal[i].getName();
- if (!"default".equals(key))
- {
- capacity = nameVal[i].getValueAsInteger(poolCapacity);
- if (capacity < 0)
- {
- capacity = poolCapacity;
- }
- if (capacityMap == null)
- {
- capacityMap = new HashMap<String, Integer>();
- }
- capacityMap.put(key, new Integer(capacity));
- }
- }
- }
- }
+ /**
+ * Gets an instance of a named class either from the pool or by calling the
+ * Factory Service if the pool is empty.
+ *
+ * @param className the name of the class.
+ * @return the instance.
+ * @throws PoolException if recycling fails.
+ */
+ public Object getInstance(String className) throws PoolException {
+ try {
+ Object instance = pollInstance(className, null, null);
+ return instance == null ? getFactory().getInstance(className) : instance;
+ } catch (FactoryException fe) {
+ throw new PoolException(fe);
+ }
+ }
- /**
- * Avalon component lifecycle method
- * @avalon.dependency type="org.apache.fulcrum.factory.FactoryService"
- */
- public void service(ServiceManager manager)
- {
- this.manager = manager;
- }
+ /**
+ * Gets an instance of a named class either from the pool or by calling the
+ * Factory Service if the pool is empty. The specified class loader will be
+ * passed to the Factory Service.
+ *
+ * @param className the name of the class.
+ * @param loader the class loader.
+ * @return the instance.
+ * @throws PoolException if recycling fails.
+ */
+ public Object getInstance(String className, ClassLoader loader) throws PoolException {
+ try {
+ Object instance = pollInstance(className, null, null);
+ return instance == null ? getFactory().getInstance(className, loader) : instance;
+ } catch (FactoryException fe) {
+ throw new PoolException(fe);
+ }
+ }
- /**
- * Avalon component lifecycle method
- * Initializes the service by loading default class loaders
- * and customized object factories.
- *
- * @throws InitializationException if initialization fails.
- */
- public void initialize() throws Exception
- {
- try
- {
- factoryService = (FactoryService) manager.lookup(FactoryService.ROLE);
- }
- catch (Exception e)
- {
- throw new Exception(
- "DefaultPoolService.initialize: Failed to get a Factory object", e);
- }
- }
+ /**
+ * Gets an instance of a named class either from the pool or by calling the
+ * Factory Service if the pool is empty. Parameters for its constructor are
+ * given as an array of objects, primitive types must be wrapped with a
+ * corresponding class.
+ *
+ * @param className the name of the class.
+ * @param params an array containing the parameters of the constructor.
+ * @param signature an array containing the signature of the constructor.
+ * @return the instance.
+ * @throws PoolException if recycling fails.
+ */
+ public Object getInstance(String className, Object[] params, String[] signature) throws PoolException {
+ try {
+ Object instance = pollInstance(className, params, signature);
+ return instance == null ? getFactory().getInstance(className, params, signature) : instance;
+ } catch (FactoryException fe) {
+ throw new PoolException(fe);
+ }
+ }
- /**
- * Avalon component lifecycle method
- */
- public void dispose()
- {
- if (factoryService != null)
- {
- manager.release(factoryService);
- }
- factoryService = null;
- manager = null;
- }
+ /**
+ * Gets an instance of a named class either from the pool or by calling the
+ * Factory Service if the pool is empty. Parameters for its constructor are
+ * given as an array of objects, primitive types must be wrapped with a
+ * corresponding class. The specified class loader will be passed to the Factory
+ * Service.
+ *
+ * @param className the name of the class.
+ * @param loader the class loader.
+ * @param params an array containing the parameters of the constructor.
+ * @param signature an array containing the signature of the constructor.
+ * @return the instance.
+ * @throws PoolException if recycling fails.
+ */
+ public Object getInstance(String className, ClassLoader loader, Object[] params, String[] signature)
+ throws PoolException {
+ try {
+ Object instance = pollInstance(className, params, signature);
+ return instance == null ? getFactory().getInstance(className, loader, params, signature) : instance;
+ } catch (FactoryException fe) {
+ throw new PoolException(fe);
+ }
+ }
+
+ /**
+ * Tests if specified class loaders are supported for a named class.
+ *
+ * @param className the name of the class.
+ * @return true if class loaders are supported, false otherwise.
+ * @throws FactoryException if test fails.
+ */
+ public boolean isLoaderSupported(String className) throws FactoryException {
+ return getFactory().isLoaderSupported(className);
+ }
+
+ /**
+ * Gets an instance of a specified class either from the pool or by instatiating
+ * from the class if the pool is empty.
+ *
+ * @param clazz the class.
+ * @return the instance.
+ * @throws PoolException if recycling fails.
+ */
+ @SuppressWarnings("unchecked")
+ public Object getInstance(Class clazz) throws PoolException {
+ try {
+ Object instance = pollInstance(clazz.getName(), null, null);
+ return instance == null ? factoryService.getInstance(clazz) : instance;
+ } catch (FactoryException fe) {
+ throw new PoolException(fe);
+ }
+ }
+
+ /**
+ * Gets an instance of a specified class either from the pool or by instatiating
+ * from the class if the pool is empty.
+ *
+ * @param clazz the class.
+ * @param params an array containing the parameters of the constructor.
+ * @param signature an array containing the signature of the constructor.
+ * @return the instance.
+ * @throws PoolException if recycling fails.
+ */
+ public Object getInstance(Class clazz, Object params[], String signature[]) throws PoolException {
+
+ try {
+ Object instance = pollInstance(clazz.getName(), params, signature);
+ // FactoryService fs = getFactory();
+
+ // TODO There is a whacky .toString() on the clazz object,
+ // but otherwise it won't compile
+ return instance == null ? getFactory().getInstance(clazz.toString(), params, signature) : instance;
+
+ } catch (FactoryException fe) {
+ throw new PoolException(fe);
+ }
+ }
+
+ /**
+ * Puts a used object back to the pool. Objects implementing the Recyclable
+ * interface can provide a recycle method to be called when they are reused and
+ * a dispose method to be called when they are returned to the pool.
+ *
+ * @param instance the object instance to recycle.
+ * @return true if the instance was accepted.
+ */
+ @SuppressWarnings("unchecked")
+ public boolean putInstance(Object instance) {
+ if (instance != null) {
+ HashMap<String, PoolBuffer> repository = poolRepository;
+ String className = instance.getClass().getName();
+ PoolBuffer pool = (PoolBuffer) repository.get(className);
+ if (pool == null) {
+ pool = new PoolBuffer(getCapacity(className));
+ repository = (HashMap<String, PoolBuffer>) repository.clone();
+ repository.put(className, pool);
+ poolRepository = repository;
+ if (instance instanceof ArrayCtorRecyclable) {
+ pool.setArrayCtorRecyclable(true);
+ }
+ }
+ return pool.offer(instance);
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Gets the capacity of the pool for a named class.
+ *
+ * @param className the name of the class.
+ */
+ public int getCapacity(String className) {
+ PoolBuffer pool = (PoolBuffer) poolRepository.get(className);
+ if (pool == null) {
+ /* Check class specific capacity. */
+ int capacity = poolCapacity;
+ if (capacityMap != null) {
+ Integer cap = (Integer) capacityMap.get(className);
+ if (cap != null) {
+ capacity = cap.intValue();
+ }
+ }
+ return capacity;
+ } else {
+ return pool.capacity();
+ }
+ }
+
+ /**
+ * Sets the capacity of the pool for a named class. Note that the pool will be
+ * cleared after the change.
+ *
+ * @param className the name of the class.
+ * @param capacity the new capacity.
+ */
+ @SuppressWarnings("unchecked")
+ public void setCapacity(String className, int capacity) {
+ HashMap<String, PoolBuffer> repository = poolRepository;
+ repository = repository != null ? (HashMap<String, PoolBuffer>) repository.clone()
+ : new HashMap<String, PoolBuffer>();
+ repository.put(className, new PoolBuffer(capacity));
+ poolRepository = repository;
+ }
+
+ /**
+ * Gets the current size of the pool for a named class.
+ *
+ * @param className the name of the class.
+ */
+ public int getSize(String className) {
+ PoolBuffer pool = (PoolBuffer) poolRepository.get(className);
+ return pool != null ? pool.size() : 0;
+ }
+
+ /**
+ * Clears instances of a named class from the pool.
+ *
+ * @param className the name of the class.
+ */
+ @SuppressWarnings("unchecked")
+ public void clearPool(String className) {
+ HashMap<String, PoolBuffer> repository = poolRepository;
+ if (repository.get(className) != null) {
+ repository = (HashMap<String, PoolBuffer>) repository.clone();
+ repository.remove(className);
+ poolRepository = repository;
+ }
+ }
+
+ /**
+ * Clears all instances from the pool.
+ */
+ public void clearPool() {
+ poolRepository = new HashMap<String, PoolBuffer>();
+ }
+
+ /**
+ * Polls and recycles an object of the named class from the pool.
+ *
+ * @param className the name of the class.
+ * @param params an array containing the parameters of the constructor.
+ * @param signature an array containing the signature of the constructor.
+ * @return the object or null.
+ * @throws PoolException if recycling fails.
+ */
+ private Object pollInstance(String className, Object[] params, String[] signature) throws PoolException {
+ PoolBuffer pool = (PoolBuffer) poolRepository.get(className);
+ return pool != null ? pool.poll(params, signature, factoryService) : null;
+ }
+
+ /**
+ * Gets the factory service.
+ *
+ * @return the factory service.
+ */
+ protected FactoryService getFactory() {
+ return factoryService;
+ }
+
+ // ---------------- Avalon Lifecycle Methods ---------------------
+ /**
+ * Avalon component lifecycle method
+ */
+ public void configure(Configuration conf) {
+ final Configuration capacities = conf.getChild(POOL_CAPACITY, false);
+ if (capacities != null) {
+ Configuration defaultConf = capacities.getChild("default");
+ int capacity = defaultConf.getValueAsInteger(DEFAULT_POOL_CAPACITY);
+ if (capacity <= 0) {
+ throw new IllegalArgumentException("Capacity must be >0");
+ }
+ poolCapacity = capacity;
+ Configuration[] nameVal = capacities.getChildren();
+ for (int i = 0; i < nameVal.length; i++) {
+ String key = nameVal[i].getName();
+ if (!"default".equals(key)) {
+ capacity = nameVal[i].getValueAsInteger(poolCapacity);
+ if (capacity < 0) {
+ capacity = poolCapacity;
+ }
+ if (capacityMap == null) {
+ capacityMap = new HashMap<String, Integer>();
+ }
+ capacityMap.put(key, new Integer(capacity));
+ }
+ }
+ }
+ }
+
+ /**
+ * Avalon component lifecycle method
+ *
+ * {@link org.apache.fulcrum.factory.FactoryService}
+ *
+ * @param manager the service manager
+ */
+ public void service(ServiceManager manager) {
+ this.manager = manager;
+ }
+
+ /**
+ * Avalon component lifecycle method Initializes the service by loading default
+ * class loaders and customized object factories.
+ *
+ * @throws Exception if initialization fails.
+ */
+ public void initialize() throws Exception {
+ try {
+ factoryService = (FactoryService) manager.lookup(FactoryService.ROLE);
+ } catch (Exception e) {
+ throw new Exception("DefaultPoolService.initialize: Failed to get a Factory object", e);
+ }
+ }
+
+ /**
+ * Avalon component lifecycle method
+ */
+ public void dispose() {
+ if (factoryService != null) {
+ manager.release(factoryService);
+ }
+ factoryService = null;
+ manager = null;
+ }
}
diff --git a/src/java/org/apache/fulcrum/pool/InitableRecyclable.java b/src/java/org/apache/fulcrum/pool/InitableRecyclable.java
index f6683a6..7c78ca3 100644
--- a/src/java/org/apache/fulcrum/pool/InitableRecyclable.java
+++ b/src/java/org/apache/fulcrum/pool/InitableRecyclable.java
@@ -1,6 +1,5 @@
package org.apache.fulcrum.pool;
-
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -21,13 +20,10 @@ package org.apache.fulcrum.pool;
*/
-
-
-
/**
* An interface for objects that can be pooled and recycled several times
* by different clients. Pooled objects that implement this interface
- * use no argument ctor and recycle methods. Initialization is taken
+ * use no argument or recycle methods. Initialization is taken
* care of using the init method. This is a way to avoid
* introspection/reflection when pooling an object.
*
@@ -39,6 +35,9 @@ public interface InitableRecyclable extends Recyclable
/**
* This method should be called after retrieving the object from
* the pool.
+ *
+ * @param initObj the object to initialize
+ * @throws PoolException pool exception if failed to initialize
*/
public void init(Object initObj) throws PoolException;
}
diff --git a/src/java/org/apache/fulcrum/pool/PoolBuffer.java b/src/java/org/apache/fulcrum/pool/PoolBuffer.java
index 1c1e97d..8269fb1 100644
--- a/src/java/org/apache/fulcrum/pool/PoolBuffer.java
+++ b/src/java/org/apache/fulcrum/pool/PoolBuffer.java
@@ -64,8 +64,12 @@ public class PoolBuffer
}
/**
* Polls for an instance from the pool.
- * @param factoryService
- *
+ *
+ *
+ * @param params object paramaters
+ * @param signature signature of the class
+ * @param factoryService service to add
+ * @throws PoolException if service failed to be found
* @return an instance or null.
*/
public Object poll(Object[] params, String[] signature, FactoryService factoryService) throws PoolException
@@ -98,7 +102,9 @@ public class PoolBuffer
clazz.getMethod(
"recycle",
factoryService.getSignature(clazz, params, signature));
- ArrayList<Recycler> cache =
+
+ @SuppressWarnings("unchecked")
+ ArrayList<Recycler> cache =
recyclers != null ? (ArrayList<Recycler>) recyclers.clone() : new ArrayList<Recycler>();
cache.add(new Recycler(recycle, signature));
recyclers = cache;
@@ -120,10 +126,12 @@ public class PoolBuffer
}
return instance;
}
+
/**
* Offers an instance to the pool.
- *
+ *
* @param instance an instance.
+ * @return false if failed to dispose
*/
public boolean offer(Object instance)
{
diff --git a/src/java/org/apache/fulcrum/pool/PoolService.java b/src/java/org/apache/fulcrum/pool/PoolService.java
index 2c0d654..6e8ec2c 100644
--- a/src/java/org/apache/fulcrum/pool/PoolService.java
+++ b/src/java/org/apache/fulcrum/pool/PoolService.java
@@ -90,6 +90,7 @@ public interface PoolService
* Gets the capacity of the pool for a named class.
*
* @param className the name of the class.
+ * @return total capacity
*/
public int getCapacity(String className);
@@ -106,7 +107,8 @@ public interface PoolService
/**
* Gets the current size of the pool for a named class.
*
- * @param className the name of the class.
+ * @param className the name of the class
+ * @return the size of the pool for the class
*/
public int getSize(String className);
diff --git a/src/test/org/apache/fulcrum/pool/PoolServiceTest.java b/src/test/org/apache/fulcrum/pool/PoolServiceTest.java
index 6130e95..5724e96 100644
--- a/src/test/org/apache/fulcrum/pool/PoolServiceTest.java
+++ b/src/test/org/apache/fulcrum/pool/PoolServiceTest.java
@@ -25,88 +25,89 @@ import org.apache.fulcrum.testcontainer.BaseUnitTest;
* @author Eric Pugh
* @author <a href="mailto:mcconnell@apache.org">Stephen McConnell</a>
*
- * To change the template for this generated type comment go to
- * Window>Preferences>Java>Code Generation>Code and Comments
*/
-public class PoolServiceTest extends BaseUnitTest
-{
- private PoolService poolService = null;
- /**
- * Defines the testcase name for JUnit.
- *
- * @param name the testcase's name.
- */
- public PoolServiceTest(String name)
- {
- super(name);
- }
-
- public void setUp() throws Exception
- {
- super.setUp();
-
- poolService = (PoolService) this.resolve( PoolService.class.getName() );
- }
-
- /*
- * Class to test for Object getInstance(Class)
- */
- public void testGetInstanceClass() throws PoolException
- {
- Object object = poolService.getInstance(StringBuilder.class);
- assertTrue(object instanceof StringBuilder);
-
- }
-
- public void testPutInstance()
- {
- String s = "I am a string";
- assertEquals(0, poolService.getSize("java.lang.String"));
- poolService.putInstance(s);
- assertEquals(1, poolService.getSize("java.lang.String"));
-
- }
- public void testGetSetCapacity()
- {
- assertEquals(128, poolService.getCapacity("java.lang.String"));
- poolService.setCapacity("java.lang.String", 278);
- assertEquals(278, poolService.getCapacity("java.lang.String"));
-
- }
- public void testGetSize()
- {
- String s = "I am a string";
- assertEquals(0, poolService.getSize("java.lang.String"));
- poolService.putInstance(s);
- assertEquals(1, poolService.getSize("java.lang.String"));
-
- }
- /*
- * Class to test for void clearPool(String)
- */
- public void testClearPoolString()
- {
- String s = "I am a string";
- assertEquals(0, poolService.getSize("java.lang.String"));
- poolService.putInstance(s);
- assertEquals(1, poolService.getSize("java.lang.String"));
- poolService.clearPool("java.lang.String");
- assertEquals(0, poolService.getSize("java.lang.String"));
-
- }
- /*
- * Class to test for void clearPool()
- */
- public void testClearPool()
- {
- String s = "I am a string";
- assertEquals(0, poolService.getSize("java.lang.String"));
- poolService.putInstance(s);
- poolService.putInstance(new Double(32));
- assertEquals(1, poolService.getSize("java.lang.String"));
- poolService.clearPool();
- assertEquals(0, poolService.getSize("java.lang.String"));
- assertEquals(0, poolService.getSize("java.lang.Double"));
-
- }
+public class PoolServiceTest extends BaseUnitTest {
+ private PoolService poolService = null;
+
+ /**
+ * Defines the testcase name for JUnit.
+ *
+ * @param name the testcase's name.
+ */
+ public PoolServiceTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Perform pool service setup
+ *
+ * @throws Exception generic exception
+ */
+ public void setUp() throws Exception {
+ super.setUp();
+
+ poolService = (PoolService) this.resolve(PoolService.class.getName());
+ }
+
+ /**
+ * Class to test for Object getInstance(Class)
+ *
+ * @throws PoolException generic exception
+ */
+ public void testGetInstanceClass() throws PoolException {
+ Object object = poolService.getInstance(StringBuilder.class);
+ assertTrue(object instanceof StringBuilder);
+
+ }
+
+ public void testPutInstance() {
+ String s = "I am a string";
+ assertEquals(0, poolService.getSize("java.lang.String"));
+ poolService.putInstance(s);
+ assertEquals(1, poolService.getSize("java.lang.String"));
+
+ }
+
+ public void testGetSetCapacity() {
+ assertEquals(128, poolService.getCapacity("java.lang.String"));
+ poolService.setCapacity("java.lang.String", 278);
+ assertEquals(278, poolService.getCapacity("java.lang.String"));
+
+ }
+
+ public void testGetSize() {
+ String s = "I am a string";
+ assertEquals(0, poolService.getSize("java.lang.String"));
+ poolService.putInstance(s);
+ assertEquals(1, poolService.getSize("java.lang.String"));
+
+ }
+
+ /*
+ * Class to test for void clearPool(String)
+ */
+ public void testClearPoolString() {
+ String s = "I am a string";
+ assertEquals(0, poolService.getSize("java.lang.String"));
+ poolService.putInstance(s);
+ assertEquals(1, poolService.getSize("java.lang.String"));
+ poolService.clearPool("java.lang.String");
+ assertEquals(0, poolService.getSize("java.lang.String"));
+
+ }
+
+ /*
+ * Class to test for void clearPool()
+ */
+ public void testClearPool() {
+ String s = "I am a string";
+ assertEquals(0, poolService.getSize("java.lang.String"));
+ poolService.putInstance(s);
+ poolService.putInstance(new Double(32));
+ assertEquals(1, poolService.getSize("java.lang.String"));
+ poolService.clearPool();
+ assertEquals(0, poolService.getSize("java.lang.String"));
+ assertEquals(0, poolService.getSize("java.lang.Double"));
+
+ }
}