You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by ri...@apache.org on 2007/01/09 16:18:15 UTC

svn commit: r494431 - in /incubator/openejb/trunk/openejb2/modules/openejb-corba/src/main/java/org/apache/openejb/corba: CORBAHandle.java CorbaApplicationServer.java StandardServant.java

Author: rickmcguire
Date: Tue Jan  9 07:18:14 2007
New Revision: 494431

URL: http://svn.apache.org/viewvc?view=rev&rev=494431
Log:
OPENEJB-437 Class loading problems with latest version of CORBAHandle

The serialization of this object has been simplied, and the validity checks are now performed with a narrow on the server 
end of the transaction rather than a straight instanceof.


Modified:
    incubator/openejb/trunk/openejb2/modules/openejb-corba/src/main/java/org/apache/openejb/corba/CORBAHandle.java
    incubator/openejb/trunk/openejb2/modules/openejb-corba/src/main/java/org/apache/openejb/corba/CorbaApplicationServer.java
    incubator/openejb/trunk/openejb2/modules/openejb-corba/src/main/java/org/apache/openejb/corba/StandardServant.java

Modified: incubator/openejb/trunk/openejb2/modules/openejb-corba/src/main/java/org/apache/openejb/corba/CORBAHandle.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb2/modules/openejb-corba/src/main/java/org/apache/openejb/corba/CORBAHandle.java?view=diff&rev=494431&r1=494430&r2=494431
==============================================================================
--- incubator/openejb/trunk/openejb2/modules/openejb-corba/src/main/java/org/apache/openejb/corba/CORBAHandle.java (original)
+++ incubator/openejb/trunk/openejb2/modules/openejb-corba/src/main/java/org/apache/openejb/corba/CORBAHandle.java Tue Jan  9 07:18:14 2007
@@ -42,28 +42,22 @@
  * or J2EE application components directly.
  *
  * @version $Revision$ $Date$
