You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by jg...@apache.org on 2012/05/15 23:20:13 UTC

svn commit: r1338900 - /openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java

Author: jgrassel
Date: Tue May 15 21:20:13 2012
New Revision: 1338900

URL: http://svn.apache.org/viewvc?rev=1338900&view=rev
Log:
OPENJPA-2042: Diagnostics for Application Managed EntityManagerFactory leaks.

Modified:
    openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java

Modified: openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java?rev=1338900&r1=1338899&r2=1338900&view=diff
==============================================================================
--- openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java (original)
+++ openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java Tue May 15 21:20:13 2012
@@ -26,6 +26,7 @@ import java.util.Map;
 import org.apache.openjpa.lib.util.Localizer;
 import org.apache.openjpa.lib.util.ReferenceMap;
 import org.apache.openjpa.lib.util.concurrent.ConcurrentReferenceHashMap;
+import org.apache.openjpa.lib.util.concurrent.ConcurrentReferenceHashSet;
 import org.apache.openjpa.util.UserException;
 
 /**
@@ -44,7 +45,9 @@ public class PCRegistry {
             ReferenceMap.HARD);
 
     // register class listeners
-    private static final Collection<RegisterClassListener> _listeners = new LinkedList<RegisterClassListener>();
+    // Weak reference prevents OutOfMemeoryError as described in OPENJPA-2042
+    private static final Collection<RegisterClassListener> _listeners = 
+            new ConcurrentReferenceHashSet<RegisterClassListener>(ConcurrentReferenceHashSet.WEAK);
 
     /**
      * Register a {@link RegisterClassListener}.
@@ -201,8 +204,11 @@ public class PCRegistry {
             _metas.put(pcClass, meta);
         }
         synchronized (_listeners) {
-            for (RegisterClassListener r : _listeners)
-                r.register(pcClass);
+            for (RegisterClassListener r : _listeners) {
+                if (r != null) {
+                    r.register(pcClass);
+                }
+            }
         }
     }