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);
+ }
+ }
}
}