dain 2005/02/11 17:30:16
Modified: modules/core/src/java/org/openejb/client EJBHomeHandle.java
EJBObjectHandle.java
Log:
CMP container builder now propertly maps remove methods. This eliminates the
ArrayIndexOutOfBoundsException in TransactionPolicyManager.
Handle and HomeHandle can not be copied with serialization on client side.
Added Handle copy tests to itest suite
Revision Changes Path
1.4 +31 -7
openejb/modules/core/src/java/org/openejb/client/EJBHomeHandle.java
Index: EJBHomeHandle.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/EJBHomeHandle.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- EJBHomeHandle.java 8 Sep 2004 04:00:18 -0000 1.3
+++ EJBHomeHandle.java 11 Feb 2005 22:30:15 -0000 1.4
@@ -93,9 +93,9 @@
// Write the full proxy data
EJBMetaDataImpl ejb = handler.ejb;
- out.writeObject(ejb.homeClass);
- out.writeObject(ejb.remoteClass);
- out.writeObject(ejb.keyClass);
+ out.writeObject(getClassName(ejb.homeClass));
+ out.writeObject(getClassName(ejb.remoteClass));
+ out.writeObject(getClassName(ejb.keyClass));
out.writeByte(ejb.type);
out.writeUTF(ejb.deploymentID);
out.writeShort(ejb.deploymentCode);
@@ -109,9 +109,20 @@
EJBMetaDataImpl ejb = new EJBMetaDataImpl();
ServerMetaData server = new ServerMetaData();
- ejb.homeClass = (Class) in.readObject();
- ejb.remoteClass = (Class) in.readObject();
- ejb.keyClass = (Class) in.readObject();
+ ClassLoader classLoader =
Thread.currentThread().getContextClassLoader();
+ if (classLoader == null) {
+ classLoader = getClass().getClassLoader();
+ }
+
+ String homeClassName = (String) in.readObject();
+ ejb.homeClass = loadClass(classLoader, homeClassName);
+
+ String remoteClassName = (String) in.readObject();
+ ejb.remoteClass = loadClass(classLoader, remoteClassName);
+
+ String keyClassName = (String) in.readObject();
+ ejb.keyClass = loadClass(classLoader, keyClassName);
+
ejb.type = in.readByte();
ejb.deploymentID = in.readUTF();
ejb.deploymentCode = in.readShort();
@@ -122,4 +133,17 @@
ejbHomeProxy = handler.createEJBHomeProxy();
}
+ private static String getClassName(Class clazz) {
+ if (clazz == null) {
+ return null;
+ }
+ return clazz.getName();
+ }
+
+ private static Class loadClass(ClassLoader classLoader, String
homeClassName) throws ClassNotFoundException {
+ if (homeClassName == null) {
+ return null;
+ }
+ return classLoader.loadClass(homeClassName);
+ }
}
1.4 +32 -7
openejb/modules/core/src/java/org/openejb/client/EJBObjectHandle.java
Index: EJBObjectHandle.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/client/EJBObjectHandle.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- EJBObjectHandle.java 8 Sep 2004 04:00:18 -0000 1.3
+++ EJBObjectHandle.java 11 Feb 2005 22:30:15 -0000 1.4
@@ -106,9 +106,9 @@
// Write the full proxy data
EJBMetaDataImpl ejb = handler.ejb;
- out.writeObject(ejb.homeClass);
- out.writeObject(ejb.remoteClass);
- out.writeObject(ejb.keyClass);
+ out.writeObject(getClassName(ejb.homeClass));
+ out.writeObject(getClassName(ejb.remoteClass));
+ out.writeObject(getClassName(ejb.keyClass));
out.writeByte(ejb.type);
out.writeUTF(ejb.deploymentID);
out.writeShort(ejb.deploymentCode);
@@ -123,9 +123,20 @@
EJBMetaDataImpl ejb = new EJBMetaDataImpl();
ServerMetaData server = new ServerMetaData();
- ejb.homeClass = (Class) in.readObject();
- ejb.remoteClass = (Class) in.readObject();
- ejb.keyClass = (Class) in.readObject();
+ ClassLoader classLoader =
Thread.currentThread().getContextClassLoader();
+ if (classLoader == null) {
+ classLoader = getClass().getClassLoader();
+ }
+
+ String homeClassName = (String) in.readObject();
+ ejb.homeClass = loadClass(classLoader, homeClassName);
+
+ String remoteClassName = (String) in.readObject();
+ ejb.remoteClass = loadClass(classLoader, remoteClassName);
+
+ String keyClassName = (String) in.readObject();
+ ejb.keyClass = loadClass(classLoader, keyClassName);
+
ejb.type = in.readByte();
ejb.deploymentID = in.readUTF();
ejb.deploymentCode = in.readShort();
@@ -135,6 +146,20 @@
handler = EJBObjectHandler.createEJBObjectHandler(ejb, server,
primaryKey);
ejbObjectProxy = handler.createEJBObjectProxy();
+ }
+
+ private static String getClassName(Class clazz) {
+ if (clazz == null) {
+ return null;
+ }
+ return clazz.getName();
+ }
+
+ private static Class loadClass(ClassLoader classLoader, String
homeClassName) throws ClassNotFoundException {
+ if (homeClassName == null) {
+ return null;
+ }
+ return classLoader.loadClass(homeClassName);
}
}