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.