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);
}