You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ma...@apache.org on 2013/10/14 23:42:34 UTC

svn commit: r1532110 - in /commons/proper/pool/trunk: ./ src/main/java/org/apache/commons/pool2/proxy/ src/test/java/org/apache/commons/pool2/impl/

Author: markt
Date: Mon Oct 14 21:42:33 2013
New Revision: 1532110

URL: http://svn.apache.org/r1532110
Log:
Fix some FindBugs warnings

Modified:
    commons/proper/pool/trunk/findbugs-exclude-filter.xml
    commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/BaseProxyHandler.java
    commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestGenericObjectPool.java
    commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestSoftRefOutOfMemory.java
    commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestSoftReferenceObjectPool.java

Modified: commons/proper/pool/trunk/findbugs-exclude-filter.xml
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/findbugs-exclude-filter.xml?rev=1532110&r1=1532109&r2=1532110&view=diff
==============================================================================
--- commons/proper/pool/trunk/findbugs-exclude-filter.xml (original)
+++ commons/proper/pool/trunk/findbugs-exclude-filter.xml Mon Oct 14 21:42:33 2013
@@ -105,8 +105,41 @@
     <Or>
       <Class name="org.apache.commons.pool2.impl.TestAbandonedObjectPool$ConcurrentBorrower" />
       <Class name="org.apache.commons.pool2.impl.TestAbandonedObjectPool$ConcurrentReturner" />
+      <Class name="org.apache.commons.pool2.impl.TestGenericKeyedObjectPool$SimpleTestThread" />
+      <Class name="org.apache.commons.pool2.impl.TestGenericObjectPool$EvictionThread" />
     </Or>
     <Method name="run" />
     <Bug pattern="DE_MIGHT_IGNORE" />
   </Match>
+  <Match>
+    <!-- Using equals is deliberate. The objects are being tested to see if  -->
+    <!-- they are the same object                                            -->
+    <Class name="org.apache.commons.pool2.impl.TestGenericKeyedObjectPool" />
+    <Method name="testMaxTotalLRU" />
+    <bug pattern="ES_COMPARING_STRINGS_WITH_EQ" />
+  </Match>
+  <Match>
+    <!-- Exception is ignored as earlier exception is more important -->
+    <Class name="org.apache.commons.pool2.impl.TestGenericObjectPool" />
+    <Method name="testMaxTotalUnderLoad" />
+    <Bug pattern="DE_MIGHT_IGNORE" />
+  </Match>
+  <Match>
+    <!-- Direct use of GC is deliberate and necessary -->
+    <Class name="org.apache.commons.pool2.impl.TestSoftRefOutOfMemory" />
+    <Mehtod name="tearDown" />
+    <Bug pattern="DM_GC" />
+  </Match>
+  <Match>
+    <!-- Use of new String() is deliberate -->
+    <Class name="org.apache.commons.pool2.impl.TestSoftRefOutOfMemory$OomeFactory" />
+    <Method name="create" />
+    <Bug pattern="DM_STRING_VOID_CTOR" />
+  </Match>
+  <Match>
+    <!-- Use of new String() is deliberate -->
+    <Class name="org.apache.commons.pool2.impl.TestSoftRefOutOfMemory$SmallPoolableObjectFactory" />
+    <Method name="create" />
+    <Bug pattern="DM_STRING_CTOR" />
+  </Match>
 </FindBugsFilter>

Modified: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/BaseProxyHandler.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/BaseProxyHandler.java?rev=1532110&r1=1532109&r2=1532110&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/BaseProxyHandler.java (original)
+++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/proxy/BaseProxyHandler.java Mon Oct 14 21:42:33 2013
@@ -50,7 +50,7 @@ class BaseProxyHandler<T> {
     void validateProxiedObject() {
         if (pooledObject == null) {
             throw new IllegalStateException("This object may no longer be " +
-            		"used as it has been returned to the Object Pool.");
+                    "used as it has been returned to the Object Pool.");
         }
     }
 

Modified: commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestGenericObjectPool.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestGenericObjectPool.java?rev=1532110&r1=1532109&r2=1532110&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestGenericObjectPool.java (original)
+++ commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestGenericObjectPool.java Mon Oct 14 21:42:33 2013
@@ -130,13 +130,7 @@ public class TestGenericObjectPool exten
         long timeBetweenEvictionRunsMillis = 8;
         boolean blockWhenExhausted = false;
         boolean lifo = false;
