You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2007/07/31 00:32:18 UTC
svn commit: r561163 -
/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java
Author: dblevins
Date: Mon Jul 30 15:32:17 2007
New Revision: 561163
URL: http://svn.apache.org/viewvc?view=rev&rev=561163
Log:
Fix for OPENEJB-622: EntityEJBObjectHandler memory leak
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java?view=diff&rev=561163&r1=561162&r2=561163
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java Mon Jul 30 15:32:17 2007
@@ -29,7 +29,6 @@
import java.rmi.NoSuchObjectException;
import java.rmi.RemoteException;
import java.rmi.AccessException;
-import java.util.Calendar;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Properties;
@@ -45,7 +44,6 @@
import javax.ejb.EJBTransactionRolledbackException;
import javax.ejb.NoSuchEJBException;
import javax.ejb.AccessLocalException;
-import javax.ejb.EJBAccessException;
import javax.transaction.TransactionRequiredException;
import javax.transaction.TransactionRolledbackException;
@@ -59,7 +57,11 @@
import org.apache.openejb.util.proxy.ProxyManager;
public abstract class BaseEjbProxyHandler implements InvocationHandler, Serializable {
- protected static final Hashtable liveHandleRegistry = new Hashtable();
+
+ private static class ProxyRegistry {
+
+ protected final Hashtable liveHandleRegistry = new Hashtable();
+ }
public final Object deploymentID;
@@ -503,8 +505,8 @@
this.isInvalidReference = true;
}
- protected static void invalidateAllHandlers(Object key) {
- HashSet<BaseEjbProxyHandler> set = (HashSet) liveHandleRegistry.remove(key);
+ protected void invalidateAllHandlers(Object key) {
+ HashSet<BaseEjbProxyHandler> set = (HashSet) getLiveHandleRegistry().remove(key);
if (set == null) return;
synchronized (set) {
for (BaseEjbProxyHandler handler : set) {
@@ -515,8 +517,8 @@
protected abstract Object _writeReplace(Object proxy) throws ObjectStreamException;
- protected static void registerHandler(Object key, BaseEjbProxyHandler handler) {
- HashSet set = (HashSet) liveHandleRegistry.get(key);
+ protected void registerHandler(Object key, BaseEjbProxyHandler handler) {
+ HashSet set = (HashSet) getLiveHandleRegistry().get(key);
if (set != null) {
synchronized (set) {
set.add(handler);
@@ -524,7 +526,7 @@
} else {
set = new HashSet();
set.add(handler);
- liveHandleRegistry.put(key, set);
+ getLiveHandleRegistry().put(key, set);
}
}
@@ -542,4 +544,15 @@
public void setDeploymentInfo(CoreDeploymentInfo deploymentInfo) {
this.deploymentInfo = new WeakReference<CoreDeploymentInfo>(deploymentInfo);
}
+
+ public Hashtable getLiveHandleRegistry() {
+ CoreDeploymentInfo deploymentInfo = getDeploymentInfo();
+ ProxyRegistry proxyRegistry = deploymentInfo.get(ProxyRegistry.class);
+ if (proxyRegistry == null){
+ proxyRegistry = new ProxyRegistry();
+ deploymentInfo.set(ProxyRegistry.class, proxyRegistry);
+ }
+ return proxyRegistry.liveHandleRegistry;
+ }
+
}