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) {