-*/
+ */
 public class CORBAHandle implements Handle, Serializable {
 
     private static final long serialVersionUID = -3390719015323727224L;
 
-    private String ior;
+    // the actual EJBObject instance
+    private EJBObject ejbObject;
     private Object primaryKey;
-    // the remote interface this EJBObject implements
-    private Class  remoteInterface; 
 
-    public CORBAHandle(String ior, Object primaryKey, Class remoteInterface) {
-        this.ior = ior;
+    public CORBAHandle(EJBObject ejb, Object primaryKey) {
+        this.ejbObject = ejb;
         this.primaryKey = primaryKey;
-        this.remoteInterface = remoteInterface; 
     }
 
     public EJBObject getEJBObject() throws RemoteException {
-        try {
-            return (EJBObject) PortableRemoteObject.narrow(getOrb().string_to_object(ior), remoteInterface);
-        } catch (Exception e) {
-            throw new RemoteException("Unable to convert IOR into object", e);
-        }
+        return ejbObject;
     }
 
     public Object getPrimaryKey() {
@@ -74,20 +68,12 @@
         HandleDelegate handleDelegate = getHandleDelegate();
         handleDelegate.writeEJBObject(getEJBObject(), out);
         out.writeObject(primaryKey);
-        out.writeObject(remoteInterface); 
     }
 
     private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
         HandleDelegate handleDelegate = getHandleDelegate();
-        EJBObject obj = handleDelegate.readEJBObject(in);
+        ejbObject = handleDelegate.readEJBObject(in);
         primaryKey = in.readObject();
-        remoteInterface = (Class)in.readObject(); 
-
-        try {
-            ior = getOrb().object_to_string((org.omg.CORBA.Object) obj);
-        } catch (Exception e) {
-            throw new RemoteException("Unable to convert object to IOR", e);
-        }
     }
 
     private static ORB getOrb() {

Modified: incubator/openejb/trunk/openejb2/modules/openejb-corba/src/main/java/org/apache/openejb/corba/CorbaApplicationServer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb2/modules/openejb-corba/src/main/java/org/apache/openejb/corba/CorbaApplicationServer.java?view=diff&rev=494431&r1=494430&r2=494431
==============================================================================
--- incubator/openejb/trunk/openejb2/modules/openejb-corba/src/main/java/org/apache/openejb/corba/CorbaApplicationServer.java (original)
+++ incubator/openejb/trunk/openejb2/modules/openejb-corba/src/main/java/org/apache/openejb/corba/CorbaApplicationServer.java Tue Jan  9 07:18:14 2007
@@ -57,9 +57,7 @@
     }
 
     public javax.ejb.Handle getHandle(ProxyInfo proxyInfo) {
-        org.omg.CORBA.Object ejbObject = (org.omg.CORBA.Object) getEJBObject(proxyInfo);
-        String ior = getOrb().object_to_string(ejbObject);
-        Handle handle = new CORBAHandle(ior, proxyInfo.getPrimaryKey(), proxyInfo.getRemoteInterface());
+        Handle handle = new CORBAHandle(getEJBObject(proxyInfo), proxyInfo.getPrimaryKey());
         return handle;
     }
 

Modified: incubator/openejb/trunk/openejb2/modules/openejb-corba/src/main/java/org/apache/openejb/corba/StandardServant.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb2/modules/openejb-corba/src/main/java/org/apache/openejb/corba/StandardServant.java?view=diff&rev=494431&r1=494430&r2=494431
==============================================================================
--- incubator/openejb/trunk/openejb2/modules/openejb-corba/src/main/java/org/apache/openejb/corba/StandardServant.java (original)
+++ incubator/openejb/trunk/openejb2/modules/openejb-corba/src/main/java/org/apache/openejb/corba/StandardServant.java Tue Jan  9 07:18:14 2007
@@ -23,12 +23,14 @@
 import java.rmi.RemoteException;
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.ejb.EJBHome;
 import javax.ejb.EJBObject;
 import javax.ejb.Handle;
 import javax.ejb.RemoveException;
 import javax.naming.Context;
 import javax.naming.NamingException;
+import javax.rmi.PortableRemoteObject;
 import javax.transaction.InvalidTransactionException;
 import javax.transaction.TransactionRequiredException;
 import javax.transaction.TransactionRolledbackException;
@@ -36,14 +38,19 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.geronimo.interceptor.InvocationResult;
-import org.apache.geronimo.naming.java.RootContext;
 import org.apache.geronimo.naming.enc.EnterpriseNamingContext;
-import org.omg.CORBA.ORB;
+import org.apache.geronimo.naming.java.RootContext;
+import org.apache.openejb.EJBInterfaceType;
+import org.apache.openejb.EjbInvocation;
+import org.apache.openejb.EjbInvocationImpl;
+import org.apache.openejb.RpcEjbDeployment;
+import org.apache.openejb.corba.util.Util;
 import org.omg.CORBA.BAD_OPERATION;
 import org.omg.CORBA.INVALID_TRANSACTION;
 import org.omg.CORBA.MARSHAL;
 import org.omg.CORBA.NO_PERMISSION;
 import org.omg.CORBA.OBJECT_NOT_EXIST;
+import org.omg.CORBA.ORB;
 import org.omg.CORBA.SystemException;
 import org.omg.CORBA.TRANSACTION_REQUIRED;
 import org.omg.CORBA.TRANSACTION_ROLLEDBACK;
@@ -54,11 +61,6 @@
 import org.omg.CORBA.portable.ResponseHandler;
 import org.omg.CORBA.portable.UnknownException;
 import org.omg.PortableServer.Servant;
-import org.apache.openejb.RpcEjbDeployment;
-import org.apache.openejb.EJBInterfaceType;
-import org.apache.openejb.EjbInvocation;
-import org.apache.openejb.EjbInvocationImpl;
-import org.apache.openejb.corba.util.Util;
 
 /**
  * @version $Revision$ $Date$
@@ -202,7 +204,14 @@
                                     throw new RemoveException("Handle is null");
                                 }
                                 Class remoteInterface = ejbDeploymentContext.getProxyInfo().getRemoteInterface();
-                                if (!remoteInterface.isInstance(handle.getEJBObject())) {
+
+
+                                try {
+                                    EJBObject narrowed = (EJBObject)PortableRemoteObject.narrow(handle.getEJBObject(), remoteInterface); 
+                                    if (narrowed == null) {
+                                        throw new RemoteException("Handle does not hold a " + remoteInterface.getName());
+                                    }
+                                } catch (ClassCastException e) {
                                     throw new RemoteException("Handle does not hold a " + remoteInterface.getName());
                                 }
                             } else {
@@ -272,9 +281,11 @@
                 throw new MARSHAL(e.toString());
             } catch (RemoteException e) {
                 log.debug("RemoteException", e);
+                e.printStackTrace(); 
                 throw new UnknownException(e);
             } catch (RuntimeException e) {
                 log.debug("RuntimeException", e);
+                e.printStackTrace(); 
                 RemoteException remoteException = new RemoteException(e.getClass().getName() + " thrown from " + ejbDeploymentContext.getContainerId() + ": " + e.getMessage());
                 throw new UnknownException(remoteException);
             } catch (Error e) {