hammant     02/04/10 15:33:11

  Modified:    altrmi   callback.xml
               altrmi/src/java/org/apache/excalibur/altrmi/client/impl
                        BaseServedObject.java ServerClassAltrmiFactory.java
               altrmi/src/java/org/apache/excalibur/altrmi/client/impl/stream
                        ClientStreamReadWriter.java
               altrmi/src/java/org/apache/excalibur/altrmi/common
                        ClassRetrievalFailedReply.java
               altrmi/src/java/org/apache/excalibur/altrmi/server/impl/adapters
                        InvocationHandlerAdapter.java
               
altrmi/src/java/org/apache/excalibur/altrmi/server/impl/classretrievers
                        PlainClassRetriever.java
               altrmi/src/test/org/apache/excalibur/altrmi/test/callback
                        CallBackTestClient.java CallBackTestServer.java
  Log:
  Callback's enabled - first cut courtesy of Vinay.
  
  Revision  Changes    Path
  1.3       +11 -2     jakarta-avalon-excalibur/altrmi/callback.xml
  
  Index: callback.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/altrmi/callback.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- callback.xml      8 Apr 2002 20:24:23 -0000       1.2
  +++ callback.xml      10 Apr 2002 22:33:10 -0000      1.3
  @@ -56,11 +56,20 @@
         <classpath>
           <pathelement location="${build.home}/classes"/>
         </classpath>
  -    </altrmiproxies>        
  +    </altrmiproxies>    
  +    
  +    <altrmiproxies genname="CallBackTestListenerImpl" 
srcgendir="${build.home}/genjava" 
  +        classgendir="${build.home}/genclasses" verbose="true" 
  +        
interfaces="org.apache.excalibur.altrmi.test.callback.CallBackTestListener">
  +      <classpath>
  +        <pathelement location="${build.home}/classes"/>
  +      </classpath>
  +    </altrmiproxies>     
  +    
     
     </target>
   
  -  <target name="server" description="Callback test server">
  +  <target name="server" depends="generate" description="Callback test 
server">
     
       <echo>Warning : This spawns a seperate process that is not killed by 
Ctrl-C on this process</echo>
     
  
  
  
  1.2       +66 -4     
jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/client/impl/BaseServedObject.java
  
  Index: BaseServedObject.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/client/impl/BaseServedObject.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BaseServedObject.java     3 Apr 2002 11:29:50 -0000       1.1
  +++ BaseServedObject.java     10 Apr 2002 22:33:10 -0000      1.2
  @@ -27,6 +27,11 @@
   
   import java.lang.reflect.Array;
   
  +//callback
  +import org.apache.excalibur.altrmi.common.ExposedObjectProxy;
  +import 
org.apache.excalibur.altrmi.client.impl.socket.CallbackEnabledCustomSocketStreamInvocationHandler;
  +import java.util.StringTokenizer;
  +import org.apache.excalibur.altrmi.common.AltrmiCallbackException;
   
   /**
    * Class BaseServedObject
  @@ -34,7 +39,7 @@
    *
    * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
    * @author Vinay Chandrasekharan <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
   public final class BaseServedObject {
   
  @@ -44,7 +49,10 @@
       private final transient String mObjectName;
       private final transient Long mReferenceID;
       private final transient Long mSession;
  -
  +     //<callback related>
  +     private boolean mbIsCallbackAware=false;
  +     private CallbackEnabledCustomSocketStreamInvocationHandler 
mCallbackEnabledCustomSocketStreamInvocationHandler=null;
  +     //</callback related>
       /**
        * Constructor BaseServedObject
        *
  @@ -68,6 +76,15 @@
           mObjectName = objectName;
           mReferenceID = referenceID;
           mSession = session;
  +        //<callback related>
  +        if(mInvocationHandler instanceof 
CallbackEnabledCustomSocketStreamInvocationHandler)
  +             {
  +                     
  +                     mCallbackEnabledCustomSocketStreamInvocationHandler     
=
  +                             
(CallbackEnabledCustomSocketStreamInvocationHandler)mInvocationHandler;
  +                     mbIsCallbackAware=true;
  +             }
  +        //</callback related>                
       }
   
       /**
  @@ -203,7 +220,7 @@
        */
       public Object processObjectRequest(String methodSignature, Object[] 
args) throws Throwable {
   
  -        marshallCorrection(args);
  +        marshallCorrection(methodSignature,args);
   
           MethodRequest request = new MethodRequest(mPublishedServiceName, 
mObjectName,
                                                     methodSignature, args, 
mReferenceID, mSession);
  @@ -309,9 +326,24 @@
           }
       }
   
  -    private void marshallCorrection(Object[] args) {
  +    private void marshallCorrection(String methodSignature , Object[] args) {
  +
  +             String _methodArgumentClasses = 
methodSignature.substring(methodSignature.indexOf("(")+1,methodSignature.lastIndexOf(")"));
  +             StringTokenizer _methodArgumentClassTokens = new 
StringTokenizer(_methodArgumentClasses,",");
   
           for (int i = 0; i < args.length; i++) {
  +                     
  +                     String 
_sArgClass=_methodArgumentClassTokens.nextToken();
  +                     Class _cArgClass=null;
  +                     try
  +                     {
  +
  +                             _cArgClass=Class.forName(_sArgClass);
  +                     }
  +                     catch(ClassNotFoundException cnfe)
  +                     {
  +                             System.err.println("Class "+_sArgClass +" Not 
Found");
  +                     }
   
               //check whether its one of those remote ref that we got from the 
server
               //TODO : todo
  @@ -324,6 +356,36 @@
                       args[i] = makeFacadeRefHolder(proxy, objName);
                   }
               }
  +            else if(mbIsCallbackAware)
  +                     {
  +                             String publishedName = 
mCallbackEnabledCustomSocketStreamInvocationHandler.getPublishedName(args[i]);
  +                             if(publishedName!=null) //already published
  +                             {
  +                                     ExposedObjectProxy exposedObjectProxy = 
 new ExposedObjectProxy(publishedName);
  +                                     args[i]=exposedObjectProxy;
  +                             }
  +                             else //check whether its Publish'able
  +                             {
  +                                     if(!_cArgClass.isInterface()) //Hey do 
we handle only interfaces?
  +                                             continue;
  +                                     
if(_cArgClass.isAssignableFrom(args[i].getClass()))
  +                                     {
  +                                             try
  +                                             {
  +                                                     
mCallbackEnabledCustomSocketStreamInvocationHandler.exposeObject(args[i],_cArgClass);
  +                                             }
  +                                             catch(AltrmiCallbackException 
ace)
  +                                             {
  +                                                     ace.printStackTrace();
  +                                             }
  +                                             publishedName = 
mCallbackEnabledCustomSocketStreamInvocationHandler.getPublishedName(args[i]);
  +                                             ExposedObjectProxy 
exposedObjectProxy =  new ExposedObjectProxy(publishedName);
  +                                             args[i]=exposedObjectProxy;
  +
  +                                     }
  +
  +                             }
  +                     }
           }
       }
   
  
  
  
  1.2       +2 -2      
jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/client/impl/ServerClassAltrmiFactory.java
  
  Index: ServerClassAltrmiFactory.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/client/impl/ServerClassAltrmiFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ServerClassAltrmiFactory.java     3 Apr 2002 11:29:50 -0000       1.1
  +++ ServerClassAltrmiFactory.java     10 Apr 2002 22:33:10 -0000      1.2
  @@ -36,7 +36,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
   public class ServerClassAltrmiFactory extends AbstractAltrmiFactory {
   
  @@ -130,7 +130,7 @@
                           } else if (ar instanceof ClassRetrievalFailedReply) {
                               ClassRetrievalFailedReply crfr = 
(ClassRetrievalFailedReply) ar;
   
  -                            throw new AltrmiConnectionException("Exception 
on server side ");
  +                            throw new AltrmiConnectionException("Class 
Retrieval Failed - " + crfr.getReason());
                           }    //TODO others.
                       }
   
  
  
  
  1.2       +0 -2      
jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/client/impl/stream/ClientStreamReadWriter.java
  
  Index: ClientStreamReadWriter.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/client/impl/stream/ClientStreamReadWriter.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ClientStreamReadWriter.java       3 Apr 2002 11:29:52 -0000       1.1
  +++ ClientStreamReadWriter.java       10 Apr 2002 22:33:10 -0000      1.2
  @@ -13,8 +13,6 @@
   import org.apache.excalibur.altrmi.common.AltrmiRequest;
   import org.apache.excalibur.altrmi.common.AltrmiReply;
   
  -import java.io.InputStream;
  -import java.io.OutputStream;
   import java.io.IOException;
   
   
  @@ -23,7 +21,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
   public abstract class ClientStreamReadWriter
   {
  
  
  
  1.3       +57 -1     
jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/common/ClassRetrievalFailedReply.java
  
  Index: ClassRetrievalFailedReply.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/common/ClassRetrievalFailedReply.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ClassRetrievalFailedReply.java    4 Apr 2002 12:53:03 -0000       1.2
  +++ ClassRetrievalFailedReply.java    10 Apr 2002 22:33:10 -0000      1.3
  @@ -8,6 +8,9 @@
    */
   package org.apache.excalibur.altrmi.common;
   
  +import java.io.ObjectOutput;
  +import java.io.IOException;
  +import java.io.ObjectInput;
   
   
   /**
  @@ -15,12 +18,14 @@
    *
    *
    * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  - * @version $Revision: 1.2 $
  + * @version $Revision: 1.3 $
    */
   public final class ClassRetrievalFailedReply extends AltrmiReply
   {
       static final long serialVersionUID = -9005409182642544362L;
   
  +    private String mReason;
  +
       /**
        * Constructor RequestFailedReply
        *
  @@ -31,6 +36,15 @@
       {
       }
   
  +    public ClassRetrievalFailedReply(String reason)
  +    {
  +        mReason = reason;
  +    }
  +
  +    public String getReason() {
  +        return mReason;
  +    }
  +
       /**
        * Method getReplyCode.  This is quicker than instanceof for type 
checking.
        *
  @@ -42,4 +56,46 @@
       {
           return CLASSRETRIEVALFAILEDREPLY;
       }
  +
  +    /**
  +     * The object implements the writeExternal method to save its contents
  +     * by calling the methods of DataOutput for its primitive values or
  +     * calling the writeObject method of ObjectOutput for objects, strings,
  +     * and arrays.
  +     *
  +     * @serialData Overriding methods should use this tag to describe
  +     *             the data layout of this Externalizable object.
  +     *             List the sequence of element types and, if possible,
  +     *             relate the element to a public/protected field and/or
  +     *             method of this Externalizable class.
  +     *
  +     * @param out the stream to write the object to
  +     * @exception IOException Includes any I/O exceptions that may occur
  +     */
  +    public void writeExternal(ObjectOutput out) throws IOException
  +    {
  +
  +        super.writeExternal(out);
  +        out.writeObject(mReason);
  +    }
  +
  +    /**
  +     * The object implements the readExternal method to restore its
  +     * contents by calling the methods of DataInput for primitive
  +     * types and readObject for objects, strings and arrays.  The
  +     * readExternal method must read the values in the same sequence
  +     * and with the same types as were written by writeExternal.
  +     *
  +     * @param in the stream to read data from in order to restore the object
  +     * @exception IOException if I/O errors occur
  +     * @exception ClassNotFoundException If the class for an object being
  +     *              restored cannot be found.
  +     */
  +    public void readExternal(ObjectInput in) throws IOException, 
ClassNotFoundException
  +    {
  +
  +        super.readExternal(in);
  +        mReason = (String) in.readObject();
  +    }
  +
   }
  
  
  
  1.3       +3 -2      
jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/server/impl/adapters/InvocationHandlerAdapter.java
  
  Index: InvocationHandlerAdapter.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/server/impl/adapters/InvocationHandlerAdapter.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- InvocationHandlerAdapter.java     6 Apr 2002 21:29:23 -0000       1.2
  +++ InvocationHandlerAdapter.java     10 Apr 2002 22:33:10 -0000      1.3
  @@ -54,7 +54,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  - * @version $Revision: 1.2 $
  + * @version $Revision: 1.3 $
    */
   public class InvocationHandlerAdapter extends PublicationAdapter
           implements AltrmiInvocationHandler
  @@ -298,7 +298,8 @@
               }
               catch (ClassRetrievalException e)
               {
  -                return new ClassRetrievalFailedReply();
  +                e.printStackTrace();
  +                return new ClassRetrievalFailedReply(e.getMessage());
               }
           }
           else if (request.getRequestCode() == 
AltrmiRequest.OPENCONNECTIONREQUEST)
  
  
  
  1.2       +2 -2      
jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/server/impl/classretrievers/PlainClassRetriever.java
  
  Index: PlainClassRetriever.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/server/impl/classretrievers/PlainClassRetriever.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- PlainClassRetriever.java  3 Apr 2002 11:29:56 -0000       1.1
  +++ PlainClassRetriever.java  10 Apr 2002 22:33:10 -0000      1.2
  @@ -23,7 +23,7 @@
    *
    * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
    * @author Vinay Chandrasekharan <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
   public class PlainClassRetriever extends AbstractClassRetriever
   {
  @@ -57,7 +57,7 @@
   
           InputStream is = null;
   
  -        is = mClassLoader.getResourceAsStream(thingName);
  +        is = mClassLoader.getResourceAsStream(thingName+".class");
   
           if (is == null)
           {
  
  
  
  1.3       +1 -1      
jakarta-avalon-excalibur/altrmi/src/test/org/apache/excalibur/altrmi/test/callback/CallBackTestClient.java
  
  Index: CallBackTestClient.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/altrmi/src/test/org/apache/excalibur/altrmi/test/callback/CallBackTestClient.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- CallBackTestClient.java   8 Apr 2002 20:23:54 -0000       1.2
  +++ CallBackTestClient.java   10 Apr 2002 22:33:11 -0000      1.3
  @@ -43,7 +43,7 @@
   
           AltrmiHostContext arhc;
   
  -        arhc = new SocketCustomStreamHostContext("127.0.0.1", 1235);
  +        arhc = new CallbackEnabledCustomSocketStreamHostContext("127.0.0.1", 
1235);
   
           AltrmiFactory af = null;
   
  
  
  
  1.3       +1 -1      
jakarta-avalon-excalibur/altrmi/src/test/org/apache/excalibur/altrmi/test/callback/CallBackTestServer.java
  
  Index: CallBackTestServer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/altrmi/src/test/org/apache/excalibur/altrmi/test/callback/CallBackTestServer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- CallBackTestServer.java   8 Apr 2002 20:23:54 -0000       1.2
  +++ CallBackTestServer.java   10 Apr 2002 22:33:11 -0000      1.3
  @@ -39,7 +39,7 @@
   
           System.out.println("CallbackTest Server");
   
  -        AbstractServer as = new CompleteSocketCustomStreamServer(1235);
  +        AbstractServer as = new 
CallbackEnabledCustomSocketStreamServer(1235);
           
   
           as.setClassRetriever(new JarFileClassRetriever("build/classes2"));
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to