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/08/02 01:46:57 UTC

svn commit: r561991 - in /openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm: BaseEjbProxyHandler.java EjbHomeProxyHandler.java EjbObjectProxyHandler.java

Author: dblevins
Date: Wed Aug  1 16:46:56 2007
New Revision: 561991

URL: http://svn.apache.org/viewvc?view=rev&rev=561991
Log:
Turned two remaining class refs info weak references

Modified:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.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=561991&r1=561990&r2=561991
==============================================================================
--- 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 Wed Aug  1 16:46:56 2007
@@ -91,9 +91,9 @@
     protected boolean doIntraVmCopy;
     protected boolean doCrossClassLoaderCopy;
     protected final InterfaceType interfaceType;
-    protected final List<Class> interfaces;
+    private final WeakReference<List<Class>> interfaces;
     private static final boolean REMOTE_COPY_ENABLED = parseRemoteCopySetting();
-    protected final Class mainInterface;
+    private final WeakReference<Class> mainInterface;
 
     public BaseEjbProxyHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces) {
         this.container = (RpcContainer) deploymentInfo.getContainer();
@@ -107,7 +107,7 @@
             interfaces = new ArrayList<Class>(deploymentInfo.getInterfaces(objectInterfaceType));
         }
 
-        this.interfaces = Collections.unmodifiableList(interfaces);
+        this.interfaces = new WeakReference(Collections.unmodifiableList(interfaces));
 
         this.doIntraVmCopy = !interfaceType.isLocal();
 
@@ -116,10 +116,10 @@
         }
 
         if (interfaceType.isHome()){
-            mainInterface = deploymentInfo.getInterface(interfaceType);
+            mainInterface = new WeakReference(deploymentInfo.getInterface(interfaceType));
         } else {
             // Then arbitrarily pick the first interface
-            mainInterface = interfaces.get(0);
+            mainInterface = new WeakReference(interfaces.get(0));
         }
     }
 
@@ -135,20 +135,20 @@
         // Home's only have one interface ever.  We don't
         // need to verify that the method invoked is in
         // it's interface.
-        if (interfaceType.isHome()) return mainInterface;
+        if (interfaceType.isHome()) return getMainInterface();
 
         Class declaringClass = method.getDeclaringClass();
 
         // If our "main" interface is or extends the method's declaring class
         // then we're good.  We know the main interface has the method being
         // invoked and it's safe to return it as the invoked interface.
-        if (declaringClass.isAssignableFrom(mainInterface)){
-            return mainInterface;
+        if (declaringClass.isAssignableFrom(getMainInterface())){
+            return getMainInterface();
         }
 
         // If the method being invoked isn't in the "main" interface
         // we need to find a suitable interface or throw an exception.
-        for (Class secondaryInterface : interfaces) {
+        for (Class secondaryInterface : getInterfaces()) {
             if (declaringClass.isAssignableFrom(secondaryInterface)){
                 return secondaryInterface;
             }
@@ -159,6 +159,14 @@
         throw new IllegalStateException("Received method invocation and cannot determine corresponding business interface: method=" + method);
     }
 
+    public List<Class> getInterfaces() {
+        return interfaces.get();
+    }
+
+    public Class getMainInterface() {
+        return mainInterface.get();
+    }
+    
     private static boolean parseRemoteCopySetting() {
         Properties properties = SystemInstance.get().getProperties();
         String value = properties.getProperty("openejb.localcopy");

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java?view=diff&rev=561991&r1=561990&r2=561991
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java Wed Aug  1 16:46:56 2007
@@ -120,17 +120,17 @@
 
             InterfaceType objectInterfaceType = this.interfaceType.getCounterpart();
 
-            EjbObjectProxyHandler handler = newEjbObjectHandler(getDeploymentInfo(), primaryKey, objectInterfaceType, this.interfaces);
+            EjbObjectProxyHandler handler = newEjbObjectHandler(getDeploymentInfo(), primaryKey, objectInterfaceType, this.getInterfaces());
 
-            List<Class> proxyInterfaces = new ArrayList<Class>(handler.interfaces.size() + 1);
+            List<Class> proxyInterfaces = new ArrayList<Class>(handler.getInterfaces().size() + 1);
 
-            proxyInterfaces.addAll(handler.interfaces);
+            proxyInterfaces.addAll(handler.getInterfaces());
             proxyInterfaces.add(IntraVmProxy.class);
 
             return ProxyManager.newProxyInstance(proxyInterfaces.toArray(new Class[]{}), handler);
 
         } catch (IllegalAccessException iae) {
-            throw new RuntimeException("Could not create IVM proxy for " + interfaces.get(0), iae);
+            throw new RuntimeException("Could not create IVM proxy for " + getInterfaces().get(0), iae);
         }
     }
 

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java?view=diff&rev=561991&r1=561990&r2=561991
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java Wed Aug  1 16:46:56 2007
@@ -164,7 +164,7 @@
     }
 
     public org.apache.openejb.ProxyInfo getProxyInfo() {
-        return new org.apache.openejb.ProxyInfo(getDeploymentInfo(), primaryKey, interfaces, interfaceType);
+        return new org.apache.openejb.ProxyInfo(getDeploymentInfo(), primaryKey, getInterfaces(), interfaceType);
     }
 
     protected Object _writeReplace(Object proxy) throws ObjectStreamException {