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/04/14 06:22:32 UTC

svn commit: r528754 - in /incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core: ./ cmp/ cmp/cmp2/ entity/ ivm/ stateful/ stateless/

Author: dblevins
Date: Fri Apr 13 21:22:30 2007
New Revision: 528754

URL: http://svn.apache.org/viewvc?view=rev&rev=528754
Log:
More cleanup and consolodation around the creation of proxies

Modified:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseSessionContext.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreContext.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/ProxyFactory.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Util.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContext.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbHomeHandler.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/IntraVmServer.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEjbHomeHandler.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbHomeHandler.java

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseSessionContext.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseSessionContext.java?view=diff&rev=528754&r1=528753&r2=528754
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseSessionContext.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseSessionContext.java Fri Apr 13 21:22:30 2007
@@ -80,7 +80,6 @@
             DeploymentInfo di = threadContext.getDeploymentInfo();
 
             EjbObjectProxyHandler handler = new StatelessEjbObjectHandler(di, threadContext.getPrimaryKey(), InterfaceType.EJB_LOCAL, new ArrayList<Class>());
-            handler.setLocal(true);
             try {
                 Class[] interfaces = new Class[]{di.getLocalInterface(), IntraVmProxy.class};
                 return (EJBLocalObject) ProxyManager.newProxyInstance(interfaces, handler);

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreContext.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreContext.java?view=diff&rev=528754&r1=528753&r2=528754
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreContext.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreContext.java Fri Apr 13 21:22:30 2007
@@ -117,7 +117,7 @@
         org.apache.openejb.DeploymentInfo di = threadContext.getDeploymentInfo();
 
         EjbObjectProxyHandler handler = newEjbObjectHandler((RpcContainer) di.getContainer(), threadContext.getPrimaryKey(), di.getDeploymentID(), InterfaceType.EJB_LOCAL);
-        handler.setLocal(true);
+
         Object newProxy = null;
         try {
             Class[] interfaces = new Class[]{di.getLocalInterface(), org.apache.openejb.core.ivm.IntraVmProxy.class};

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java?view=diff&rev=528754&r1=528753&r2=528754
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java Fri Apr 13 21:22:30 2007
@@ -37,7 +37,6 @@
 import javax.naming.Context;
 
 import org.apache.openejb.Container;
-import org.apache.openejb.RpcContainer;
 import org.apache.openejb.SystemException;
 import org.apache.openejb.InterfaceType;
 import org.apache.openejb.DeploymentInfo;
@@ -45,14 +44,11 @@
 import org.apache.openejb.Injection;
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.core.cmp.KeyGenerator;
-import org.apache.openejb.core.entity.EntityEjbHomeHandler;
 import org.apache.openejb.core.ivm.EjbHomeProxyHandler;
 import org.apache.openejb.core.stateful.SessionSynchronizationTxPolicy;
 import org.apache.openejb.core.stateful.StatefulBeanManagedTxPolicy;
 import org.apache.openejb.core.stateful.StatefulContainerManagedTxPolicy;
-import org.apache.openejb.core.stateful.StatefulEjbHomeHandler;
 import org.apache.openejb.core.stateless.StatelessBeanManagedTxPolicy;
-import org.apache.openejb.core.stateless.StatelessEjbHomeHandler;
 import org.apache.openejb.core.transaction.TransactionContainer;
 import org.apache.openejb.core.transaction.TransactionPolicy;
 import org.apache.openejb.core.transaction.TxManditory;
@@ -479,17 +475,18 @@
             throw new IllegalStateException("This component has no home interface: " + getDeploymentID());
         }
         if (ejbHomeRef == null) {
-            ejbHomeRef = createEJBHomeRef();
+            ejbHomeRef = (EJBHome) EjbHomeProxyHandler.createProxy(this, InterfaceType.EJB_HOME, new ArrayList<Class>());
         }
         return ejbHomeRef;
     }
 
+
     public EJBLocalHome getEJBLocalHome() {
         if (getLocalHomeInterface() == null) {
             throw new IllegalStateException("This component has no local home interface: " + getDeploymentID());
         }
         if (ejbLocalHomeRef == null) {
-            ejbLocalHomeRef = createEJBLocalHomeRef();
+            ejbLocalHomeRef = (EJBLocalHome) EjbHomeProxyHandler.createProxy(this, InterfaceType.EJB_LOCAL_HOME, new ArrayList<Class>());
         }
         return ejbLocalHomeRef;
     }
