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);
       }
   
   }
  
  
  

Reply via email to