-        PooledObjectFactory<Object> factory = new BasePooledObjectFactory<Object>() {
-            @Override
-            public Object create() throws Exception {
-                return null;
-            }
-        };
-
+        PooledObjectFactory<Object> factory = new DummyFactory();
         GenericObjectPool<Object> pool =
                 new GenericObjectPool<Object>(factory);
         assertEquals(GenericObjectPoolConfig.DEFAULT_MAX_IDLE, pool.getMaxIdle());
@@ -1016,7 +1010,7 @@ public class TestGenericObjectPool exten
         Long[] creationTime = new Long[5] ;
         for(int i=0;i<5;i++) {
             active[i] = pool.borrowObject();
-            creationTime[i] = new Long((active[i]).getCreateTime());
+            creationTime[i] = Long.valueOf((active[i]).getCreateTime());
         }
 
         for(int i=0;i<5;i++) {
@@ -1037,23 +1031,6 @@ public class TestGenericObjectPool exten
 
     @Test(timeout=60000)
     public void testEvictionInvalid() throws Exception {
-        class InvalidFactory extends BasePooledObjectFactory<Object> {
-
-            @Override
-            public Object create() throws Exception {
-                return new Object();
-            }
-
-            @Override
-            public boolean validateObject(PooledObject<Object> obj) {
-                try {
-                    Thread.sleep(1000);
-                } catch (InterruptedException e) {
-                    // Ignore
-                }
-                return false;
-            }
-        }
 
         final GenericObjectPool<Object> pool =
                 new GenericObjectPool<Object>(new InvalidFactory());
@@ -1070,16 +1047,7 @@ public class TestGenericObjectPool exten
         pool.returnObject(p);
 
         // Run eviction in a separate thread
-        Thread t = new Thread() {
-            @Override
-            public void run() {
-                try {
-                    pool.evict();
-                } catch (Exception e) {
-                    // Ignore
-                }
-            }
-        };
+        Thread t = new EvictionThread<Object>(pool);
         t.start();
 
         // Sleep to make sure evictor has started
@@ -1127,9 +1095,9 @@ public class TestGenericObjectPool exten
         final Random random = new Random();
         for (int j = 0; j < nIterations; j++) {
             // Get a random invalidation target
-            Integer targ = new Integer(random.nextInt(nObjects));
+            Integer targ = Integer.valueOf(random.nextInt(nObjects));
             while (targets.contains(targ)) {
-                targ = new Integer(random.nextInt(nObjects));
+                targ = Integer.valueOf(random.nextInt(nObjects));
             }
             targets.add(targ);
             // Launch nThreads threads all trying to invalidate the target
@@ -1953,4 +1921,51 @@ public class TestGenericObjectPool exten
         Set<ObjectName> result = mbs.queryNames(oname, null);
         Assert.assertEquals(1, result.size());
     }
+
+
+    private static final class DummyFactory
+            extends BasePooledObjectFactory<Object> {
+        @Override
+        public Object create() throws Exception {
+            return null;
+        }
+    }
+
+
+    private static class InvalidFactory
+            extends BasePooledObjectFactory<Object> {
+
+        @Override
+        public Object create() throws Exception {
+            return new Object();
+        }
+
+        @Override
+        public boolean validateObject(PooledObject<Object> obj) {
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                // Ignore
+            }
+            return false;
+        }
+    }
+
+    private static class EvictionThread<T> extends Thread {
+
+        private final GenericObjectPool<T> pool;
+
+        public EvictionThread(GenericObjectPool<T> pool) {
+            this.pool = pool;
+        }
+
+        @Override
+        public void run() {
+            try {
+                pool.evict();
+            } catch (Exception e) {
+                // Ignore
+            }
+        }
+    }
 }

