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 2007/04/10 10:21:41 UTC
svn commit: r527055 - in /incubator/openejb/trunk/openejb3:
container/openejb-core/src/main/java/org/apache/openejb/core/ivm/
server/openejb-client/src/main/java/org/apache/openejb/client/
Author: djencks
Date: Tue Apr 10 01:21:41 2007
New Revision: 527055
URL: http://svn.apache.org/viewvc?view=rev&rev=527055
Log:
OPENEJB-557 throw AccessException for 2.1 clients, EJBAccessException for 3.0 clients
Modified:
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/server/openejb-client/src/main/java/org/apache/openejb/client/EJBHomeHandler.java
incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java
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=527055&r1=527054&r2=527055
==============================================================================
--- 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 Tue Apr 10 01:21:41 2007
@@ -16,37 +16,33 @@
*/
package org.apache.openejb.core.ivm;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
import java.io.ObjectStreamException;
import java.io.Serializable;
-import java.io.ByteArrayOutputStream;
-import java.io.ObjectOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ObjectInputStream;
-import java.lang.reflect.Method;
import java.lang.ref.WeakReference;
+import java.lang.reflect.Method;
import java.rmi.NoSuchObjectException;
import java.rmi.RemoteException;
-import java.rmi.AccessException;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Properties;
import javax.ejb.EJBException;
+import javax.ejb.NoSuchObjectLocalException;
import javax.ejb.TransactionRequiredLocalException;
import javax.ejb.TransactionRolledbackLocalException;
-import javax.ejb.NoSuchObjectLocalException;
-import javax.ejb.AccessLocalException;
import javax.transaction.TransactionRequiredException;
import javax.transaction.TransactionRolledbackException;
-import org.apache.openejb.RpcContainer;
import org.apache.openejb.InterfaceType;
-import org.apache.openejb.spi.SecurityService;
-import org.apache.openejb.spi.ContainerSystem;
-import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.RpcContainer;
import org.apache.openejb.core.CoreDeploymentInfo;
-import org.apache.openejb.core.ThreadContext;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
import org.apache.openejb.util.proxy.InvocationHandler;
import org.apache.openejb.util.proxy.ProxyManager;
@@ -250,12 +246,6 @@
} catch (NoSuchObjectException e) {
if (this.isLocal()) {
throw new NoSuchObjectLocalException(e.getMessage()).initCause(getCause(e));
- } else {
- throw e;
- }
- } catch (AccessException e) {
- if (this.isLocal()) {
- throw new AccessLocalException(e.getMessage()).initCause(getCause(e));
} else {
throw e;
}
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=527055&r1=527054&r2=527055
==============================================================================
--- 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 Tue Apr 10 01:21:41 2007
@@ -18,26 +18,29 @@
import java.io.ObjectStreamException;
import java.lang.reflect.Method;
+import java.rmi.AccessException;
import java.rmi.RemoteException;
import java.util.HashMap;
import java.util.Map;
-import javax.ejb.EJBHome;
+import javax.ejb.AccessLocalException;
+import javax.ejb.EJBAccessException;
import javax.ejb.EJBException;
+import javax.ejb.EJBHome;
+import org.apache.openejb.DeploymentInfo;
+import org.apache.openejb.InterfaceType;
import org.apache.openejb.ProxyInfo;
import org.apache.openejb.RpcContainer;
-import org.apache.openejb.InterfaceType;
-import org.apache.openejb.DeploymentInfo;
import org.apache.openejb.core.ServerFederation;
import org.apache.openejb.spi.ApplicationServer;
-import org.apache.openejb.util.proxy.ProxyManager;
import org.apache.openejb.util.Logger;
+import org.apache.openejb.util.proxy.ProxyManager;
public abstract class EjbHomeProxyHandler extends BaseEjbProxyHandler {
private static final Logger logger = Logger.getInstance("OpenEJB", "org.apache.openejb.util.resources");
- private final Map<String,MethodType> dispatchTable;
+ private final Map<String, MethodType> dispatchTable;
private static enum MethodType {
CREATE,
@@ -49,7 +52,7 @@
public EjbHomeProxyHandler(RpcContainer container, Object pk, Object depID, InterfaceType interfaceType) {
super(container, pk, depID, interfaceType);
- dispatchTable = new HashMap<String,MethodType>();
+ dispatchTable = new HashMap<String, MethodType>();
dispatchTable.put("create", MethodType.CREATE);
dispatchTable.put("getEJBMetaData", MethodType.META_DATA);
dispatchTable.put("getHomeHandle", MethodType.HOME_HANDLE);
@@ -60,9 +63,9 @@
Class homeInterface = deploymentInfo.getInterface(interfaceType);
Method[] methods = homeInterface.getMethods();
for (Method method : methods) {
- if (method.getName().startsWith("create")){
+ if (method.getName().startsWith("create")) {
dispatchTable.put(method.getName(), MethodType.CREATE);
- } else if (method.getName().startsWith("find")){
+ } else if (method.getName().startsWith("find")) {
dispatchTable.put(method.getName(), MethodType.FIND);
}
}
@@ -75,7 +78,7 @@
}
public Object createProxy(ProxyInfo proxyInfo) {
- Object newProxy = null;
+ Object newProxy;
try {
InterfaceType interfaceType = InterfaceType.EJB_OBJECT;
@@ -93,7 +96,8 @@
} catch (IllegalAccessException iae) {
throw new RuntimeException("Could not create IVM proxy for " + proxyInfo.getInterface() + " interface");
}
- if (newProxy == null) throw new RuntimeException("Could not create IVM proxy for " + proxyInfo.getInterface() + " interface");
+ if (newProxy == null)
+ throw new RuntimeException("Could not create IVM proxy for " + proxyInfo.getInterface() + " interface");
return newProxy;
}
@@ -181,7 +185,20 @@
* do not impact the viability of the proxy.
*/
} catch (org.apache.openejb.ApplicationException ae) {
- throw ae.getRootCause();
+ Throwable exc = (ae.getRootCause() != null) ? ae.getRootCause() : ae;
+ if (exc instanceof EJBAccessException) {
+ if (interfaceType.isBusiness()) {
+ throw exc;
+ } else {
+ if (this.isLocal()) {
+ throw new AccessLocalException(exc.getMessage());
+ } else {
+ throw new AccessException(exc.getMessage());
+ }
+ }
+
+ }
+ throw exc;
/*
* A system exception would be highly unusual and would indicate a sever
* problem with the container system.
@@ -215,7 +232,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();
+ assert proxyInfo != null : "Container returned a null ProxyInfo: ContainerID=" + container.getContainerID();
return createProxy(proxyInfo);
}
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=527055&r1=527054&r2=527055
==============================================================================
--- 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 Tue Apr 10 01:21:41 2007
@@ -19,6 +19,10 @@
import java.io.ObjectStreamException;
import java.lang.reflect.Method;
import java.rmi.RemoteException;
+import java.rmi.AccessException;
+
+import javax.ejb.EJBAccessException;
+import javax.ejb.AccessLocalException;
import org.apache.openejb.RpcContainer;
import org.apache.openejb.InterfaceType;
@@ -99,6 +103,18 @@
*/
} catch (org.apache.openejb.ApplicationException ae) {
exc = (ae.getRootCause() != null) ? ae.getRootCause() : ae;
+ if (exc instanceof EJBAccessException) {
+ if (interfaceType.isBusiness()) {
+ throw exc;
+ } else {
+ if (this.isLocal()) {
+ throw new AccessLocalException(exc.getMessage()).initCause(exc.getCause());
+ } else {
+ throw new AccessException(exc.getMessage());
+ }
+ }
+
+ }
throw exc;
/*
Modified: incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBHomeHandler.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBHomeHandler.java?view=diff&rev=527055&r1=527054&r2=527055
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBHomeHandler.java (original)
+++ incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBHomeHandler.java Tue Apr 10 01:21:41 2007
@@ -21,8 +21,10 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.lang.reflect.Method;
+import java.rmi.AccessException;
import java.rmi.RemoteException;
+import javax.ejb.EJBAccessException;
import javax.ejb.EJBHome;
import javax.ejb.Handle;
@@ -32,8 +34,8 @@
protected static final Method GETEJBMETADATA = getMethod(EJBHome.class, "getEJBMetaData", null);
protected static final Method GETHOMEHANDLE = getMethod(EJBHome.class, "getHomeHandle", null);
- protected static final Method REMOVE_W_KEY = getMethod(EJBHome.class, "remove", new Class []{Object.class});
- protected static final Method REMOVE_W_HAND = getMethod(EJBHome.class, "remove", new Class []{Handle.class});
+ protected static final Method REMOVE_W_KEY = getMethod(EJBHome.class, "remove", new Class[]{Object.class});
+ protected static final Method REMOVE_W_HAND = getMethod(EJBHome.class, "remove", new Class[]{Handle.class});
protected static final Method GETHANDLER = getMethod(EJBHomeProxy.class, "getEJBHomeHandler", null);
public EJBHomeHandler() {
@@ -152,7 +154,11 @@
* do not impact the viability of the proxy.
*/
} catch (ApplicationException ae) {
- throw ae.getCause();
+ Throwable exc = (ae.getCause() != null) ? ae.getCause() : ae;
+ if (exc instanceof EJBAccessException) {
+ throw new AccessException(exc.getMessage());
+ }
+ throw exc;
/*
* A system exception would be highly unusual and would indicate a sever
* problem with the container system.
Modified: incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java?view=diff&rev=527055&r1=527054&r2=527055
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java (original)
+++ incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java Tue Apr 10 01:21:41 2007
@@ -18,8 +18,11 @@
import java.lang.reflect.Method;
import java.rmi.RemoteException;
+import java.rmi.AccessException;
import javax.ejb.EJBObject;
+import javax.ejb.EJBAccessException;
+import javax.ejb.AccessLocalException;
import org.apache.openejb.client.proxy.ProxyManager;
@@ -155,7 +158,13 @@
* do not impact the viability of the proxy.
*/
} catch (ApplicationException ae) {
- throw ae.getCause();
+ Throwable exc = (ae.getCause() != null) ? ae.getCause() : ae;
+ if (exc instanceof EJBAccessException) {
+ if (EJBObject.class.isAssignableFrom(ejb.getRemoteInterfaceClass())) {
+ throw new AccessException(exc.getMessage());
+ }
+ }
+ throw exc;
/*
* A system exception would be highly unusual and would indicate a sever
* problem with the container system.