You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by dj...@apache.org on 2010/08/14 06:39:41 UTC

svn commit: r985428 - in /openejb/trunk/openejb3: container/openejb-core/src/main/java/org/apache/openejb/ container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ container/openejb-core/src/main/java/org/apache/openejb/core/ containe...

Author: djencks
Date: Sat Aug 14 04:39:40 2010
New Revision: 985428

URL: http://svn.apache.org/viewvc?rev=985428&view=rev
Log:
OPENEJB-1328 carefully track the interface requested for a proxy

Modified:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/ProxyInfo.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseSessionContext.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/ProxyFactory.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Util.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContext.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbHomeHandler.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbObjectHandler.java
    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
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/IntraVmServer.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedHomeHandler.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedObjectHandler.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonEjbHomeHandler.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonEjbObjectHandler.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEjbHomeHandler.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEjbObjectHandler.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbHomeHandler.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbObjectHandler.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyFactory.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyManager.java
    openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBMetaDataImpl.java
    openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ClientObjectFactory.java
    openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java
    openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ServerSideResolver.java
    openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/DeploymentIndexTest.java

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java Sat Aug 14 04:39:40 2010
@@ -113,11 +113,11 @@ public interface DeploymentInfo {
 
     BusinessLocalBeanHome getBusinessLocalBeanHome();
 
-    BusinessLocalHome getBusinessLocalHome(List<Class> interfaces);
+    BusinessLocalHome getBusinessLocalHome(List<Class> interfaces, Class mainInterface);
 
     BusinessRemoteHome getBusinessRemoteHome();
 
-    BusinessRemoteHome getBusinessRemoteHome(List<Class> interfaces);
+    BusinessRemoteHome getBusinessRemoteHome(List<Class> interfaces, Class mainInterface);
 
     String getDestinationId();
 

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/ProxyInfo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/ProxyInfo.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/ProxyInfo.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/ProxyInfo.java Sat Aug 14 04:39:40 2010
@@ -26,16 +26,18 @@ public class ProxyInfo {
     protected List<Class> proxyInterfaces;
     protected RpcContainer beanContainer;
     protected InterfaceType interfaceType;
+    protected Class mainInterface;
 
     protected ProxyInfo() {
     }
 
-    public ProxyInfo(DeploymentInfo deploymentInfo, Object primaryKey, List<Class> interfaces, InterfaceType proxyType) {
+    public ProxyInfo(DeploymentInfo deploymentInfo, Object primaryKey, List<Class> interfaces, InterfaceType proxyType, Class mainInterface) {
         this.deploymentInfo = deploymentInfo;
         this.primaryKey = primaryKey;
         this.proxyInterfaces = interfaces;
         this.interfaceType = proxyType;
         this.beanContainer = (RpcContainer) deploymentInfo.getContainer();
+        this.mainInterface = mainInterface;
     }
 
     /**
@@ -48,7 +50,7 @@ public class ProxyInfo {
      * @param pk
      */
     public ProxyInfo(DeploymentInfo depInfo, Object pk) {
-        this(depInfo, pk, new ArrayList<Class>(), InterfaceType.UNKNOWN);
+        this(depInfo, pk, new ArrayList<Class>(), InterfaceType.UNKNOWN, null);
     }
 
     public InterfaceType getInterfaceType() {
@@ -64,7 +66,7 @@ public class ProxyInfo {
     }
 
     public Class getInterface() {
-        return proxyInterfaces.get(0);
+        return mainInterface == null && proxyInterfaces != null && !proxyInterfaces.isEmpty()? proxyInterfaces.get(0): mainInterface;
     }
 
     public List<Class> getInterfaces() {

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java Sat Aug 14 04:39:40 2010
@@ -346,7 +346,7 @@ public class JndiBuilder {
             for (Class interfce : deployment.getBusinessLocalInterfaces()) {
 
                 List<Class> interfaces = ProxyInterfaceResolver.getInterfaces(beanClass, interfce, localInterfaces);
-                DeploymentInfo.BusinessLocalHome home = deployment.getBusinessLocalHome(interfaces);
+                DeploymentInfo.BusinessLocalHome home = deployment.getBusinessLocalHome(interfaces, interfce);
                 BusinessLocalReference ref = new BusinessLocalReference(home);
 
                 optionalBind(bindings, ref, "openejb/Deployment/" + format(deployment.getDeploymentID(), interfce.getName()));
@@ -370,7 +370,7 @@ public class JndiBuilder {
             for (Class interfce : deployment.getBusinessRemoteInterfaces()) {
 
                 List<Class> interfaces = ProxyInterfaceResolver.getInterfaces(beanClass, interfce, remoteInterfaces);
-                DeploymentInfo.BusinessRemoteHome home = deployment.getBusinessRemoteHome(interfaces);
+                DeploymentInfo.BusinessRemoteHome home = deployment.getBusinessRemoteHome(interfaces, interfce);
                 BusinessRemoteReference ref = new BusinessRemoteReference(home);
 
                 optionalBind(bindings, ref, "openejb/Deployment/" + format(deployment.getDeploymentID(), interfce.getName(), null));

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseSessionContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseSessionContext.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseSessionContext.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/BaseSessionContext.java Sat Aug 14 04:39:40 2010
@@ -16,15 +16,12 @@
  */
 package org.apache.openejb.core;
 
-import java.security.Principal;
 import java.util.List;
 import java.util.ArrayList;
-import javax.ejb.EJBHome;
-import javax.ejb.EJBLocalHome;
+
 import javax.ejb.EJBLocalObject;
 import javax.ejb.EJBObject;
 import javax.ejb.SessionContext;
-import javax.ejb.TimerService;
 import javax.transaction.UserTransaction;
 import javax.xml.rpc.handler.MessageContext;
 
@@ -64,7 +61,7 @@ public abstract class BaseSessionContext
 
         if (di.getLocalHomeInterface() == null) throw new IllegalStateException("Bean does not have an EJBLocalObject interface: "+di.getDeploymentID());
 
-        return (EJBLocalObject) EjbObjectProxyHandler.createProxy(di, threadContext.getPrimaryKey(), InterfaceType.EJB_LOCAL);
+        return (EJBLocalObject) EjbObjectProxyHandler.createProxy(di, threadContext.getPrimaryKey(), InterfaceType.EJB_LOCAL, di.getLocalInterface());
     }
 
     public EJBObject getEJBObject() throws IllegalStateException {
@@ -73,7 +70,7 @@ public abstract class BaseSessionContext
         DeploymentInfo di = threadContext.getDeploymentInfo();
         if (di.getHomeInterface() == null) throw new IllegalStateException("Bean does not have an EJBObject interface: "+di.getDeploymentID());
 
-        return (EJBObject) EjbObjectProxyHandler.createProxy(di, threadContext.getPrimaryKey(), InterfaceType.EJB_OBJECT);
+        return (EJBObject) EjbObjectProxyHandler.createProxy(di, threadContext.getPrimaryKey(), InterfaceType.EJB_OBJECT, di.getRemoteInterface());
     }
 
     public MessageContext getMessageContext() throws IllegalStateException {
@@ -105,19 +102,19 @@ public abstract class BaseSessionContext
             EjbObjectProxyHandler handler;
             switch(di.getComponentType()){
                 case STATEFUL: {
-                    handler = new StatefulEjbObjectHandler(di, threadContext.getPrimaryKey(), interfaceType, new ArrayList<Class>());
+                    handler = new StatefulEjbObjectHandler(di, threadContext.getPrimaryKey(), interfaceType, new ArrayList<Class>(), interfce);
                     break;
                 }
                 case STATELESS: {
-                    handler = new StatelessEjbObjectHandler(di, threadContext.getPrimaryKey(), interfaceType, new ArrayList<Class>());
+                    handler = new StatelessEjbObjectHandler(di, threadContext.getPrimaryKey(), interfaceType, new ArrayList<Class>(), interfce);
                     break;
                 }
                 case SINGLETON: {
-                    handler = new SingletonEjbObjectHandler(di, threadContext.getPrimaryKey(), interfaceType, new ArrayList<Class>());
+                    handler = new SingletonEjbObjectHandler(di, threadContext.getPrimaryKey(), interfaceType, new ArrayList<Class>(), interfce);
                     break;
                 }
                 case MANAGED: {
-                    handler = new ManagedObjectHandler(di, threadContext.getPrimaryKey(), interfaceType, new ArrayList<Class>());
+                    handler = new ManagedObjectHandler(di, threadContext.getPrimaryKey(), interfaceType, new ArrayList<Class>(), interfce);
                     break;
                 }
                 default: throw new IllegalStateException("Bean is not a session bean: "+di.getComponentType());

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java Sat Aug 14 04:39:40 2010
@@ -18,7 +18,6 @@ package org.apache.openejb.core;
 
 import java.lang.reflect.Method;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -522,17 +521,18 @@ public class CoreDeploymentInfo extends 
         return ejbLocalHomeRef;
     }
 
+    //unused
     public BusinessLocalHome getBusinessLocalHome() {
-        return getBusinessLocalHome(getBusinessLocalInterfaces());
+        return getBusinessLocalHome(getBusinessLocalInterfaces(), null);
     }
 
     public BusinessLocalBeanHome getBusinessLocalBeanHome() {
         List<Class> interfaces = new ArrayList<Class>();
         interfaces.add(this.beanClass);
-        return (BusinessLocalBeanHome) EjbHomeProxyHandler.createHomeProxy(this, InterfaceType.BUSINESS_LOCALBEAN_HOME, interfaces);
+        return (BusinessLocalBeanHome) EjbHomeProxyHandler.createHomeProxy(this, InterfaceType.BUSINESS_LOCALBEAN_HOME, interfaces, this.beanClass);
     }
 
-    public BusinessLocalHome getBusinessLocalHome(List<Class> interfaces) {
+    public BusinessLocalHome getBusinessLocalHome(List<Class> interfaces, Class mainInterface) {
         if (getBusinessLocalInterfaces().size() == 0){
             throw new IllegalStateException("This component has no business local interfaces: " + getDeploymentID());
         }
@@ -545,14 +545,15 @@ public class CoreDeploymentInfo extends 
             }
         }
 
-        return (BusinessLocalHome) EjbHomeProxyHandler.createHomeProxy(this, InterfaceType.BUSINESS_LOCAL_HOME, interfaces);
+        return (BusinessLocalHome) EjbHomeProxyHandler.createHomeProxy(this, InterfaceType.BUSINESS_LOCAL_HOME, interfaces, mainInterface);
     }
 
+    //unused
     public BusinessRemoteHome getBusinessRemoteHome() {
-        return getBusinessRemoteHome(getBusinessRemoteInterfaces());
+        return getBusinessRemoteHome(getBusinessRemoteInterfaces(), null);
     }
 
-    public BusinessRemoteHome getBusinessRemoteHome(List<Class> interfaces) {
+    public BusinessRemoteHome getBusinessRemoteHome(List<Class> interfaces, Class mainInterface) {
         if (getBusinessRemoteInterfaces().size() == 0){
             throw new IllegalStateException("This component has no business remote interfaces: " + getDeploymentID());
         }
@@ -565,7 +566,7 @@ public class CoreDeploymentInfo extends 
             }
         }
 
-        return (BusinessRemoteHome) EjbHomeProxyHandler.createHomeProxy(this, InterfaceType.BUSINESS_REMOTE_HOME, interfaces);
+        return (BusinessRemoteHome) EjbHomeProxyHandler.createHomeProxy(this, InterfaceType.BUSINESS_REMOTE_HOME, interfaces, mainInterface);
     }
 
     public String getDestinationId() {

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/ProxyFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/ProxyFactory.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/ProxyFactory.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/ProxyFactory.java Sat Aug 14 04:39:40 2010
@@ -61,7 +61,7 @@ public class ProxyFactory {
         Object primaryKey = keyGenerator.getPrimaryKey(bean);
 
         // create the proxy
-        Object proxy = remoteHandler.createProxy(primaryKey);
+        Object proxy = remoteHandler.createProxy(primaryKey, deploymentInfo.getRemoteInterface());
         return proxy;
     }
 
@@ -71,7 +71,7 @@ public class ProxyFactory {
         Object primaryKey = keyGenerator.getPrimaryKey(bean);
 
         // create the proxy
-        Object proxy = localHandler.createProxy(primaryKey);
+        Object proxy = localHandler.createProxy(primaryKey, deploymentInfo.getLocalInterface());
         return proxy;
 
     }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Util.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Util.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Util.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/cmp2/Cmp2Util.java Sat Aug 14 04:39:40 2010
@@ -28,7 +28,6 @@ import javax.ejb.EJBLocalObject;
 import javax.ejb.EntityBean;
 import javax.ejb.EJBObject;
 import java.lang.reflect.Field;
-import java.util.ArrayList;
 
 public class Cmp2Util {
     public static Object getPrimaryKey(CoreDeploymentInfo deploymentInfo, EntityBean entity){
@@ -81,7 +80,7 @@ public class Cmp2Util {
             throw new IllegalArgumentException("Proxy is not connected to a CMP container but is conect to " + deploymentInfo.getContainer().getClass().getName());
         }
 
-        Proxy proxy = (Proxy) EjbObjectProxyHandler.createProxy(deploymentInfo, primaryKey, InterfaceType.EJB_LOCAL_HOME);
+        Proxy proxy = (Proxy) EjbObjectProxyHandler.createProxy(deploymentInfo, primaryKey, InterfaceType.EJB_LOCAL_HOME, deploymentInfo.getLocalInterface());
         return proxy;
     }
 

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContext.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContext.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContext.java Sat Aug 14 04:39:40 2010
@@ -50,7 +50,7 @@ public class EntityContext extends BaseC
             throw new IllegalStateException("EJB " + di.getDeploymentID() + " does not have a local interface");
         }
 
-        EjbObjectProxyHandler handler = new EntityEjbObjectHandler(di, threadContext.getPrimaryKey(), InterfaceType.EJB_LOCAL, new ArrayList<Class>());
+        EjbObjectProxyHandler handler = new EntityEjbObjectHandler(di, threadContext.getPrimaryKey(), InterfaceType.EJB_LOCAL, new ArrayList<Class>(), di.getLocalInterface());
 
         try {
             Class[] interfaces = new Class[]{di.getLocalInterface(), IntraVmProxy.class};
@@ -70,7 +70,7 @@ public class EntityContext extends BaseC
             throw new IllegalStateException("EJB " + di.getDeploymentID() + " does not have a remote interface");
         }
 
-        EjbObjectProxyHandler handler = new EntityEjbObjectHandler(di.getContainer().getDeploymentInfo(di.getDeploymentID()), threadContext.getPrimaryKey(), InterfaceType.EJB_OBJECT, new ArrayList<Class>());
+        EjbObjectProxyHandler handler = new EntityEjbObjectHandler(di.getContainer().getDeploymentInfo(di.getDeploymentID()), threadContext.getPrimaryKey(), InterfaceType.EJB_OBJECT, new ArrayList<Class>(), di.getRemoteInterface());
         try {
             Class[] interfaces = new Class[]{di.getRemoteInterface(), IntraVmProxy.class};
             return (EJBObject) ProxyManager.newProxyInstance(interfaces, handler);

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbHomeHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbHomeHandler.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbHomeHandler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbHomeHandler.java Sat Aug 14 04:39:40 2010
@@ -26,9 +26,7 @@ import org.apache.openejb.OpenEJBExcepti
 import org.apache.openejb.DeploymentInfo;
 import org.apache.openejb.core.ivm.EjbHomeProxyHandler;
 import org.apache.openejb.core.ivm.EjbObjectProxyHandler;
-import org.apache.openejb.core.ivm.IntraVmProxy;
 import org.apache.openejb.util.proxy.ProxyManager;
-import org.apache.openejb.util.proxy.InvocationHandler;
 
 import javax.ejb.EJBLocalObject;
 import javax.ejb.RemoveException;
@@ -37,12 +35,12 @@ import javax.ejb.EJBObject;
 
 public class EntityEjbHomeHandler extends EjbHomeProxyHandler {
 
-    public EntityEjbHomeHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> interfaces) {
-        super(deploymentInfo, interfaceType, interfaces);
+    public EntityEjbHomeHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface) {
+        super(deploymentInfo, interfaceType, interfaces, mainInterface);
     }
 
-    public Object createProxy(Object primaryKey) {
-        Object proxy = super.createProxy(primaryKey);
+    public Object createProxy(Object primaryKey, Class mainInterface) {
+        Object proxy = super.createProxy(primaryKey, mainInterface);
         EjbObjectProxyHandler handler = (EjbObjectProxyHandler) ProxyManager.getInvocationHandler(proxy);
 
         /* 
@@ -71,14 +69,14 @@ public class EntityEjbHomeHandler extend
             Vector proxies = new Vector();
             for (int i = 0; i < proxyInfos.length; i++) {
                 ProxyInfo proxyInfo = (ProxyInfo) proxyInfos[i];
-                proxies.addElement(createProxy(proxyInfo.getPrimaryKey()));
+                proxies.addElement(createProxy(proxyInfo.getPrimaryKey(), getMainInterface()));
             }
             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) {
                 ProxyInfo proxyInfo = ((ProxyInfo) enumeration.get(i));
-                enumeration.set(i, createProxy(proxyInfo.getPrimaryKey()));
+                enumeration.set(i, createProxy(proxyInfo.getPrimaryKey(), getMainInterface()));
             }
             return enumeration;
         } else if (retValue instanceof java.util.Enumeration) {
@@ -87,14 +85,14 @@ public class EntityEjbHomeHandler extend
             java.util.List proxies = new java.util.ArrayList();
             while (enumeration.hasMoreElements()) {
                 ProxyInfo proxyInfo = ((ProxyInfo) enumeration.nextElement());
-                proxies.add(createProxy(proxyInfo.getPrimaryKey()));
+                proxies.add(createProxy(proxyInfo.getPrimaryKey(), getMainInterface()));
             }
             return new org.apache.openejb.util.ArrayEnumeration(proxies);
         } else {
             org.apache.openejb.ProxyInfo proxyInfo = (org.apache.openejb.ProxyInfo) retValue;
 
 
-            return createProxy(proxyInfo.getPrimaryKey());
+            return createProxy(proxyInfo.getPrimaryKey(), getMainInterface());
         }
 
     }
@@ -148,8 +146,8 @@ public class EntityEjbHomeHandler extend
         return sb.toString();
     }
 
-    protected EjbObjectProxyHandler newEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces) {
-        return new EntityEjbObjectHandler(getDeploymentInfo(), pk, interfaceType, interfaces);
+    protected EjbObjectProxyHandler newEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface) {
+        return new EntityEjbObjectHandler(getDeploymentInfo(), pk, interfaceType, interfaces, mainInterface);
     }
 
 }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbObjectHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbObjectHandler.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbObjectHandler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityEjbObjectHandler.java Sat Aug 14 04:39:40 2010
@@ -39,8 +39,8 @@ public class EntityEjbObjectHandler exte
     */
     private Object registryId;
 
-    public EntityEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces) {
-        super(deploymentInfo, pk, interfaceType, interfaces);
+    public EntityEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface) {
+        super(deploymentInfo, pk, interfaceType, interfaces, mainInterface);
     }
 
     /*

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?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- 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 Sat Aug 14 04:39:40 2010
@@ -36,7 +36,6 @@ import java.rmi.RemoteException;
 import java.rmi.AccessException;
 import java.util.HashSet;
 import java.util.Hashtable;
-import java.util.Properties;
 import java.util.List;
 import java.util.ArrayList;
 import java.util.WeakHashMap;
@@ -56,7 +55,6 @@ import javax.transaction.TransactionRoll
 import org.apache.openejb.InterfaceType;
 import org.apache.openejb.RpcContainer;
 import org.apache.openejb.DeploymentInfo;
-import org.apache.openejb.core.CoreDeploymentInfo;
 import org.apache.openejb.core.ThreadContext;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.spi.ContainerSystem;
@@ -107,7 +105,7 @@ public abstract class BaseEjbProxyHandle
     private transient WeakHashMap<Class,Object> interfaces;
     private transient WeakReference<Class> mainInterface;
 
-    public BaseEjbProxyHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces) {
+    public BaseEjbProxyHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface) {
         this.container = (RpcContainer) deploymentInfo.getContainer();
         this.deploymentID = deploymentInfo.getDeploymentID();
         this.interfaceType = interfaceType;
@@ -117,22 +115,16 @@ public abstract class BaseEjbProxyHandle
         if (interfaces == null || interfaces.size() == 0) {
             InterfaceType objectInterfaceType = (interfaceType.isHome()) ? interfaceType.getCounterpart() : interfaceType;
             interfaces = new ArrayList<Class>(deploymentInfo.getInterfaces(objectInterfaceType));
+            if (mainInterface == null && interfaces.size() == 1) {
+                mainInterface = interfaces.get(0);
+            }
         }
-
-        this.setDoIntraVmCopy(!interfaceType.isLocal() && !interfaceType.isLocalBean());
-
-        if (!interfaceType.isLocal()&& !interfaceType.isLocalBean()){
-            setDoIntraVmCopy(REMOTE_COPY_ENABLED);
-        }
-
         setInterfaces(interfaces);
-
-        if (interfaceType.isHome()){
-            setMainInterface(deploymentInfo.getInterface(interfaceType));
-        } else {
-            // Then arbitrarily pick the first interface
-            setMainInterface(interfaces.get(0));
+        setMainInterface(mainInterface);
+        if (mainInterface == null) {
+            throw new IllegalArgumentException("No mainInterface: otherwise di: " + deploymentInfo + " InterfaceType: " + interfaceType + " interfaces: " + interfaces );
         }
+        this.setDoIntraVmCopy(REMOTE_COPY_ENABLED && !interfaceType.isLocal() && !interfaceType.isLocalBean());
     }
 
     protected void setDoIntraVmCopy(boolean doIntraVmCopy) {
@@ -172,7 +164,7 @@ public abstract class BaseEjbProxyHandle
         // 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)){
+        if (mainInterface != null && declaringClass.isAssignableFrom(mainInterface)){
             return mainInterface;
         }
 
@@ -235,12 +227,12 @@ public abstract class BaseEjbProxyHandle
             if (methodName.equals("toString")) return toString();
             else if (methodName.equals("equals")) return equals(args[0]) ? Boolean.TRUE : Boolean.FALSE;
             else if (methodName.equals("hashCode")) return new Integer(hashCode());
-            else throw new UnsupportedOperationException("Unkown method: " + method);
+            else throw new UnsupportedOperationException("Unknown method: " + method);
         } else if (method.getDeclaringClass() == IntraVmProxy.class) {
             final String methodName = method.getName();
 
             if (methodName.equals("writeReplace")) return _writeReplace(proxy);
-            else throw new UnsupportedOperationException("Unkown method: " + method);
+            else throw new UnsupportedOperationException("Unknown method: " + method);
         }
 
         Class interfce = getInvokedInterface(method);
@@ -442,12 +434,17 @@ public abstract class BaseEjbProxyHandle
         } catch (IllegalArgumentException e) {
             return false;
         }
-        BaseEjbProxyHandler other = (BaseEjbProxyHandler) obj;
-        if (primaryKey == null) {
-            return other.primaryKey == null && deploymentID.equals(other.deploymentID);
-        } else {
-            return primaryKey.equals(other.primaryKey) && deploymentID.equals(other.deploymentID);
+        if (this == obj) {
+            return true;
         }
+        BaseEjbProxyHandler other = (BaseEjbProxyHandler) obj;
+        return equalHandler(other);
+    }
+
+    protected boolean equalHandler(BaseEjbProxyHandler other) {
+        return (primaryKey == null? other.primaryKey == null: primaryKey.equals(other.primaryKey))
+                && deploymentID.equals(other.deploymentID)
+                && getMainInterface().equals(other.getMainInterface());
     }
 
     protected abstract Object _invoke(Object proxy, Class interfce, Method method, Object[] args) throws Throwable;

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?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- 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 Sat Aug 14 04:39:40 2010
@@ -58,8 +58,8 @@ public abstract class EjbHomeProxyHandle
         REMOVE
     }
 
-    public EjbHomeProxyHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> interfaces) {
-        super(deploymentInfo, null, interfaceType, interfaces);
+    public EjbHomeProxyHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface) {
+        super(deploymentInfo, null, interfaceType, interfaces, mainInterface);
         dispatchTable = new HashMap<String, MethodType>();
         dispatchTable.put("create", MethodType.CREATE);
         dispatchTable.put("getEJBMetaData", MethodType.META_DATA);
@@ -84,32 +84,32 @@ public abstract class EjbHomeProxyHandle
         throw new IllegalStateException("A home reference must never be invalidated!");
     }
 
-    protected static EjbHomeProxyHandler createHomeHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> interfaces) {
+    protected static EjbHomeProxyHandler createHomeHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface) {
         switch (deploymentInfo.getComponentType()) {
             case STATEFUL:
-                return new StatefulEjbHomeHandler(deploymentInfo, interfaceType, interfaces);
+                return new StatefulEjbHomeHandler(deploymentInfo, interfaceType, interfaces, mainInterface);
             case STATELESS:
-                return  new StatelessEjbHomeHandler(deploymentInfo, interfaceType, interfaces);
+                return  new StatelessEjbHomeHandler(deploymentInfo, interfaceType, interfaces, mainInterface);
             case SINGLETON:
-                return  new SingletonEjbHomeHandler(deploymentInfo, interfaceType, interfaces);
+                return  new SingletonEjbHomeHandler(deploymentInfo, interfaceType, interfaces, mainInterface);
             case MANAGED:
-                return  new ManagedHomeHandler(deploymentInfo, interfaceType, interfaces);
+                return  new ManagedHomeHandler(deploymentInfo, interfaceType, interfaces, mainInterface);
             case CMP_ENTITY:
             case BMP_ENTITY:
-                return  new EntityEjbHomeHandler(deploymentInfo, interfaceType, interfaces);
+                return  new EntityEjbHomeHandler(deploymentInfo, interfaceType, interfaces, mainInterface);
             default: throw new IllegalStateException("Component type does not support rpc interfaces: " + deploymentInfo.getComponentType());
         }
     }
 
     public static Object createHomeProxy(DeploymentInfo deploymentInfo, InterfaceType interfaceType) {
-        return createHomeProxy(deploymentInfo, interfaceType, null);
+        return createHomeProxy(deploymentInfo, interfaceType, null, interfaceType.isRemote()? deploymentInfo.getRemoteInterface(): deploymentInfo.getLocalInterface());
     }
 
-    public static Object createHomeProxy(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> objectInterfaces) {
+    public static Object createHomeProxy(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> objectInterfaces, Class mainInterface) {
         if (!interfaceType.isHome()) throw new IllegalArgumentException("InterfaceType is not a Home type: " + interfaceType);
 
         try {
-            EjbHomeProxyHandler handler = createHomeHandler(deploymentInfo, interfaceType, objectInterfaces);
+            EjbHomeProxyHandler handler = createHomeHandler(deploymentInfo, interfaceType, objectInterfaces, mainInterface);
 
             List<Class> proxyInterfaces = new ArrayList<Class>(2);
 
@@ -123,21 +123,19 @@ public abstract class EjbHomeProxyHandle
         }
     }
 
-    public Object createProxy(Object primaryKey) {
+    public Object createProxy(Object primaryKey, Class mainInterface) {
         try {
 
             InterfaceType objectInterfaceType = this.interfaceType.getCounterpart();
 
-            EjbObjectProxyHandler handler = newEjbObjectHandler(getDeploymentInfo(), primaryKey, objectInterfaceType, this.getInterfaces());
-
-            List<Class> proxyInterfaces = new ArrayList<Class>(handler.getInterfaces().size() + 1);
-
-            proxyInterfaces.addAll(handler.getInterfaces());
-            proxyInterfaces.add(IntraVmProxy.class);
+            EjbObjectProxyHandler handler = newEjbObjectHandler(getDeploymentInfo(), primaryKey, objectInterfaceType, this.getInterfaces(), mainInterface);
 
             if (InterfaceType.LOCALBEAN.equals(objectInterfaceType)) {
                 return LocalBeanProxyFactory.newProxyInstance(handler.getDeploymentInfo().getClassLoader(), handler.getDeploymentInfo().getBeanClass(), handler);
             } else {
+                List<Class> proxyInterfaces = new ArrayList<Class>(handler.getInterfaces().size() + 1);
+                proxyInterfaces.addAll(handler.getInterfaces());
+                proxyInterfaces.add(IntraVmProxy.class);
                 return ProxyManager.newProxyInstance(proxyInterfaces.toArray(new Class[]{}), handler);
             }
 
@@ -146,7 +144,7 @@ public abstract class EjbHomeProxyHandle
         }
     }
 
-    protected abstract EjbObjectProxyHandler newEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces);
+    protected abstract EjbObjectProxyHandler newEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface);
 
     protected Object _invoke(Object proxy, Class interfce, Method method, Object[] args) throws Throwable {
 
@@ -283,7 +281,7 @@ public abstract class EjbHomeProxyHandle
     protected Object create(Class interfce, Method method, Object[] args, Object proxy) throws Throwable {
         ProxyInfo proxyInfo = (ProxyInfo) container.invoke(deploymentID, interfaceType, interfce, method, args, null);
         assert proxyInfo != null : "Container returned a null ProxyInfo: ContainerID=" + container.getContainerID();
-        return createProxy(proxyInfo.getPrimaryKey());
+        return createProxy(proxyInfo.getPrimaryKey(), getMainInterface());
     }
 
     protected abstract Object findX(Class interfce, Method method, Object[] args, Object proxy) throws Throwable;
@@ -305,7 +303,10 @@ public abstract class EjbHomeProxyHandle
     }
 
     public org.apache.openejb.ProxyInfo getProxyInfo() {
-        return new org.apache.openejb.ProxyInfo(getDeploymentInfo(), null, getDeploymentInfo().getInterfaces(interfaceType), interfaceType);
+        if (getMainInterface() == null) {
+            throw new IllegalStateException("no main interface");
+        }
+        return new org.apache.openejb.ProxyInfo(getDeploymentInfo(), null, getDeploymentInfo().getInterfaces(interfaceType), interfaceType, getMainInterface());
     }
 
     protected Object _writeReplace(Object proxy) throws ObjectStreamException {

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?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- 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 Sat Aug 14 04:39:40 2010
@@ -49,8 +49,8 @@ public abstract class EjbObjectProxyHand
         
     }
 
-    public EjbObjectProxyHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces) {
-        super(deploymentInfo, pk, interfaceType, interfaces);
+    public EjbObjectProxyHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface) {
+        super(deploymentInfo, pk, interfaceType, interfaces, mainInterface);
     }
 
     public abstract Object getRegistryId();
@@ -170,7 +170,7 @@ public abstract class EjbObjectProxyHand
     }
 
     public org.apache.openejb.ProxyInfo getProxyInfo() {
-        return new org.apache.openejb.ProxyInfo(getDeploymentInfo(), primaryKey, getInterfaces(), interfaceType);
+        return new org.apache.openejb.ProxyInfo(getDeploymentInfo(), primaryKey, getInterfaces(), interfaceType, getMainInterface());
     }
 
     protected Object _writeReplace(Object proxy) throws ObjectStreamException {
@@ -217,17 +217,15 @@ public abstract class EjbObjectProxyHand
         return container.invoke(deploymentID, interfaceType, interfce, method, args, primaryKey);
     }
 
-    public static Object createProxy(DeploymentInfo deploymentInfo, Object primaryKey, InterfaceType interfaceType) {
-        
-
-        return createProxy(deploymentInfo, primaryKey, interfaceType, null);
+    public static Object createProxy(DeploymentInfo deploymentInfo, Object primaryKey, InterfaceType interfaceType, Class mainInterface) {
+        return createProxy(deploymentInfo, primaryKey, interfaceType, null, mainInterface);
     }
 
-    public static Object createProxy(DeploymentInfo deploymentInfo, Object primaryKey, InterfaceType interfaceType, List<Class> interfaces) {
+    public static Object createProxy(DeploymentInfo deploymentInfo, Object primaryKey, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface) {
         if (!interfaceType.isHome()){
             interfaceType = interfaceType.getCounterpart();
         }
-        EjbHomeProxyHandler homeHandler = EjbHomeProxyHandler.createHomeHandler(deploymentInfo, interfaceType, interfaces);
-        return homeHandler.createProxy(primaryKey);
+        EjbHomeProxyHandler homeHandler = EjbHomeProxyHandler.createHomeHandler(deploymentInfo, interfaceType, interfaces, mainInterface);
+        return homeHandler.createProxy(primaryKey, mainInterface);
     }
 }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/IntraVmServer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/IntraVmServer.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/IntraVmServer.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/IntraVmServer.java Sat Aug 14 04:39:40 2010
@@ -43,11 +43,11 @@ public class IntraVmServer implements or
     }
 
     public EJBObject getEJBObject(ProxyInfo pi) {
-        return (EJBObject) EjbObjectProxyHandler.createProxy(pi.getDeploymentInfo(), pi.getPrimaryKey(), pi.getInterfaceType(), pi.getInterfaces());
+        return (EJBObject) EjbObjectProxyHandler.createProxy(pi.getDeploymentInfo(), pi.getPrimaryKey(), pi.getInterfaceType(), pi.getInterfaces(), pi.getInterface());
     }
 
     public Object getBusinessObject(ProxyInfo pi) {
-        return EjbObjectProxyHandler.createProxy(pi.getDeploymentInfo(), pi.getPrimaryKey(), pi.getInterfaceType(), pi.getInterfaces());
+        return EjbObjectProxyHandler.createProxy(pi.getDeploymentInfo(), pi.getPrimaryKey(), pi.getInterfaceType(), pi.getInterfaces(), pi.getInterface());
     }
 
     public EJBHome getEJBHome(ProxyInfo pi) {

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedHomeHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedHomeHandler.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedHomeHandler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedHomeHandler.java Sat Aug 14 04:39:40 2010
@@ -30,12 +30,12 @@ import org.apache.openejb.util.proxy.Pro
 
 public class ManagedHomeHandler extends EjbHomeProxyHandler {
 
-    public ManagedHomeHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> interfaces) {
-        super(deploymentInfo, interfaceType, interfaces);
+    public ManagedHomeHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface) {
+        super(deploymentInfo, interfaceType, interfaces, mainInterface);
     }
 
-    public Object createProxy(Object primaryKey) {
-        Object proxy = super.createProxy(primaryKey);
+    public Object createProxy(Object primaryKey, Class mainInterface) {
+        Object proxy = super.createProxy(primaryKey, mainInterface);
         EjbObjectProxyHandler handler = null;
 
         try {
@@ -62,8 +62,8 @@ public class ManagedHomeHandler extends 
         throw new RemoveException("Session objects are private resources and do not have primary keys");
     }
 
-    protected EjbObjectProxyHandler newEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces) {
-        return new ManagedObjectHandler(getDeploymentInfo(), pk, interfaceType, interfaces);
+    protected EjbObjectProxyHandler newEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface) {
+        return new ManagedObjectHandler(getDeploymentInfo(), pk, interfaceType, interfaces, mainInterface);
     }
 
 }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedObjectHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedObjectHandler.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedObjectHandler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedObjectHandler.java Sat Aug 14 04:39:40 2010
@@ -29,8 +29,8 @@ import java.io.Serializable;
 
 public class ManagedObjectHandler extends EjbObjectProxyHandler {
 
-    public ManagedObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces) {
-        super(deploymentInfo, pk, interfaceType, interfaces);
+    public ManagedObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface) {
+        super(deploymentInfo, pk, interfaceType, interfaces, mainInterface);
     }
 
     public Object getRegistryId() {

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonEjbHomeHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonEjbHomeHandler.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonEjbHomeHandler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonEjbHomeHandler.java Sat Aug 14 04:39:40 2010
@@ -28,8 +28,8 @@ import org.apache.openejb.core.ivm.EjbOb
 
 public class SingletonEjbHomeHandler extends EjbHomeProxyHandler {
 
-    public SingletonEjbHomeHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> interfaces) {
-        super(deploymentInfo, interfaceType, interfaces);
+    public SingletonEjbHomeHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface) {
+        super(deploymentInfo, interfaceType, interfaces, mainInterface);
     }
 
     protected Object findX(Class interfce, Method method, Object[] args, Object proxy) throws Throwable {
@@ -45,8 +45,8 @@ public class SingletonEjbHomeHandler ext
         return null;
     }
 
-    protected EjbObjectProxyHandler newEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces) {
-        return new SingletonEjbObjectHandler(getDeploymentInfo(), pk, interfaceType, interfaces);
+    protected EjbObjectProxyHandler newEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface) {
+        return new SingletonEjbObjectHandler(getDeploymentInfo(), pk, interfaceType, interfaces, mainInterface);
     }
 
 }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonEjbObjectHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonEjbObjectHandler.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonEjbObjectHandler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonEjbObjectHandler.java Sat Aug 14 04:39:40 2010
@@ -19,6 +19,7 @@ package org.apache.openejb.core.singleto
 import org.apache.openejb.Container;
 import org.apache.openejb.InterfaceType;
 import org.apache.openejb.DeploymentInfo;
+import org.apache.openejb.core.ivm.BaseEjbProxyHandler;
 import org.apache.openejb.core.ivm.EjbObjectProxyHandler;
 import org.apache.openejb.util.proxy.ProxyManager;
 
@@ -29,8 +30,8 @@ import java.util.List;
 public class SingletonEjbObjectHandler extends EjbObjectProxyHandler {
     public Object registryId;
 
-    public SingletonEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces) {
-        super(deploymentInfo, pk, interfaceType, interfaces);
+    public SingletonEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface) {
+        super(deploymentInfo, pk, interfaceType, interfaces, mainInterface);
     }
 
     public static Object createRegistryId(Object primKey, Object deployId, Container contnr) {

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEjbHomeHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEjbHomeHandler.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEjbHomeHandler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEjbHomeHandler.java Sat Aug 14 04:39:40 2010
@@ -30,12 +30,12 @@ import org.apache.openejb.util.proxy.Pro
 
 public class StatefulEjbHomeHandler extends EjbHomeProxyHandler {
 
-    public StatefulEjbHomeHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> interfaces) {
-        super(deploymentInfo, interfaceType, interfaces);
+    public StatefulEjbHomeHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface) {
+        super(deploymentInfo, interfaceType, interfaces, mainInterface);
     }
 
-    public Object createProxy(Object primaryKey) {
-        Object proxy = super.createProxy(primaryKey);
+    public Object createProxy(Object primaryKey, Class mainInterface) {
+        Object proxy = super.createProxy(primaryKey, mainInterface);
         EjbObjectProxyHandler handler = null;
 
         try {
@@ -62,8 +62,8 @@ public class StatefulEjbHomeHandler exte
         throw new RemoveException("Session objects are private resources and do not have primary keys");
     }
 
-    protected EjbObjectProxyHandler newEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces) {
-        return new StatefulEjbObjectHandler(getDeploymentInfo(), pk, interfaceType, interfaces);
+    protected EjbObjectProxyHandler newEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface) {
+        return new StatefulEjbObjectHandler(getDeploymentInfo(), pk, interfaceType, interfaces, mainInterface);
     }
 
 }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEjbObjectHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEjbObjectHandler.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEjbObjectHandler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulEjbObjectHandler.java Sat Aug 14 04:39:40 2010
@@ -29,8 +29,8 @@ import java.io.Serializable;
 
 public class StatefulEjbObjectHandler extends EjbObjectProxyHandler {
 
-    public StatefulEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces) {
-        super(deploymentInfo, pk, interfaceType, interfaces);
+    public StatefulEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface) {
+        super(deploymentInfo, pk, interfaceType, interfaces, mainInterface);
     }
 
     public Object getRegistryId() {

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbHomeHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbHomeHandler.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbHomeHandler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbHomeHandler.java Sat Aug 14 04:39:40 2010
@@ -28,8 +28,8 @@ import org.apache.openejb.core.ivm.EjbOb
 
 public class StatelessEjbHomeHandler extends EjbHomeProxyHandler {
 
-    public StatelessEjbHomeHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> interfaces) {
-        super(deploymentInfo, interfaceType, interfaces);
+    public StatelessEjbHomeHandler(DeploymentInfo deploymentInfo, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface) {
+        super(deploymentInfo, interfaceType, interfaces, mainInterface);
     }
 
     protected Object findX(Class interfce, Method method, Object[] args, Object proxy) throws Throwable {
@@ -45,8 +45,8 @@ public class StatelessEjbHomeHandler ext
         return null;
     }
 
-    protected EjbObjectProxyHandler newEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces) {
-        return new StatelessEjbObjectHandler(getDeploymentInfo(), pk, interfaceType, interfaces);
+    protected EjbObjectProxyHandler newEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface) {
+        return new StatelessEjbObjectHandler(getDeploymentInfo(), pk, interfaceType, interfaces, mainInterface);
     }
 
 }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbObjectHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbObjectHandler.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbObjectHandler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbObjectHandler.java Sat Aug 14 04:39:40 2010
@@ -29,8 +29,8 @@ import java.util.List;
 public class StatelessEjbObjectHandler extends EjbObjectProxyHandler {
     public Object registryId;
 
-    public StatelessEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces) {
-        super(deploymentInfo, pk, interfaceType, interfaces);
+    public StatelessEjbObjectHandler(DeploymentInfo deploymentInfo, Object pk, InterfaceType interfaceType, List<Class> interfaces, Class mainInterface) {
+        super(deploymentInfo, pk, interfaceType, interfaces, mainInterface);
     }
 
     public static Object createRegistryId(Object primKey, Object deployId, Container contnr) {

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyFactory.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyFactory.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyFactory.java Sat Aug 14 04:39:40 2010
@@ -17,8 +17,8 @@
 package org.apache.openejb.util.proxy;
 
 import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Proxy;
 
 public class LocalBeanProxyFactory {
 
@@ -39,4 +39,19 @@ public class LocalBeanProxyFactory {
         }
     }
 
+    public static InvocationHandler getInvocationHandler(Object proxy) {
+        try {
+            Field field = proxy.getClass().getDeclaredField("invocationHandler");
+            field.setAccessible(true);
+            try {
+                return (InvocationHandler) field.get(proxy);
+            } finally {
+                field.setAccessible(false);
+            }
+        } catch (NoSuchFieldException e) {
+            throw new IllegalArgumentException(e);
+        } catch (IllegalAccessException e) {
+            throw new IllegalArgumentException(e);
+        }
+    }
 }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyManager.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyManager.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyManager.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyManager.java Sat Aug 14 04:39:40 2010
@@ -60,6 +60,9 @@ public class ProxyManager {
     }
 
     public static InvocationHandler getInvocationHandler(Object proxy) {
+        if (proxy.getClass().getName().endsWith("$LocalBeanProxy")) {
+            return LocalBeanProxyFactory.getInvocationHandler(proxy);
+        }
         checkDefaultFactory();
         return defaultFactory.getInvocationHandler(proxy);
     }

Modified: openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBMetaDataImpl.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBMetaDataImpl.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBMetaDataImpl.java (original)
+++ openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBMetaDataImpl.java Sat Aug 14 04:39:40 2010
@@ -51,6 +51,8 @@ public class EJBMetaDataImpl implements 
 
     protected final transient List<Class> businessClasses = new ArrayList<Class>();
 
+    protected transient Class mainInterface;
+
     protected final transient Properties properties = new Properties();
 
     protected transient Class keyClass;
@@ -99,7 +101,7 @@ public class EJBMetaDataImpl implements 
         this.deploymentID = deploymentID;
     }
 
-    public EJBMetaDataImpl(Class homeInterface, Class remoteInterface, Class primaryKeyClass, String typeOfBean, String deploymentID, int deploymentCode, InterfaceType interfaceType, List<Class> businessInterfaces) {
+    public EJBMetaDataImpl(Class homeInterface, Class remoteInterface, Class primaryKeyClass, String typeOfBean, String deploymentID, int deploymentCode, InterfaceType interfaceType, List<Class> businessInterfaces, Class mainInterface) {
         this(homeInterface, remoteInterface, primaryKeyClass, typeOfBean, deploymentID, interfaceType, businessInterfaces);
         this.deploymentCode = deploymentCode;
     }
@@ -156,6 +158,10 @@ public class EJBMetaDataImpl implements 
         return businessClasses;
     }
 
+    public Class getMainInterface() {
+        return mainInterface;
+    }
+
     public Properties getProperties() {
         return properties;
     }
@@ -170,7 +176,7 @@ public class EJBMetaDataImpl implements 
 
     public void writeExternal(ObjectOutput out) throws IOException {
         // write out the version of the serialized data for future use
-        out.writeByte(2);
+        out.writeByte(3);
 
         out.writeObject(homeClass);
         out.writeObject(remoteClass);
@@ -186,7 +192,7 @@ public class EJBMetaDataImpl implements 
         if (businessClasses.size() >0){
             out.writeObject(primaryKey);
         }
-
+        out.writeObject(mainInterface);
         out.writeByte(interfaceType.ordinal());
 
         if (properties.size() == 0) {
@@ -221,7 +227,9 @@ public class EJBMetaDataImpl implements 
         if (businessClasses.size() > 0){
             primaryKey = in.readObject();
         }
-
+        if (version > 2) {
+            mainInterface = (Class) in.readObject();
+        }
         if (version > 1) {
             byte typeIndex = in.readByte();
             interfaceType = InterfaceType.values()[typeIndex];

Modified: openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ClientObjectFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ClientObjectFactory.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ClientObjectFactory.java (original)
+++ openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ClientObjectFactory.java Sat Aug 14 04:39:40 2010
@@ -18,7 +18,6 @@ package org.apache.openejb.server.ejbd;
 
 import java.net.URI;
 import java.util.Properties;
-import java.util.Map;
 
 import org.apache.openejb.DeploymentInfo;
 import org.apache.openejb.ProxyInfo;
@@ -144,7 +143,10 @@ class ClientObjectFactory implements org
                 deployment.getPrimaryKeyClass(),
                 deployment.getComponentType().toString(),
                 deployment.getDeploymentID().toString(),
-                idCode, convert(info.getInterfaceType()), info.getInterfaces());
+                idCode,
+                convert(info.getInterfaceType()),
+                info.getInterfaces(),
+                info.getInterface());
         eMetaData.loadProperties(deployment.getProperties());
         
         Object primKey = info.getPrimaryKey();
@@ -194,7 +196,10 @@ class ClientObjectFactory implements org
                 deployment.getPrimaryKeyClass(),
                 deployment.getComponentType().toString(),
                 deployment.getDeploymentID().toString(),
-                idCode, convert(info.getInterfaceType()), null);
+                idCode,
+                convert(info.getInterfaceType()),
+                info.getInterfaces(),
+                info.getInterface());
         eMetaData.loadProperties(deployment.getProperties());
         return eMetaData;
     }

Modified: openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java (original)
+++ openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java Sat Aug 14 04:39:40 2010
@@ -54,7 +54,6 @@ import org.apache.openejb.client.Request
 import org.apache.openejb.client.ResponseCodes;
 import org.apache.openejb.client.ThrowableArtifact;
 import org.apache.openejb.client.WsMetaData;
-import org.apache.openejb.client.InterfaceType;
 import org.apache.openejb.core.ivm.BaseEjbProxyHandler;
 import org.apache.openejb.core.ivm.naming.IvmContext;
 import org.apache.openejb.core.webservices.HandlerChainData;
@@ -378,7 +377,10 @@ class JndiRequestHandler {
                         deployment.getPrimaryKeyClass(),
                         deployment.getComponentType().toString(),
                         deploymentID,
-                        -1, convert(proxyInfo.getInterfaceType()), null);
+                        -1,
+                        convert(proxyInfo.getInterfaceType()),
+                        null,
+                        proxyInfo.getInterface());
                 metaData.loadProperties(deployment.getProperties());
 
                 res.setResult(metaData);
@@ -397,7 +399,10 @@ class JndiRequestHandler {
                         deployment.getPrimaryKeyClass(),
                         deployment.getComponentType().toString(),
                         deploymentID,
-                        -1, convert(proxyInfo.getInterfaceType()), proxyInfo.getInterfaces());
+                        -1,
+                        convert(proxyInfo.getInterfaceType()),
+                        proxyInfo.getInterfaces(),
+                        proxyInfo.getInterface());
                 metaData.setPrimaryKey(proxyInfo.getPrimaryKey());
                 metaData.loadProperties(deployment.getProperties());
 

Modified: openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ServerSideResolver.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ServerSideResolver.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ServerSideResolver.java (original)
+++ openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ServerSideResolver.java Sat Aug 14 04:39:40 2010
@@ -55,7 +55,7 @@ public class ServerSideResolver implemen
             ContainerSystem containerSystem = SystemInstance.get().getComponent(ContainerSystem.class);
             DeploymentInfo deploymentInfo = containerSystem.getDeploymentInfo(ejb.getDeploymentID());
 
-            return EjbHomeProxyHandler.createHomeProxy(deploymentInfo, interfaceType, interfaces);
+            return EjbHomeProxyHandler.createHomeProxy(deploymentInfo, interfaceType, interfaces, ejb.getMainInterface());
         } catch (Exception e) {
             logger.error("ServerSideResolver.resolve() failed, falling back to ClientSideResolver: "+e.getClass().getName()+": "+e.getMessage(), e );
             return new EJBHomeProxyHandle.ClientSideResovler().resolve(handler);
@@ -78,7 +78,7 @@ public class ServerSideResolver implemen
             ContainerSystem containerSystem = SystemInstance.get().getComponent(ContainerSystem.class);
             DeploymentInfo deploymentInfo = containerSystem.getDeploymentInfo(ejb.getDeploymentID());
 
-            return EjbObjectProxyHandler.createProxy(deploymentInfo, handler.getPrimaryKey(), interfaceType, interfaces);
+            return EjbObjectProxyHandler.createProxy(deploymentInfo, handler.getPrimaryKey(), interfaceType, interfaces, ejb.getMainInterface());
         } catch (Exception e) {
             logger.error("ServerSideResolver.resolve() failed, falling back to ClientSideResolver: "+e.getClass().getName()+": "+e.getMessage(), e );
             return new EJBObjectProxyHandle.ClientSideResovler().resolve(handler);

Modified: openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/DeploymentIndexTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/DeploymentIndexTest.java?rev=985428&r1=985427&r2=985428&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/DeploymentIndexTest.java (original)
+++ openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/DeploymentIndexTest.java Sat Aug 14 04:39:40 2010
@@ -46,7 +46,7 @@ public class DeploymentIndexTest {
 
     @Test
     public void testGetDeploymentEJBRequest() throws RemoteException {
-        EJBMetaDataImpl ejbMetadataWithId = new EJBMetaDataImpl(null, null, null, null, null, 1, InterfaceType.BUSINESS_REMOTE, null);
+        EJBMetaDataImpl ejbMetadataWithId = new EJBMetaDataImpl(null, null, null, null, null, 1, InterfaceType.BUSINESS_REMOTE, null, null);
         EJBRequest request = new EJBRequest(0, ejbMetadataWithId, method, null, null);
         DeploymentInfo info = deploymentIndex.getDeployment(request);
         assert deploymentInfo.equals(info);
@@ -56,7 +56,7 @@ public class DeploymentIndexTest {
     @Test(expected = RemoteException.class)
     public void testGetDeploymentEJBRequestRemoteException() throws RemoteException {
         // 0 causes DeploymentIndex to move further
-        EJBMetaDataImpl ejbMetadata = new EJBMetaDataImpl(null, null, null, null, null, 0, InterfaceType.BUSINESS_REMOTE, null);
+        EJBMetaDataImpl ejbMetadata = new EJBMetaDataImpl(null, null, null, null, null, 0, InterfaceType.BUSINESS_REMOTE, null, null);
         EJBRequest request = new EJBRequest(0, ejbMetadata, method, null, null);
         deploymentIndex.getDeployment(request);
     }