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 22:19:54 UTC
svn commit: r1338875 - in /openjpa/branches/1.2.x:
openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java
openjpa-lib/src/main/java/org/apache/openjpa/lib/util/concurrent/ConcurrentReferenceHashSet.java
Author: jgrassel
Date: Tue May 15 20:19:53 2012
New Revision: 1338875
URL: http://svn.apache.org/viewvc?rev=1338875&view=rev
Log:
OPENJPA-2042: Diagnostics for Application Managed EntityManagerFactory leaks.
Modified:
openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java
openjpa/branches/1.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/concurrent/ConcurrentReferenceHashSet.java
Modified: openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java?rev=1338875&r1=1338874&r2=1338875&view=diff
==============================================================================
--- openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java (original)
+++ openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCRegistry.java Tue May 15 20:19:53 2012
@@ -21,12 +21,12 @@ package org.apache.openjpa.enhance;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
-import java.util.LinkedList;
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;
import org.apache.openjpa.util.InvalidStateException;
@@ -47,7 +47,9 @@ public class PCRegistry {
(ReferenceMap.WEAK, ReferenceMap.HARD);
// register class listeners
- private static final Collection _listeners = new LinkedList();
+ // Weak reference prevents OutOfMemeoryError as described in OPENJPA-2042
+ private static final Collection<RegisterClassListener> _listeners =
+ new ConcurrentReferenceHashSet<RegisterClassListener>(ConcurrentReferenceHashSet.WEAK);
/**
* Register a {@link RegisterClassListener}.
@@ -209,8 +211,11 @@ public class PCRegistry {
_metas.put(pcClass, meta);
}
synchronized (_listeners) {
- for (Iterator i = _listeners.iterator(); i.hasNext();)
- ((RegisterClassListener) i.next()).register(pcClass);
+ for (RegisterClassListener r : _listeners) {
+ if (r != null) {
+ r.register(pcClass);
+ }
+ }
}
}
Modified: openjpa/branches/1.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/concurrent/ConcurrentReferenceHashSet.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/concurrent/ConcurrentReferenceHashSet.java?rev=1338875&r1=1338874&r2=1338875&view=diff
==============================================================================
--- openjpa/branches/1.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/concurrent/ConcurrentReferenceHashSet.java (original)
+++ openjpa/branches/1.2.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/concurrent/ConcurrentReferenceHashSet.java Tue May 15 20:19:53 2012
@@ -35,7 +35,7 @@ import org.apache.commons.collections.se
* @author Abe White
* @nojavadoc
*/
-public class ConcurrentReferenceHashSet implements Set, Serializable {
+public class ConcurrentReferenceHashSet<E> implements Set<E>, Serializable {
/**
* Hard reference marker.
@@ -54,7 +54,7 @@ public class ConcurrentReferenceHashSet
private static final Object DUMMY_VAL = new Object();
- private final Set _set;
+ private final Set<E> _set;
/**
* Construct a set with the given reference type.
@@ -70,11 +70,11 @@ public class ConcurrentReferenceHashSet
}
}
- public boolean add(Object obj) {
+ public boolean add(E obj) {
return _set.add(obj);
}
- public boolean addAll(Collection coll) {
+ public boolean addAll(Collection<? extends E> coll) {
return _set.addAll(coll);
}
@@ -86,7 +86,7 @@ public class ConcurrentReferenceHashSet
return _set.contains(obj);
}
- public boolean containsAll(Collection coll) {
+ public boolean containsAll(Collection<?> coll) {
return _set.containsAll(coll);
}
@@ -94,7 +94,7 @@ public class ConcurrentReferenceHashSet
return _set.isEmpty();
}
- public Iterator iterator() {
+ public Iterator<E> iterator() {
return _set.iterator();
}
@@ -102,11 +102,11 @@ public class ConcurrentReferenceHashSet
return _set.remove(obj);
}
- public boolean removeAll(Collection coll) {
+ public boolean removeAll(Collection<?> coll) {
return _set.removeAll(coll);
}
- public boolean retainAll(Collection coll) {
+ public boolean retainAll(Collection<?> coll) {
return _set.retainAll(coll);
}
@@ -118,7 +118,7 @@ public class ConcurrentReferenceHashSet
return _set.toArray();
}
- public Object[] toArray(Object[] arr) {
+ public <T> T[] toArray(T[] arr) {
return _set.toArray(arr);
}