Modified: commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestSoftRefOutOfMemory.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestSoftRefOutOfMemory.java?rev=1532110&r1=1532109&r2=1532110&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestSoftRefOutOfMemory.java (original)
+++ commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestSoftRefOutOfMemory.java Mon Oct 14 21:42:33 2013
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -162,12 +162,8 @@ public class TestSoftRefOutOfMemory {
      */
     @Test
     public void testOutOfMemoryError() throws Exception {
-        pool = new SoftReferenceObjectPool<String>(new BasePooledObjectFactory<String>() {
-            @Override
-            public String create() throws Exception {
-                throw new OutOfMemoryError();
-            }
-        });
+        pool = new SoftReferenceObjectPool<String>(
+                new OomeFactory(OomeTrigger.CREATE));
 
         try {
             pool.borrowObject();
@@ -178,17 +174,8 @@ public class TestSoftRefOutOfMemory {
         }
         pool.close();
 
-        pool = new SoftReferenceObjectPool<String>(new BasePooledObjectFactory<String>() {
-            @Override
-            public String create() throws Exception {
-                return new String();
-            }
-
-            @Override
-            public boolean validateObject(PooledObject<String> obj) {
-                throw new OutOfMemoryError();
-            }
-        });
+        pool = new SoftReferenceObjectPool<String>(
+                new OomeFactory(OomeTrigger.VALIDATE));
 
         try {
             pool.borrowObject();
@@ -198,23 +185,9 @@ public class TestSoftRefOutOfMemory {
             // expected
         }
         pool.close();
-        
-        pool = new SoftReferenceObjectPool<String>(new BasePooledObjectFactory<String>() {
-            @Override
-            public String create() throws Exception {
-                return new String();
-            }
 
-            @Override
-            public boolean validateObject(PooledObject<String> obj) {
-                throw new IllegalAccessError();
-            }
-
-            @Override
-            public void destroyObject(PooledObject<String> obj) throws Exception {
-                throw new OutOfMemoryError();
-            }
-        });
+        pool = new SoftReferenceObjectPool<String>(
+                new OomeFactory(OomeTrigger.DESTROY));
 
         try {
             pool.borrowObject();
@@ -224,7 +197,6 @@ public class TestSoftRefOutOfMemory {
             // expected
         }
         pool.close();
-
     }
 
 
@@ -259,4 +231,52 @@ public class TestSoftRefOutOfMemory {
             return String.valueOf(counter) + buffer;
         }
     }
+
+    private static class OomeFactory extends BasePooledObjectFactory<String> {
+
+        private final OomeTrigger trigger;
+
+        public OomeFactory(OomeTrigger trigger) {
+            this.trigger = trigger;
+        }
+
+        @Override
+        public String create() throws Exception {
+            if (trigger.equals(OomeTrigger.CREATE)) {
+                throw new OutOfMemoryError();
+            }
+            // It seems that as of Java 1.4 String.valueOf may return an
+            // intern()'ed String this may cause problems when the tests
+            // depend on the returned object to be eventually garbaged
+            // collected. Either way, making sure a new String instance
+            // is returned eliminated false failures.
+            return new String();
+        }
+
+        @Override
+        public boolean validateObject(PooledObject<String> p) {
+            if (trigger.equals(OomeTrigger.VALIDATE)) {
+                throw new OutOfMemoryError();
+            }
+            if (trigger.equals(OomeTrigger.DESTROY)) {
+                return false;
+            } else {
+                return true;
+            }
+        }
+
+        @Override
+        public void destroyObject(PooledObject<String> p) throws Exception {
+            if (trigger.equals(OomeTrigger.DESTROY)) {
+                throw new OutOfMemoryError();
+            }
+            super.destroyObject(p);
+        }
+    }
+
+    private static enum OomeTrigger {
+        CREATE,
+        VALIDATE,
+        DESTROY
+    }
 }
\ No newline at end of file

Modified: commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestSoftReferenceObjectPool.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestSoftReferenceObjectPool.java?rev=1532110&r1=1532109&r2=1532110&view=diff
==============================================================================
--- commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestSoftReferenceObjectPool.java (original)
+++ commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestSoftReferenceObjectPool.java Mon Oct 14 21:42:33 2013
@@ -5,20 +5,19 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.commons.pool2.impl;
 
+import org.apache.commons.pool2.BasePooledObjectFactory;
 import org.apache.commons.pool2.ObjectPool;
-import org.apache.commons.pool2.PooledObject;
 import org.apache.commons.pool2.PooledObjectFactory;
 import org.apache.commons.pool2.TestBaseObjectPool;
 
@@ -29,21 +28,7 @@ public class TestSoftReferenceObjectPool
 
     @Override
     protected ObjectPool<Object> makeEmptyPool(int cap) {
-        return new SoftReferenceObjectPool<Object>(
-            new PooledObjectFactory<Object>()  {
-                int counter = 0;
-                @Override
-                public PooledObject<Object> makeObject() { return new DefaultPooledObject<Object>(String.valueOf(counter++)); }
-                @Override
-                public void destroyObject(PooledObject<Object> obj) { }
-                @Override
-                public boolean validateObject(PooledObject<Object> obj) { return true; }
-                @Override
-                public void activateObject(PooledObject<Object> obj) { }
-                @Override
-                public void passivateObject(PooledObject<Object> obj) { }
-            }
-            );
+        return new SoftReferenceObjectPool<Object>(new SimpleFactory());
     }
 
     @Override
@@ -66,4 +51,12 @@ public class TestSoftReferenceObjectPool
         return false;
     }
 
+
+    private static class SimpleFactory extends BasePooledObjectFactory<Object>  {
+        int counter = 0;
+        @Override
+        public Object create() {
+            return String.valueOf(counter++);
+        }
+    }
 }