Repository: commons-pool Updated Branches: refs/heads/master b7d06237f -> 4e57e7767
Testing POOL-324 org.apache.commons.pool2.impl.GenericObjectPool.getFactoryType() throws java.lang.ClassCastException Project: http://git-wip-us.apache.org/repos/asf/commons-pool/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-pool/commit/68b86c2c Tree: http://git-wip-us.apache.org/repos/asf/commons-pool/tree/68b86c2c Diff: http://git-wip-us.apache.org/repos/asf/commons-pool/diff/68b86c2c Branch: refs/heads/master Commit: 68b86c2c2c9071e7a07f72645d39b658a210f955 Parents: b7d0623 Author: Gary Gregory <[email protected]> Authored: Mon Mar 27 09:31:30 2017 -0700 Committer: Gary Gregory <[email protected]> Committed: Mon Mar 27 09:31:30 2017 -0700 ---------------------------------------------------------------------- .../pool2/impl/TestGenericObjectPool.java | 61 ++++++++++ .../TestSynchronizedPooledObjectFactory.java | 119 +++++++++++++++++++ 2 files changed, 180 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-pool/blob/68b86c2c/src/test/java/org/apache/commons/pool2/impl/TestGenericObjectPool.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/pool2/impl/TestGenericObjectPool.java b/src/test/java/org/apache/commons/pool2/impl/TestGenericObjectPool.java index 11a335d..f88b421 100644 --- a/src/test/java/org/apache/commons/pool2/impl/TestGenericObjectPool.java +++ b/src/test/java/org/apache/commons/pool2/impl/TestGenericObjectPool.java @@ -54,6 +54,7 @@ import org.apache.commons.pool2.WaiterFactory; import org.junit.After; import org.junit.Assert; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; /** @@ -2643,4 +2644,64 @@ public class TestGenericObjectPool extends TestBaseObjectPool { return semaphore.hasQueuedThreads(); } } + + @Test + public void testGetFactoryType() { + GenericObjectPool<String> pool = new GenericObjectPool<String>( + new BasePooledObjectFactory<String>() { + @Override + public String create() { + // fake + return null; + } + + @Override + public PooledObject<String> wrap(String obj) { + // fake + return null; + } + }); + Assert.assertNotNull((pool.getFactoryType())); + } + + @Test + @Ignore + public void testGetFactoryType_PoolUtilssynchronizedPooledFactory() { + GenericObjectPool<String> pool = new GenericObjectPool<String>( + PoolUtils.synchronizedPooledFactory(new BasePooledObjectFactory<String>() { + @Override + public String create() { + // fake + return null; + } + + @Override + public PooledObject<String> wrap(String obj) { + // fake + return null; + } + })); + Assert.assertNotNull((pool.getFactoryType())); + } + + @Test + @Ignore + public void testGetFactoryType_SynchronizedPooledObjectFactory() { + GenericObjectPool<String> pool = new GenericObjectPool<String>( + new TestSynchronizedPooledObjectFactory<String>(new BasePooledObjectFactory<String>() { + @Override + public String create() { + // fake + return null; + } + + @Override + public PooledObject<String> wrap(String obj) { + // fake + return null; + } + })); + Assert.assertNotNull((pool.getFactoryType())); + } + } http://git-wip-us.apache.org/repos/asf/commons-pool/blob/68b86c2c/src/test/java/org/apache/commons/pool2/impl/TestSynchronizedPooledObjectFactory.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/pool2/impl/TestSynchronizedPooledObjectFactory.java b/src/test/java/org/apache/commons/pool2/impl/TestSynchronizedPooledObjectFactory.java new file mode 100644 index 0000000..13d0b24 --- /dev/null +++ b/src/test/java/org/apache/commons/pool2/impl/TestSynchronizedPooledObjectFactory.java @@ -0,0 +1,119 @@ +package org.apache.commons.pool2.impl; + +import java.util.concurrent.locks.ReentrantReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock; + +import org.apache.commons.pool2.PooledObject; +import org.apache.commons.pool2.PooledObjectFactory; + +/** + * Copies PoolUtil's private static class SynchronizedPooledObjectFactory. + * + * A fully synchronized PooledObjectFactory that wraps a PooledObjectFactory and + * synchronizes access to the wrapped factory methods. + * <p> + * <b>Note:</b> This should not be used on pool implementations that already + * provide proper synchronization such as the pools provided in the Commons Pool + * library. + * </p> + */ +final class TestSynchronizedPooledObjectFactory<T> implements PooledObjectFactory<T> { + + /** Synchronization lock */ + private final WriteLock writeLock = new ReentrantReadWriteLock().writeLock(); + + /** Wrapped factory */ + private final PooledObjectFactory<T> factory; + + /** + * Create a SynchronizedPoolableObjectFactory wrapping the given factory. + * + * @param factory + * underlying factory to wrap + * @throws IllegalArgumentException + * if the factory is null + */ + TestSynchronizedPooledObjectFactory(final PooledObjectFactory<T> factory) throws IllegalArgumentException { + if (factory == null) { + throw new IllegalArgumentException("factory must not be null."); + } + this.factory = factory; + } + + /** + * {@inheritDoc} + */ + @Override + public PooledObject<T> makeObject() throws Exception { + writeLock.lock(); + try { + return factory.makeObject(); + } finally { + writeLock.unlock(); + } + } + + /** + * {@inheritDoc} + */ + @Override + public void destroyObject(final PooledObject<T> p) throws Exception { + writeLock.lock(); + try { + factory.destroyObject(p); + } finally { + writeLock.unlock(); + } + } + + /** + * {@inheritDoc} + */ + @Override + public boolean validateObject(final PooledObject<T> p) { + writeLock.lock(); + try { + return factory.validateObject(p); + } finally { + writeLock.unlock(); + } + } + + /** + * {@inheritDoc} + */ + @Override + public void activateObject(final PooledObject<T> p) throws Exception { + writeLock.lock(); + try { + factory.activateObject(p); + } finally { + writeLock.unlock(); + } + } + + /** + * {@inheritDoc} + */ + @Override + public void passivateObject(final PooledObject<T> p) throws Exception { + writeLock.lock(); + try { + factory.passivateObject(p); + } finally { + writeLock.unlock(); + } + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() { + final StringBuilder sb = new StringBuilder(); + sb.append("SynchronizedPoolableObjectFactory"); + sb.append("{factory=").append(factory); + sb.append('}'); + return sb.toString(); + } +}