@@ -511,38 +508,27 @@
             }
         }
 
-        BusinessLocalHome result;
-
-        EjbHomeProxyHandler handler = null;
-
-        switch (getComponentType()) {
-            case STATEFUL:
-                handler = new StatefulEjbHomeHandler(this, InterfaceType.BUSINESS_LOCAL_HOME, new ArrayList<Class>());
-                break;
-
-            case STATELESS:
-                handler = new StatelessEjbHomeHandler(this, InterfaceType.BUSINESS_LOCAL_HOME, new ArrayList<Class>());
-                break;
-        }
-        handler.setLocal(true);
-        try {
-            Class[] interfaces1 = new Class[]{BusinessLocalHome.class, org.apache.openejb.core.ivm.IntraVmProxy.class};
-            result = (BusinessLocalHome) ProxyManager.newProxyInstance(interfaces1, handler);
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new RuntimeException("Can't create BusinessLocalHome stub" + e.getMessage());
-        }
-        return result;
+        return (BusinessLocalHome) EjbHomeProxyHandler.createProxy(this, InterfaceType.BUSINESS_LOCAL_HOME, new ArrayList<Class>());
     }
 
     public BusinessRemoteHome getBusinessRemoteHome() {
+        return getBusinessRemoteHome(getBusinessRemoteInterfaces());
+    }
+
+    public BusinessRemoteHome getBusinessRemoteHome(List<Class> interfaces) {
         if (getBusinessRemoteInterfaces().size() == 0){
             throw new IllegalStateException("This component has no business remote interfaces: " + getDeploymentID());
         }
-        if (businessRemoteHomeRef == null) {
-            businessRemoteHomeRef = createBusinessRemoteHomeRef();
+        if (interfaces.size() == 0){
+            throw new IllegalArgumentException("No interface classes were specified");
         }
-        return businessRemoteHomeRef;
+        for (Class clazz : interfaces) {
+            if (!getBusinessRemoteInterfaces().contains(clazz)){
+                throw new IllegalArgumentException("Not a business interface of this bean:" + clazz.getName());
+            }
+        }
+
+        return (BusinessRemoteHome) EjbHomeProxyHandler.createProxy(this, InterfaceType.BUSINESS_REMOTE_HOME, new ArrayList<Class>());
     }
 
     public void setBeanManagedTransaction(boolean value) {
@@ -738,89 +724,6 @@
         this.callbackInterceptors.clear();
         this.callbackInterceptors.addAll(callbackInterceptors);
         this.interceptors.addAll(callbackInterceptors);
-    }
-
-    private javax.ejb.EJBHome createEJBHomeRef() {
-
-        EjbHomeProxyHandler handler = null;
-
-        switch (getComponentType()) {
-            case STATEFUL:
-                handler = new StatefulEjbHomeHandler(this, InterfaceType.EJB_HOME, new ArrayList<Class>());
-                break;
-
-            case STATELESS:
-                handler = new StatelessEjbHomeHandler(this, InterfaceType.EJB_HOME, new ArrayList<Class>());
-                break;
-            case CMP_ENTITY:
-            case BMP_ENTITY:
-                handler = new EntityEjbHomeHandler(this, InterfaceType.EJB_HOME, new ArrayList<Class>());
-                break;
-        }
-
-        Object proxy = null;
-        try {
-            Class[] interfaces = new Class[]{this.getHomeInterface(), org.apache.openejb.core.ivm.IntraVmProxy.class};
-            proxy = ProxyManager.newProxyInstance(interfaces, handler);
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new RuntimeException("Can't create EJBHome stub" + e.getMessage());
-        }
-
-        return (javax.ejb.EJBHome) proxy;
-
-    }
-
-    private javax.ejb.EJBLocalHome createEJBLocalHomeRef() {
-
-        EjbHomeProxyHandler handler = null;
-
-        switch (getComponentType()) {
-            case STATEFUL:
-                handler = new StatefulEjbHomeHandler(this, InterfaceType.EJB_LOCAL_HOME, new ArrayList<Class>());
-                break;
-
-            case STATELESS:
-                handler = new StatelessEjbHomeHandler(this, InterfaceType.EJB_LOCAL_HOME, new ArrayList<Class>());
-                break;
-            case CMP_ENTITY:
-            case BMP_ENTITY:
-                handler = new EntityEjbHomeHandler(this, InterfaceType.EJB_LOCAL_HOME, new ArrayList<Class>());
-                break;
-        }
-        handler.setLocal(true);
-        Object proxy = null;
-        try {
-            Class[] interfaces = new Class[]{this.getLocalHomeInterface(), org.apache.openejb.core.ivm.IntraVmProxy.class};
-            proxy = ProxyManager.newProxyInstance(interfaces, handler);
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new RuntimeException("Can't create EJBLocalHome stub" + e.getMessage());
-        }
-
-        return (javax.ejb.EJBLocalHome) proxy;
-    }
-
-    private BusinessRemoteHome createBusinessRemoteHomeRef() {
-
-        EjbHomeProxyHandler handler = null;
-
-        switch (getComponentType()) {
-            case STATEFUL:
-                handler = new StatefulEjbHomeHandler(this, InterfaceType.BUSINESS_REMOTE_HOME, new ArrayList<Class>());
-                break;
-
-            case STATELESS:
-                handler = new StatelessEjbHomeHandler(this, InterfaceType.BUSINESS_REMOTE_HOME, new ArrayList<Class>());
-                break;
-        }
-        try {
-            Class[] interfaces = new Class[]{BusinessRemoteHome.class, org.apache.openejb.core.ivm.IntraVmProxy.class};
-            return (BusinessRemoteHome) ProxyManager.newProxyInstance(interfaces, handler);
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new RuntimeException("Can't create BusinessRemoteHome stub" + e.getMessage());
-        }
     }
 
     public void createMethodMap() throws org.apache.openejb.SystemException {

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/ProxyFactory.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/ProxyFactory.java?view=diff&rev=528754&r1=528753&r2=528754
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/ProxyFactory.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/ProxyFactory.java Fri Apr 13 21:22:30 2007
@@ -26,6 +26,7 @@
 import javax.ejb.EJBHome;
 import javax.ejb.EJBLocalHome;
 import javax.ejb.EntityBean;
+import java.util.ArrayList;
 
 public class ProxyFactory {
     private final CoreDeploymentInfo deploymentInfo;
@@ -61,11 +62,11 @@
         // primary key fields of the bean instance.  Each deployment has its own KeyGenerator.
         Object primaryKey = keyGenerator.getPrimaryKey(bean);
 
-        // create a new ProxyInfo based on the deployment info and primary key and add it to the vector
-        ProxyInfo proxyInfo = new ProxyInfo(deploymentInfo, primaryKey, remoteInterface, container);
+        ArrayList<Class> interfaces = new ArrayList<Class>();
+        interfaces.add(remoteInterface);
 
         // create the proxy
-        Object proxy = remoteHandler.createProxy(proxyInfo);
+        Object proxy = remoteHandler.createProxy(primaryKey, interfaces);
         return proxy;
     }
 
@@ -74,11 +75,11 @@
         // primary key fields of the bean instance.  Each deployment has its own KeyGenerator.
         Object primaryKey = keyGenerator.getPrimaryKey(bean);
 
-        // create a new ProxyInfo based on the deployment info and primary key and add it to the vector
-        ProxyInfo proxyInfo = new ProxyInfo(deploymentInfo, primaryKey, localInterface, container);
+        ArrayList<Class> interfaces = new ArrayList<Class>();
+        interfaces.add(localInterface);
 
         // create the proxy
-        Object proxy = localHandler.createProxy(proxyInfo);
+        Object proxy = localHandler.createProxy(primaryKey, interfaces);
         return proxy;
 
     }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Util.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Util.java?view=diff&rev=528754&r1=528753&r2=528754
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Util.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Util.java Fri Apr 13 21:22:30 2007
@@ -24,12 +24,14 @@
 import org.apache.openejb.core.entity.EntityEjbHomeHandler;
 import org.apache.openejb.util.proxy.ProxyManager;
 import org.apache.openejb.ProxyInfo;
+import org.apache.openejb.InterfaceType;
 
 import javax.ejb.EJBLocalObject;
 import javax.ejb.EntityBean;
 import javax.ejb.EJBLocalHome;
 import javax.ejb.EJBObject;
 import java.lang.reflect.Field;
+import java.util.ArrayList;
 
 public class Cmp2Util {
     public static Object getPrimaryKey(CoreDeploymentInfo deploymentInfo, EntityBean entity){
@@ -84,17 +86,12 @@
         if (!(deploymentInfo.getContainer() instanceof CmpContainer)) {
             throw new IllegalArgumentException("Proxy is not connected to a CMP container but is conect to " + deploymentInfo.getContainer().getClass().getName());
         }
-        CmpContainer container = (CmpContainer) deploymentInfo.getContainer();
-
-        // create a new ProxyInfo based on the deployment info and primary key
-        ProxyInfo proxyInfo = new ProxyInfo(deploymentInfo, primaryKey, localInterface, container);
-
-        // get the home proxy handler
-        EJBLocalHome homeProxy = deploymentInfo.getEJBLocalHome();
-        EntityEjbHomeHandler handler = (EntityEjbHomeHandler) ProxyManager.getInvocationHandler(homeProxy);
 
         // create the proxy
-        Proxy proxy = (Proxy) handler.createProxy(proxyInfo);
+        ArrayList<Class> interfaces = new ArrayList<Class>();
+        interfaces.add(localInterface);
+
+        Proxy proxy = (Proxy) EjbObjectProxyHandler.createProxy(deploymentInfo, primaryKey, interfaces, InterfaceType.EJB_LOCAL_HOME);
         return proxy;
     }
 

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContext.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContext.java?view=diff&rev=528754&r1=528753&r2=528754
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContext.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContext.java Fri Apr 13 21:22:30 2007
@@ -83,8 +83,8 @@
             ThreadContext threadContext = ThreadContext.getThreadContext();
             DeploymentInfo di = threadContext.getDeploymentInfo();
 
-            EjbObjectProxyHandler handler = new EntityEjbObjectHandler(((RpcContainer) di.getContainer()).getDeploymentInfo(di.getDeploymentID()), threadContext.getPrimaryKey(), InterfaceType.EJB_LOCAL, new ArrayList<Class>());
-            handler.setLocal(true);
+            EjbObjectProxyHandler handler = new EntityEjbObjectHandler(di, threadContext.getPrimaryKey(), InterfaceType.EJB_LOCAL, new ArrayList<Class>());
+
             try {
                 Class[] interfaces = new Class[]{di.getLocalInterface(), IntraVmProxy.class};
                 return (EJBLocalObject) ProxyManager.newProxyInstance(interfaces, handler);

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbHomeHandler.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbHomeHandler.java?view=diff&rev=528754&r1=528753&r2=528754
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbHomeHandler.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbHomeHandler.java Fri Apr 13 21:22:30 2007
@@ -32,12 +32,12 @@
 
 public class EntityEjbHomeHandler extends EjbHomeProxyHandler {
 
-    public EntityEjbHomeHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, ArrayList<Class> interfaces) {
+    public EntityEjbHomeHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> interfaces) {
         super(deploymentInfo, interfaceType, interfaces);
     }
 
-    public Object createProxy(ProxyInfo proxyInfo) {
-        Object proxy = super.createProxy(proxyInfo);
+    public Object createProxy(Object primaryKey, List<Class> interfaces) {
+        Object proxy = super.createProxy(primaryKey, interfaces);
         EjbObjectProxyHandler handler = (EjbObjectProxyHandler) ProxyManager.getInvocationHandler(proxy);
 
         /* 
@@ -65,13 +65,15 @@
             Object [] proxyInfos = ((java.util.Collection) retValue).toArray();
             Vector proxies = new Vector();
             for (int i = 0; i < proxyInfos.length; i++) {
-                proxies.addElement(createProxy((ProxyInfo) proxyInfos[i]));
+                ProxyInfo proxyInfo = (ProxyInfo) proxyInfos[i];
+                proxies.addElement(createProxy(proxyInfo.getPrimaryKey(), proxyInfo.getInterfaces()));
             }
             return proxies;
         } else if (retValue instanceof org.apache.openejb.util.ArrayEnumeration) {
             org.apache.openejb.util.ArrayEnumeration enumeration = (org.apache.openejb.util.ArrayEnumeration) retValue;
             for (int i = enumeration.size() - 1; i >= 0; --i) {
-                enumeration.set(i, createProxy((ProxyInfo) enumeration.get(i)));
+                ProxyInfo proxyInfo = ((ProxyInfo) enumeration.get(i));
+                enumeration.set(i, createProxy(proxyInfo.getPrimaryKey(), proxyInfo.getInterfaces()));
             }
             return enumeration;
         } else if (retValue instanceof java.util.Enumeration) {
@@ -79,14 +81,15 @@
 
             java.util.List proxies = new java.util.ArrayList();
             while (enumeration.hasMoreElements()) {
-                proxies.add(createProxy((ProxyInfo) enumeration.nextElement()));
+                ProxyInfo proxyInfo = ((ProxyInfo) enumeration.nextElement());
+                proxies.add(createProxy(proxyInfo.getPrimaryKey(), proxyInfo.getInterfaces()));
             }
             return new org.apache.openejb.util.ArrayEnumeration(proxies);
         } else {
             org.apache.openejb.ProxyInfo proxyInfo = (org.apache.openejb.ProxyInfo) retValue;
 
 
-            return createProxy(proxyInfo);
+            return createProxy(proxyInfo.getPrimaryKey(), proxyInfo.getInterfaces());
         }
 
     }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java?view=diff&rev=528754&r1=528753&r2=528754
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java Fri Apr 13 21:22:30 2007
@@ -83,6 +83,7 @@
     private boolean isLocal;
     protected final InterfaceType interfaceType;
     protected final List<Class> interfaces;
+    private static final boolean REMOTE_COPY_ENABLED = parseRemoteCopySetting();
 
     public BaseEjbProxyHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces) {
         this.container = (RpcContainer) deploymentInfo.getContainer();
@@ -93,12 +94,20 @@
 
         this.interfaces = Collections.unmodifiableList(interfaces);
 
+        setLocal(interfaceType.isLocal());
+
+        if (!interfaceType.isLocal()){
+            doIntraVmCopy = REMOTE_COPY_ENABLED;
+        }
+    }
+
+    private static boolean parseRemoteCopySetting() {
         Properties properties = SystemInstance.get().getProperties();
         String value = properties.getProperty("openejb.localcopy");
         if (value == null) {
             value = properties.getProperty(org.apache.openejb.core.EnvProps.INTRA_VM_COPY);
         }
-        doIntraVmCopy = value == null || !value.equalsIgnoreCase("FALSE");
+        return value == null || !value.equalsIgnoreCase("FALSE");
     }
 
     private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException, NoSuchMethodException {

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java?view=diff&rev=528754&r1=528753&r2=528754
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java Fri Apr 13 21:22:30 2007
@@ -34,6 +34,9 @@
 import org.apache.openejb.InterfaceType;
 import org.apache.openejb.ProxyInfo;
 import org.apache.openejb.core.ServerFederation;
+import org.apache.openejb.core.entity.EntityEjbHomeHandler;
+import org.apache.openejb.core.stateless.StatelessEjbHomeHandler;
+import org.apache.openejb.core.stateful.StatefulEjbHomeHandler;
 import org.apache.openejb.spi.ApplicationServer;
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.proxy.ProxyManager;
@@ -51,7 +54,7 @@
         REMOVE
     }
 
-    public EjbHomeProxyHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, ArrayList<Class> interfaces) {
+    public EjbHomeProxyHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> interfaces) {
         super(deploymentInfo, null, interfaceType, interfaces);
         dispatchTable = new HashMap<String, MethodType>();
         dispatchTable.put("create", MethodType.CREATE);
@@ -77,7 +80,34 @@
         throw new IllegalStateException("A home reference must never be invalidated!");
     }
 
-    public Object createProxy(ProxyInfo proxyInfo) {
+    protected static EjbHomeProxyHandler createHomeHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> interfaces) {
+        switch (deploymentInfo.getComponentType()) {
+            case STATEFUL:
+                return new StatefulEjbHomeHandler(deploymentInfo, interfaceType, interfaces);
+            case STATELESS:
+                return  new StatelessEjbHomeHandler(deploymentInfo, interfaceType, interfaces);
+            case CMP_ENTITY:
+            case BMP_ENTITY:
+                return  new EntityEjbHomeHandler(deploymentInfo, interfaceType, interfaces);
+            default: throw new IllegalStateException("Component type does not support rpc interfaces: " + deploymentInfo.getComponentType());
+        }
+    }
+
+    public static Object createProxy(DeploymentInfo deploymentInfo, InterfaceType interfaceType, ArrayList<Class> interfaces) {
+        try {
+            EjbHomeProxyHandler handler = createHomeHandler(deploymentInfo, interfaceType, interfaces);
+
+            Class homeInterface = deploymentInfo.getInterface(interfaceType);
+
+            Class[] interfacesArray = new Class[]{homeInterface, IntraVmProxy.class};
+
+            return ProxyManager.newProxyInstance(interfacesArray, handler);
+        } catch (Exception e) {
+            throw new RuntimeException("Can't create EJBHome stub" + e.getMessage());
+        }
+    }
+
+    public Object createProxy(Object primaryKey, List<Class> interfaces) {
         Object newProxy;
         try {
 
@@ -88,18 +118,17 @@
                 case BUSINESS_REMOTE_HOME: interfaceType = InterfaceType.BUSINESS_REMOTE; break;
                 case BUSINESS_LOCAL_HOME: interfaceType = InterfaceType.BUSINESS_LOCAL; break;
             }
-            EjbObjectProxyHandler handler = newEjbObjectHandler(getDeploymentInfo(), proxyInfo.getPrimaryKey(), interfaceType, interfaces);
-            handler.setLocal(isLocal());
-            handler.doIntraVmCopy = this.doIntraVmCopy;
+            EjbObjectProxyHandler handler = newEjbObjectHandler(getDeploymentInfo(), primaryKey, interfaceType, this.interfaces);
+
             List<Class> interfacess = new ArrayList<Class>();
-            interfacess.addAll(proxyInfo.getInterfaces());
+            interfacess.addAll(interfaces);
             interfacess.add(IntraVmProxy.class);
             newProxy = ProxyManager.newProxyInstance(interfacess.toArray(new Class[]{}), handler);
         } catch (IllegalAccessException iae) {
-            throw new RuntimeException("Could not create IVM proxy for " + proxyInfo.getInterface() + " interface");
+            throw new RuntimeException("Could not create IVM proxy for " + interfaces.get(0));
         }
         if (newProxy == null)
-            throw new RuntimeException("Could not create IVM proxy for " + proxyInfo.getInterface() + " interface");
+            throw new RuntimeException("Could not create IVM proxy for " + interfaces.get(0));
 
         return newProxy;
     }
@@ -235,7 +264,7 @@
     protected Object create(Method method, Object[] args, Object proxy) throws Throwable {
         ProxyInfo proxyInfo = (ProxyInfo) container.invoke(deploymentID, method, args, null);
         assert proxyInfo != null : "Container returned a null ProxyInfo: ContainerID=" + container.getContainerID();
-        return createProxy(proxyInfo);
+        return createProxy(proxyInfo.getPrimaryKey(), proxyInfo.getInterfaces());
     }
 
     protected abstract Object findX(Method method, Object[] args, Object proxy) throws Throwable;

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java?view=diff&rev=528754&r1=528753&r2=528754
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectProxyHandler.java Fri Apr 13 21:22:30 2007
@@ -26,9 +26,9 @@
 import javax.ejb.EJBAccessException;
 import javax.ejb.AccessLocalException;
 
-import org.apache.openejb.RpcContainer;
 import org.apache.openejb.InterfaceType;
 import org.apache.openejb.DeploymentInfo;
+import org.apache.openejb.ProxyInfo;
 import org.apache.openejb.core.ServerFederation;
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.spi.ApplicationServer;
@@ -207,5 +207,10 @@
     protected Object businessMethod(Method method, Object[] args, Object proxy) throws Throwable {
 //        checkAuthorization(method);
         return container.invoke(deploymentID, method, args, primaryKey);
+    }
+
+    public static Object createProxy(DeploymentInfo deploymentInfo, Object primaryKey, List<Class> interfaces, InterfaceType interfaceType) {
+        EjbHomeProxyHandler homeHandler = EjbHomeProxyHandler.createHomeHandler(deploymentInfo, interfaceType, interfaces);
+        return homeHandler.createProxy(primaryKey, interfaces);
     }
 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/IntraVmServer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/IntraVmServer.java?view=diff&rev=528754&r1=528753&r2=528754
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/IntraVmServer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/IntraVmServer.java Fri Apr 13 21:22:30 2007
@@ -23,11 +23,6 @@
 import javax.ejb.HomeHandle;
 
 import org.apache.openejb.ProxyInfo;
-import org.apache.openejb.InterfaceType;
-import org.apache.openejb.core.entity.EntityEjbHomeHandler;
-import org.apache.openejb.core.stateful.StatefulEjbHomeHandler;
-import org.apache.openejb.core.stateless.StatelessEjbHomeHandler;
-import org.apache.openejb.util.proxy.ProxyManager;
 
 import java.util.ArrayList;
 
@@ -50,41 +45,10 @@
     }
 
     public EJBObject getEJBObject(ProxyInfo pi) {
-        EjbHomeProxyHandler handler = null;
-        return (EJBObject) getEjbHomeHandler(pi).createProxy(pi);
+        return (EJBObject) EjbObjectProxyHandler.createProxy(pi.getDeploymentInfo(), pi.getPrimaryKey(), pi.getInterfaces(), pi.getInterfaceType());
     }
 
     public EJBHome getEJBHome(ProxyInfo pi) {
-
-        if (pi.getDeploymentInfo() instanceof org.apache.openejb.core.CoreDeploymentInfo) {
-            org.apache.openejb.core.CoreDeploymentInfo coreDeployment = (org.apache.openejb.core.CoreDeploymentInfo) pi.getDeploymentInfo();
-            return coreDeployment.getEJBHome();
-
-        } else {
-            try {
-                Class[] interfaces = new Class[]{pi.getDeploymentInfo().getHomeInterface(), org.apache.openejb.core.ivm.IntraVmProxy.class};
-                return (javax.ejb.EJBHome) ProxyManager.newProxyInstance(interfaces, getEjbHomeHandler(pi));
-            } catch (Exception e) {
-                throw new RuntimeException("Can't create EJBHome stub" + e.getMessage());
-            }
-        }
-    }
-
-    private EjbHomeProxyHandler getEjbHomeHandler(ProxyInfo pi) {
-
-        switch (pi.getDeploymentInfo().getComponentType()) {
-
-            case BMP_ENTITY:
-            case CMP_ENTITY:
-                return new EntityEjbHomeHandler(pi.getDeploymentInfo(), InterfaceType.EJB_HOME, new ArrayList<Class>());
-
-            case STATEFUL:
-                return new StatefulEjbHomeHandler(pi.getDeploymentInfo(), InterfaceType.EJB_HOME, new ArrayList<Class>());
-
-            case STATELESS:
-                return new StatelessEjbHomeHandler(pi.getDeploymentInfo(), InterfaceType.EJB_HOME, new ArrayList<Class>());
-            default:
-                throw new RuntimeException("Unknown EJB type: " + pi.getDeploymentInfo());
-        }
+        return (EJBHome) EjbHomeProxyHandler.createProxy(pi.getDeploymentInfo(), pi.getInterfaceType(), new ArrayList<Class>());
     }
 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEjbHomeHandler.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEjbHomeHandler.java?view=diff&rev=528754&r1=528753&r2=528754
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEjbHomeHandler.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEjbHomeHandler.java Fri Apr 13 21:22:30 2007
@@ -23,7 +23,6 @@
 import javax.ejb.RemoveException;
 
 import org.apache.openejb.InterfaceType;
-import org.apache.openejb.ProxyInfo;
 import org.apache.openejb.DeploymentInfo;
 import org.apache.openejb.core.ivm.EjbHomeProxyHandler;
 import org.apache.openejb.core.ivm.EjbObjectProxyHandler;
@@ -31,12 +30,12 @@
 
 public class StatefulEjbHomeHandler extends EjbHomeProxyHandler {
 
-    public StatefulEjbHomeHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, ArrayList<Class> interfaces) {
+    public StatefulEjbHomeHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> interfaces) {
         super(deploymentInfo, interfaceType, interfaces);
     }
 
-    public Object createProxy(ProxyInfo proxyInfo) {
-        Object proxy = super.createProxy(proxyInfo);
+    public Object createProxy(Object primaryKey, List<Class> interfaces) {
+        Object proxy = super.createProxy(primaryKey, interfaces);
         EjbObjectProxyHandler handler = (EjbObjectProxyHandler) ProxyManager.getInvocationHandler(proxy);
 
         registerHandler(handler.getRegistryId(), handler);

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbHomeHandler.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbHomeHandler.java?view=diff&rev=528754&r1=528753&r2=528754
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbHomeHandler.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbHomeHandler.java Fri Apr 13 21:22:30 2007
@@ -29,7 +29,7 @@
 
 public class StatelessEjbHomeHandler extends EjbHomeProxyHandler {
 
-    public StatelessEjbHomeHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, ArrayList<Class> interfaces) {
+    public StatelessEjbHomeHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> interfaces) {
         super(deploymentInfo, interfaceType, interfaces);
     }