You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by mi...@apache.org on 2011/09/15 17:28:19 UTC

svn commit: r1171135 - /openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java

Author: mikedd
Date: Thu Sep 15 15:28:19 2011
New Revision: 1171135

URL: http://svn.apache.org/viewvc?rev=1171135&view=rev
Log:
OPENJPA-2042: Use weak reference HashSet to store registered class listeners.
Submitted By: Jacob Nowosatka

Modified:
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java?rev=1171135&r1=1171134&r2=1171135&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java Thu Sep 15 15:28:19 2011
@@ -27,6 +27,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;
 
 /**
@@ -43,9 +44,12 @@ public class PCRegistry {
     // map of persistent classes to meta structures; weak so the VM can GC classes
     private static final Map<Class<?>,Meta> _metas = new ConcurrentReferenceHashMap(ReferenceMap.WEAK, 
             ReferenceMap.HARD);
-
+    
     // register class listeners
-    private static final Collection<RegisterClassListener> _listeners = new LinkedHashSet<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}.