You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ha...@apache.org on 2002/01/02 00:12:47 UTC

cvs commit: jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/common ProblemReply.java NotPublishedReply.java RequestFailedReply.java TryLaterReply.java

hammant     02/01/01 15:12:47

  Modified:    armi/src/java/org/apache/commons/armi/client
                        ArmiFactory.java
               armi/src/java/org/apache/commons/armi/client/impl
                        AbstractArmiHostContext.java
                        ObjectStreamInvocationHandler.java
               armi/src/java/org/apache/commons/armi/client/impl/direct
                        DirectArmiHostContext.java
                        DirectInvocationHandler.java
               armi/src/java/org/apache/commons/armi/client/impl/piped
                        PipedInvocationHandler.java
               armi/src/java/org/apache/commons/armi/client/impl/rmi
                        RmiInvocationHandler.java
               armi/src/java/org/apache/commons/armi/client/impl/socket
                        PlainSocketInvocationHandler.java
               armi/src/java/org/apache/commons/armi/common
                        NotPublishedReply.java RequestFailedReply.java
                        TryLaterReply.java
  Added:       armi/src/java/org/apache/commons/armi/client
                        ArmiConnectionListener.java
               armi/src/java/org/apache/commons/armi/client/impl
                        ArmiClientInvocationHandler.java
                        DefaultArmiConnectionListener.java
               armi/src/java/org/apache/commons/armi/common
                        ProblemReply.java
  Log:
  Recovering connection and Event API.
  
  Revision  Changes    Path
  1.4       +5 -4      jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/ArmiFactory.java
  
  Index: ArmiFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/ArmiFactory.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ArmiFactory.java	31 Dec 2001 12:07:31 -0000	1.3
  +++ ArmiFactory.java	1 Jan 2002 23:12:46 -0000	1.4
  @@ -1,8 +1,8 @@
   
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/ArmiFactory.java,v 1.3 2001/12/31 12:07:31 hammant Exp $
  - * $Revision: 1.3 $
  - * $Date: 2001/12/31 12:07:31 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/ArmiFactory.java,v 1.4 2002/01/01 23:12:46 hammant Exp $
  + * $Revision: 1.4 $
  + * $Date: 2002/01/01 23:12:46 $
    *
    * ====================================================================
    *
  @@ -72,7 +72,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.3 $
  + * @version $Revision: 1.4 $
    */
   public abstract class ArmiFactory {
   
  @@ -91,4 +91,5 @@
        */
       public abstract Object lookup(ArmiHostContext hostContext, String publishedServiceName)
           throws ArmiConnectionException;
  +
   }
  
  
  
  1.1                  jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/ArmiConnectionListener.java
  
  Index: ArmiConnectionListener.java
  ===================================================================
  
  /*
   * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/ArmiConnectionListener.java,v 1.1 2002/01/01 23:12:46 hammant Exp $
   * $Revision: 1.1 $
   * $Date: 2002/01/01 23:12:46 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Commons", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   */
  package org.apache.commons.armi.client;
  
  
  
  import org.apache.commons.armi.common.ArmiInvocationHandler;
  import org.apache.commons.armi.common.ArmiRequest;
  
  
  /**
   * Interface ArmiConnectionListener
   *
   *
   * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
   * @version * $Revision: 1.1 $
   */
  public interface ArmiConnectionListener {
  
      /**
       * Method methodCalled
       *
       *
       * @return
       *
       */
      void armiMethodCalled(String methodSignature, long duration);
  
      /**
       * Method armiServiceSuspended
       *
       *
       * @return
       *
       */
      void armiServiceSuspended(ArmiRequest armiRequest, int attempt, int suggestedWaitMillis);
  
      /**
       * Method armiServiceAbend
       *
       *
       * @return
       *
       */
      void armiServiceAbend(int attempt);
  
  }
  
  
  
  1.2       +22 -8     jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/AbstractArmiHostContext.java
  
  Index: AbstractArmiHostContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/AbstractArmiHostContext.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AbstractArmiHostContext.java	28 Dec 2001 18:08:37 -0000	1.1
  +++ AbstractArmiHostContext.java	1 Jan 2002 23:12:47 -0000	1.2
  @@ -1,8 +1,8 @@
   
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/AbstractArmiHostContext.java,v 1.1 2001/12/28 18:08:37 hammant Exp $
  - * $Revision: 1.1 $
  - * $Date: 2001/12/28 18:08:37 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/AbstractArmiHostContext.java,v 1.2 2002/01/01 23:12:47 hammant Exp $
  + * $Revision: 1.2 $
  + * $Date: 2002/01/01 23:12:47 $
    *
    * ====================================================================
    *
  @@ -65,6 +65,7 @@
   
   import org.apache.commons.armi.common.ArmiInvocationHandler;
   import org.apache.commons.armi.client.ArmiHostContext;
  +import org.apache.commons.armi.client.ArmiConnectionListener;
   
   
   /**
  @@ -72,11 +73,11 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
   public class AbstractArmiHostContext implements ArmiHostContext {
   
  -    private final ArmiInvocationHandler mArmiInvocationHandler;
  +    private final ArmiClientInvocationHandler mArmiClientInvocationHandler;
   
       /**
        * Constructor AbstractArmiHostContext
  @@ -85,8 +86,8 @@
        * @param armiInvocationHandler
        *
        */
  -    public AbstractArmiHostContext(ArmiInvocationHandler armiInvocationHandler) {
  -        this.mArmiInvocationHandler = armiInvocationHandler;
  +    public AbstractArmiHostContext(ArmiClientInvocationHandler armiClientInvocationHandler) {
  +        this.mArmiClientInvocationHandler = armiClientInvocationHandler;
       }
   
       /**
  @@ -97,6 +98,19 @@
        *
        */
       public ArmiInvocationHandler getInvocationHandler() {
  -        return mArmiInvocationHandler;
  +        return mArmiClientInvocationHandler;
       }
  +
  +    /**
  +     * Method setArmiConnectionListener
  +     *
  +     *
  +     * @param armiInvocationHandler
  +     * @return
  +     *
  +     */
  +    public void setArmiConnectionListener(ArmiConnectionListener armiConnectionListener) {
  +        mArmiClientInvocationHandler.setArmiConnectionListener(armiConnectionListener);
  +    }
  +
   }
  
  
  
  1.5       +38 -19    jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/ObjectStreamInvocationHandler.java
  
  Index: ObjectStreamInvocationHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/ObjectStreamInvocationHandler.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ObjectStreamInvocationHandler.java	1 Jan 2002 17:53:06 -0000	1.4
  +++ ObjectStreamInvocationHandler.java	1 Jan 2002 23:12:47 -0000	1.5
  @@ -1,8 +1,8 @@
   
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/ObjectStreamInvocationHandler.java,v 1.4 2002/01/01 17:53:06 hammant Exp $
  - * $Revision: 1.4 $
  - * $Date: 2002/01/01 17:53:06 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/ObjectStreamInvocationHandler.java,v 1.5 2002/01/01 23:12:47 hammant Exp $
  + * $Revision: 1.5 $
  + * $Date: 2002/01/01 23:12:47 $
    *
    * ====================================================================
    *
  @@ -72,10 +72,12 @@
   import org.apache.commons.armi.common.NotPublishedReply;
   import org.apache.commons.armi.common.NotPublishedException;
   import org.apache.commons.armi.common.PublishedNameRequest;
  +import org.apache.commons.armi.common.ProblemReply;
   
   import java.io.IOException;
   import java.io.ObjectOutputStream;
   import java.io.ObjectInputStream;
  +import java.net.SocketException;
   
   
   /**
  @@ -83,9 +85,9 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.4 $
  + * @version $Revision: 1.5 $
    */
  -public class ObjectStreamInvocationHandler implements ArmiInvocationHandler {
  +public abstract class ObjectStreamInvocationHandler extends ArmiClientInvocationHandler {
   
       ObjectInputStream mOIS;
       ObjectOutputStream mOOS;
  @@ -129,26 +131,43 @@
               while (true) {
                   boolean again = true;
                   ArmiReply reply = null;
  +                int tries = 0;
  +                long start = System.currentTimeMillis();
                   while (again) {
  +                    tries++;
                       again = false;
  -                    mOOS.writeObject(request);
  -                    mOOS.flush();
  -                    reply = (ArmiReply) mOIS.readObject();
  -                    if (reply instanceof TryLaterReply) {
  -                        int millis = ((TryLaterReply) reply).getSuggestedDelayMillis();
  -                        try {
  -                            Thread.sleep(millis);
  -                        } catch (InterruptedException ie) {}
  -                        again = true;
  -                    } else if (reply instanceof NotPublishedReply) {
  -                        throw new NotPublishedException(((PublishedNameRequest) request).getPublishedObjectName());
  +                    try {
  +                        mOOS.writeObject(request);
  +                        mOOS.flush();
  +                        reply = (ArmiReply) mOIS.readObject();
  +                        if (!(reply instanceof ProblemReply)) {
  +                            // speed?
  +                            if (reply instanceof TryLaterReply) {
  +                                int millis = ((TryLaterReply) reply).getSuggestedDelayMillis();
  +                                mArmiConnectionListener.armiServiceSuspended(request,tries,millis);
  +                                again = true;
  +                            } else if (reply instanceof NotPublishedReply) {
  +                                throw new NotPublishedException(((PublishedNameRequest) request).getPublishedObjectName());
  +                            }
  +                        }
  +                    } catch (IOException ioe) {
  +                        if (ioe instanceof SocketException) {
  +                            int retryConnectTries = 0;
  +                            while (!tryReconnect()) {
  +                                mArmiConnectionListener.armiServiceAbend(retryConnectTries);
  +                                retryConnectTries++;
  +                            }
  +                        } else {
  +                            throw new ArmiInvocationException("IO Exception during invocation to server"
  +                                              + ioe.getMessage());
  +                        }
                       }
                   }
  +                if (request instanceof MethodRequest) {
  +                    mArmiConnectionListener.armiMethodCalled(((MethodRequest) request).getMethodSignature(), System.currentTimeMillis() - start);
  +                }
                   return reply;
               }
  -        } catch (IOException e) {
  -            throw new ArmiInvocationException("IO Exception during invocation to server"
  -                                              + e.getMessage());
           } catch (ClassNotFoundException e) {
               throw new ArmiInvocationException("Class definition missing on Deserialization"
                                                 + e.getMessage());
  
  
  
  1.1                  jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/ArmiClientInvocationHandler.java
  
  Index: ArmiClientInvocationHandler.java
  ===================================================================
  
  /*
   * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/ArmiClientInvocationHandler.java,v 1.1 2002/01/01 23:12:47 hammant Exp $
   * $Revision: 1.1 $
   * $Date: 2002/01/01 23:12:47 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Commons", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   */
  package org.apache.commons.armi.client.impl;
  
  
  
  import org.apache.commons.armi.common.ArmiInvocationHandler;
  import org.apache.commons.armi.client.ArmiConnectionListener;
  
  
  /**
   * Class ArmiClientInvocationHandler
   *
   *
   * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
   * @version $Revision: 1.1 $
   */
  public abstract class ArmiClientInvocationHandler implements ArmiInvocationHandler {
  
      protected ArmiConnectionListener mArmiConnectionListener =
          new DefaultArmiConnectionListener();
  
      /**
       * Method setArmiConnectionListener
       *
       *
       * @param armiConnectionListener
       *
       */
      public void setArmiConnectionListener(ArmiConnectionListener armiConnectionListener) {
          mArmiConnectionListener = armiConnectionListener;
      }
  
      protected abstract boolean tryReconnect();
  }
  
  
  
  1.1                  jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/DefaultArmiConnectionListener.java
  
  Index: DefaultArmiConnectionListener.java
  ===================================================================
  
  /*
   * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/DefaultArmiConnectionListener.java,v 1.1 2002/01/01 23:12:47 hammant Exp $
   * $Revision: 1.1 $
   * $Date: 2002/01/01 23:12:47 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Commons", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   */
  package org.apache.commons.armi.client.impl;
  
  
  
  import org.apache.commons.armi.common.ArmiInvocationHandler;
  import org.apache.commons.armi.common.ArmiInvocationException;
  import org.apache.commons.armi.common.ArmiRequest;
  import org.apache.commons.armi.client.ArmiConnectionListener;
  
  
  /**
   * Interface ArmiConnectionListener
   *
   *
   * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
   * @version * $Revision: 1.1 $
   */
  public class DefaultArmiConnectionListener implements ArmiConnectionListener {
  
      /**
       * Method methodCalled
       *
       *
       * @return
       *
       */
      public void armiMethodCalled(final String methodSignature, final long duration) {
          // do mothing in default impl, could do logging.
      }
  
      /**
       * Method armiServiceSuspended
       *
       *
       * @return
       *
       */
      public void armiServiceSuspended(final ArmiRequest armiRequest, final int attempt, final int suggestedWaitMillis) {
          // Lets say that ten retries is too many.
          if (attempt == 10) {
              throw new ArmiInvocationException("Too many retries on suspended service");
          }
          System.out.println("ARMI service suspended, Trying to reconnect (attempt "+attempt+", waiting for "+suggestedWaitMillis/1000+" seconds)");
          // We are quite happy with the recommended wait time.
          try {
              Thread.sleep(suggestedWaitMillis);
          } catch (InterruptedException ie) {
              // TODO ?
          }
      }
  
      /**
       * Method armiServiceAbend
       *
       *
       * @return
       *
       */
      public void armiServiceAbend(int attempt) {
          // Lets say that ten retries is too many.
          if (attempt == 3) {
              throw new ArmiInvocationException("Too many retries on abended service");
          }
          System.out.println("ARMI service abnormally ended, Trying to reconnect (attempt "+attempt+")");
          // Increasing wait time.
          try {
              Thread.sleep((2^attempt) * 500);
          } catch (InterruptedException ie) {
              // TODO ?
          }
      }
  }
  
  
  
  1.2       +9 -4      jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/direct/DirectArmiHostContext.java
  
  Index: DirectArmiHostContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/direct/DirectArmiHostContext.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DirectArmiHostContext.java	28 Dec 2001 18:08:37 -0000	1.1
  +++ DirectArmiHostContext.java	1 Jan 2002 23:12:47 -0000	1.2
  @@ -1,8 +1,8 @@
   
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/direct/DirectArmiHostContext.java,v 1.1 2001/12/28 18:08:37 hammant Exp $
  - * $Revision: 1.1 $
  - * $Date: 2001/12/28 18:08:37 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/direct/DirectArmiHostContext.java,v 1.2 2002/01/01 23:12:47 hammant Exp $
  + * $Revision: 1.2 $
  + * $Date: 2002/01/01 23:12:47 $
    *
    * ====================================================================
    *
  @@ -64,6 +64,7 @@
   
   
   import org.apache.commons.armi.client.impl.AbstractArmiHostContext;
  +import org.apache.commons.armi.client.ArmiConnectionListener;
   import org.apache.commons.armi.common.ArmiInvocationHandler;
   import org.apache.commons.armi.common.ArmiConnectionException;
   
  @@ -73,7 +74,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
   public class DirectArmiHostContext extends AbstractArmiHostContext {
   
  @@ -90,4 +91,8 @@
               throws ArmiConnectionException {
           super(new DirectInvocationHandler(armiInvocationHandler));
       }
  +
  +    public void setArmiConnectionListener(ArmiConnectionListener armiConnectionListener) {
  +    }
  +
   }
  
  
  
  1.5       +30 -13    jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/direct/DirectInvocationHandler.java
  
  Index: DirectInvocationHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/direct/DirectInvocationHandler.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- DirectInvocationHandler.java	1 Jan 2002 17:53:06 -0000	1.4
  +++ DirectInvocationHandler.java	1 Jan 2002 23:12:47 -0000	1.5
  @@ -1,8 +1,8 @@
   
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/direct/DirectInvocationHandler.java,v 1.4 2002/01/01 17:53:06 hammant Exp $
  - * $Revision: 1.4 $
  - * $Date: 2002/01/01 17:53:06 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/direct/DirectInvocationHandler.java,v 1.5 2002/01/01 23:12:47 hammant Exp $
  + * $Revision: 1.5 $
  + * $Date: 2002/01/01 23:12:47 $
    *
    * ====================================================================
    *
  @@ -71,6 +71,10 @@
   import org.apache.commons.armi.common.NotPublishedReply;
   import org.apache.commons.armi.common.NotPublishedException;
   import org.apache.commons.armi.common.PublishedNameRequest;
  +import org.apache.commons.armi.common.ArmiInvocationException;
  +import org.apache.commons.armi.common.ProblemReply;
  +import org.apache.commons.armi.common.MethodRequest;
  +import org.apache.commons.armi.client.impl.ArmiClientInvocationHandler;
   
   
   /**
  @@ -78,9 +82,9 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.4 $
  + * @version $Revision: 1.5 $
    */
  -public final class DirectInvocationHandler implements ArmiInvocationHandler {
  +public final class DirectInvocationHandler extends ArmiClientInvocationHandler {
   
       ArmiInvocationHandler mArmiInvocationHandler;
   
  @@ -110,19 +114,32 @@
       public ArmiReply handleInvocation(ArmiRequest request) {
           boolean again = true;
           ArmiReply reply = null;
  +        int tries = 0;
  +        long start = System.currentTimeMillis();
           while (again) {
  +            tries++;
               again = false;
               reply = mArmiInvocationHandler.handleInvocation(request);
  -            if (reply instanceof TryLaterReply) {
  -                int millis = ((TryLaterReply) reply).getSuggestedDelayMillis();
  -                    try {
  -                        Thread.sleep(millis);
  -                    } catch (InterruptedException ie) {}
  -                again = true;
  -            } else if (reply instanceof NotPublishedReply) {
  -                throw new NotPublishedException(((PublishedNameRequest) request).getPublishedObjectName());
  +            if (!(reply instanceof ProblemReply)) {
  +                // speed?
  +                if (reply instanceof TryLaterReply) {
  +                    int millis = ((TryLaterReply) reply).getSuggestedDelayMillis();
  +                    mArmiConnectionListener.armiServiceSuspended(request,tries,millis);
  +                    again = true;
  +                } else if (reply instanceof NotPublishedReply) {
  +                    throw new NotPublishedException(((PublishedNameRequest) request).getPublishedObjectName());
  +                }
               }
           }
  +        if (request instanceof MethodRequest) {
  +            mArmiConnectionListener.armiMethodCalled(((MethodRequest) request).getMethodSignature(), System.currentTimeMillis() - start);
  +        }
           return reply;
       }
  +
  +    protected boolean tryReconnect() {
  +        // blimey how do we reconnect this?
  +        throw new ArmiInvocationException("Direct connection broken, unable to reconnect.");
  +    }
  +
   }
  
  
  
  1.2       +10 -4     jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/piped/PipedInvocationHandler.java
  
  Index: PipedInvocationHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/piped/PipedInvocationHandler.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- PipedInvocationHandler.java	28 Dec 2001 18:08:37 -0000	1.1
  +++ PipedInvocationHandler.java	1 Jan 2002 23:12:47 -0000	1.2
  @@ -1,8 +1,8 @@
   
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/piped/PipedInvocationHandler.java,v 1.1 2001/12/28 18:08:37 hammant Exp $
  - * $Revision: 1.1 $
  - * $Date: 2001/12/28 18:08:37 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/piped/PipedInvocationHandler.java,v 1.2 2002/01/01 23:12:47 hammant Exp $
  + * $Revision: 1.2 $
  + * $Date: 2002/01/01 23:12:47 $
    *
    * ====================================================================
    *
  @@ -66,6 +66,7 @@
   import org.apache.commons.armi.client.impl.ObjectStreamInvocationHandler;
   import org.apache.commons.armi.common.ArmiConnectionException;
   import org.apache.commons.armi.common.ArmiPipeConnector;
  +import org.apache.commons.armi.common.ArmiInvocationException;
   
   import java.io.PipedOutputStream;
   import java.io.PipedInputStream;
  @@ -79,7 +80,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
   public final class PipedInvocationHandler extends ObjectStreamInvocationHandler {
   
  @@ -106,5 +107,10 @@
               throw new ArmiConnectionException("Cannot bind the pipes together :"
                                                 + ioe.getMessage());
           }
  +    }
  +
  +    protected boolean tryReconnect() {
  +        // blimey how do we reconnect this?
  +        throw new ArmiInvocationException("Piped connection broken, unable to reconnect.");
       }
   }
  
  
  
  1.5       +62 -25    jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/rmi/RmiInvocationHandler.java
  
  Index: RmiInvocationHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/rmi/RmiInvocationHandler.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- RmiInvocationHandler.java	1 Jan 2002 17:53:06 -0000	1.4
  +++ RmiInvocationHandler.java	1 Jan 2002 23:12:47 -0000	1.5
  @@ -1,8 +1,8 @@
   
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/rmi/RmiInvocationHandler.java,v 1.4 2002/01/01 17:53:06 hammant Exp $
  - * $Revision: 1.4 $
  - * $Date: 2002/01/01 17:53:06 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/rmi/RmiInvocationHandler.java,v 1.5 2002/01/01 23:12:47 hammant Exp $
  + * $Revision: 1.5 $
  + * $Date: 2002/01/01 23:12:47 $
    *
    * ====================================================================
    *
  @@ -73,10 +73,15 @@
   import org.apache.commons.armi.common.NotPublishedReply;
   import org.apache.commons.armi.common.NotPublishedException;
   import org.apache.commons.armi.common.PublishedNameRequest;
  +import org.apache.commons.armi.common.MethodRequest;
  +import org.apache.commons.armi.common.ProblemReply;
  +import org.apache.commons.armi.client.impl.ArmiClientInvocationHandler;
   
   import java.rmi.Naming;
   import java.rmi.RemoteException;
   import java.rmi.NotBoundException;
  +import java.rmi.ConnectException;
  +import java.rmi.ConnectIOException;
   
   import java.net.MalformedURLException;
   
  @@ -86,11 +91,12 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.4 $
  + * @version $Revision: 1.5 $
    */
  -public final class RmiInvocationHandler implements ArmiInvocationHandler {
  +public final class RmiInvocationHandler extends ArmiClientInvocationHandler {
   
  -    RmiArmiInvocationHandler mRmiArmiInvocationHandler;
  +    private RmiArmiInvocationHandler mRmiArmiInvocationHandler;
  +    private String mURL;
   
       /**
        * Constructor RmiInvocationHandler
  @@ -104,11 +110,11 @@
        */
       public RmiInvocationHandler(String host, int port) throws ArmiConnectionException {
   
  -        String url = "rmi://" + host + ":" + port + "/"
  +        mURL = "rmi://" + host + ":" + port + "/"
                        + RmiArmiInvocationHandler.class.getName();
   
           try {
  -            mRmiArmiInvocationHandler = (RmiArmiInvocationHandler) Naming.lookup(url);
  +            mRmiArmiInvocationHandler = (RmiArmiInvocationHandler) Naming.lookup(mURL);
           } catch (NotBoundException nbe) {
               throw new ArmiConnectionException(
                   "Cannot bind to the remote RMI service.  Either an IP or RMI issue.");
  @@ -121,6 +127,21 @@
       }
   
       /**
  +     * Method tryReconnect
  +     *
  +     * @return
  +     *
  +     */
  +    protected boolean tryReconnect() {
  +        try {
  +            mRmiArmiInvocationHandler = (RmiArmiInvocationHandler) Naming.lookup(mURL);
  +            return true;
  +        } catch (Exception e) {
  +            return false;
  +        }
  +    }
  +
  +    /**
        * Method handleInvocation
        *
        *
  @@ -131,26 +152,42 @@
        */
       public ArmiReply handleInvocation(ArmiRequest request) {
   
  -        try {
  -            boolean again = true;
  -            ArmiReply reply = null;
  -            while (again) {
  -                again = false;
  +        boolean again = true;
  +        ArmiReply reply = null;
  +        int tries = 0;
  +        long start = System.currentTimeMillis();
  +        while (again) {
  +            tries++;
  +            again = false;
  +            try {
  +
                   reply = mRmiArmiInvocationHandler.handleInvocation(request);
  -                if (reply instanceof TryLaterReply) {
  -                    int millis = ((TryLaterReply) reply).getSuggestedDelayMillis();
  -                    try {
  -                        Thread.sleep(millis);
  -                    } catch (InterruptedException ie) {}
  -                    again = true;
  -                } else if (reply instanceof NotPublishedReply) {
  -                    throw new NotPublishedException(((PublishedNameRequest) request).getPublishedObjectName());
  +                if (!(reply instanceof ProblemReply)) {
  +                    // speed?
  +                    if (reply instanceof TryLaterReply) {
  +                        int millis = ((TryLaterReply) reply).getSuggestedDelayMillis();
  +                        mArmiConnectionListener.armiServiceSuspended(request,tries,millis);
  +                        again = true;
  +                    } else if (reply instanceof NotPublishedReply) {
  +                        throw new NotPublishedException(((PublishedNameRequest) request).getPublishedObjectName());
  +                    }
  +                }
  +            } catch (RemoteException re) {
  +                if (re instanceof ConnectException | re instanceof  ConnectIOException) {
  +                    int retryConnectTries = 0;
  +                    mRmiArmiInvocationHandler = null;
  +                    while (!tryReconnect()) {
  +                        mArmiConnectionListener.armiServiceAbend(retryConnectTries);
  +                        retryConnectTries++;
  +                    }
  +                } else {
  +                    throw new ArmiInvocationException("Unknown RMI problem : " + re.getMessage());
                   }
               }
  -            return reply;
  -        } catch (RemoteException re) {
  -            // should impl so automagic try again here (for n times at least).
  -            throw new ArmiInvocationException("Unknown RMI problem : " + re.getMessage());
           }
  +        if (request instanceof MethodRequest) {
  +            mArmiConnectionListener.armiMethodCalled(((MethodRequest) request).getMethodSignature(), System.currentTimeMillis() - start);
  +        }
  +        return reply;
       }
   }
  
  
  
  1.2       +32 -11    jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/socket/PlainSocketInvocationHandler.java
  
  Index: PlainSocketInvocationHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/socket/PlainSocketInvocationHandler.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- PlainSocketInvocationHandler.java	28 Dec 2001 18:08:38 -0000	1.1
  +++ PlainSocketInvocationHandler.java	1 Jan 2002 23:12:47 -0000	1.2
  @@ -1,8 +1,8 @@
   
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/socket/PlainSocketInvocationHandler.java,v 1.1 2001/12/28 18:08:38 hammant Exp $
  - * $Revision: 1.1 $
  - * $Date: 2001/12/28 18:08:38 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/client/impl/socket/PlainSocketInvocationHandler.java,v 1.2 2002/01/01 23:12:47 hammant Exp $
  + * $Revision: 1.2 $
  + * $Date: 2002/01/01 23:12:47 $
    *
    * ====================================================================
    *
  @@ -61,28 +61,27 @@
    */
   package org.apache.commons.armi.client.impl.socket;
   
  -
  -
   import org.apache.commons.armi.client.impl.ObjectStreamInvocationHandler;
   import org.apache.commons.armi.common.ArmiConnectionException;
   
  +import java.net.Socket;
   import java.io.ObjectOutputStream;
   import java.io.ObjectInputStream;
   import java.io.IOException;
   
  -import java.net.Socket;
  -import java.net.MalformedURLException;
  -
   
   /**
    * Class PlainSocketInvocationHandler
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
   public final class PlainSocketInvocationHandler extends ObjectStreamInvocationHandler {
   
  +    private String mHost;
  +    private int mPort;
  +
       /**
        * Constructor PlainSocketInvocationHandler
        *
  @@ -94,16 +93,38 @@
        *
        */
       public PlainSocketInvocationHandler(String host, int port) throws ArmiConnectionException {
  -
  +        mHost = host;
  +        mPort = port;
           try {
               Socket socket = new Socket(host, port);
               ObjectOutputStream oOS = new ObjectOutputStream(socket.getOutputStream());
               ObjectInputStream oIS = new ObjectInputStream(socket.getInputStream());
  -
               setObjectInputStream(oIS);
               setObjectOutputStream(oOS);
           } catch (IOException ioe) {
               throw new ArmiConnectionException("Cannot open Stream(s) for socket");
  +        }
  +
  +
  +    }
  +
  +    /**
  +     * Method tryReconnect
  +     *
  +     *
  +     * @return connected or not.
  +     */
  +    protected boolean tryReconnect() {
  +        try {
  +            Socket socket = new Socket(mHost, mPort);
  +            ObjectOutputStream oOS = new ObjectOutputStream(socket.getOutputStream());
  +            ObjectInputStream oIS = new ObjectInputStream(socket.getInputStream());
  +
  +            setObjectInputStream(oIS);
  +            setObjectOutputStream(oOS);
  +            return true;
  +        } catch (IOException ioe) {
  +            return false;
           }
       }
   }
  
  
  
  1.2       +3 -3      jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/common/NotPublishedReply.java
  
  Index: NotPublishedReply.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/common/NotPublishedReply.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- NotPublishedReply.java	31 Dec 2001 13:48:21 -0000	1.1
  +++ NotPublishedReply.java	1 Jan 2002 23:12:47 -0000	1.2
  @@ -1,8 +1,8 @@
   
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/common/NotPublishedReply.java,v 1.1 2001/12/31 13:48:21 hammant Exp $
  - * $Revision: 1.1 $
  - * $Date: 2001/12/31 13:48:21 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/common/NotPublishedReply.java,v 1.2 2002/01/01 23:12:47 hammant Exp $
  + * $Revision: 1.2 $
  + * $Date: 2002/01/01 23:12:47 $
    *
    * ====================================================================
    *
  @@ -66,9 +66,9 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
  -public class NotPublishedReply extends ArmiReply {
  +public class NotPublishedReply extends ProblemReply {
   
   
       /**
  
  
  
  1.2       +3 -3      jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/common/RequestFailedReply.java
  
  Index: RequestFailedReply.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/common/RequestFailedReply.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- RequestFailedReply.java	30 Dec 2001 00:42:10 -0000	1.1
  +++ RequestFailedReply.java	1 Jan 2002 23:12:47 -0000	1.2
  @@ -1,8 +1,8 @@
   
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/common/RequestFailedReply.java,v 1.1 2001/12/30 00:42:10 hammant Exp $
  - * $Revision: 1.1 $
  - * $Date: 2001/12/30 00:42:10 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/common/RequestFailedReply.java,v 1.2 2002/01/01 23:12:47 hammant Exp $
  + * $Revision: 1.2 $
  + * $Date: 2002/01/01 23:12:47 $
    *
    * ====================================================================
    *
  @@ -68,9 +68,9 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
  -public class RequestFailedReply extends ArmiReply {
  +public class RequestFailedReply extends ProblemReply {
   
       private final String mFailureReason;
   
  
  
  
  1.3       +5 -5      jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/common/TryLaterReply.java
  
  Index: TryLaterReply.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/common/TryLaterReply.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TryLaterReply.java	1 Jan 2002 17:53:06 -0000	1.2
  +++ TryLaterReply.java	1 Jan 2002 23:12:47 -0000	1.3
  @@ -1,8 +1,8 @@
   
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/common/TryLaterReply.java,v 1.2 2002/01/01 17:53:06 hammant Exp $
  - * $Revision: 1.2 $
  - * $Date: 2002/01/01 17:53:06 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/common/TryLaterReply.java,v 1.3 2002/01/01 23:12:47 hammant Exp $
  + * $Revision: 1.3 $
  + * $Date: 2002/01/01 23:12:47 $
    *
    * ====================================================================
    *
  @@ -68,9 +68,9 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.2 $
  + * @version $Revision: 1.3 $
    */
  -public class TryLaterReply extends ArmiReply {
  +public class TryLaterReply extends ProblemReply {
   
       private final int mSuggestedDelayMillis;
   
  
  
  
  1.1                  jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/common/ProblemReply.java
  
  Index: ProblemReply.java
  ===================================================================
  
  /*
   * $Header: /home/cvs/jakarta-commons-sandbox/armi/src/java/org/apache/commons/armi/common/ProblemReply.java,v 1.1 2002/01/01 23:12:47 hammant Exp $
   * $Revision: 1.1 $
   * $Date: 2002/01/01 23:12:47 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Commons", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   */
  package org.apache.commons.armi.common;
  
  /**
   * Class ProblemReply
   *
   *
   * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
   * @version $Revision: 1.1 $
   */
  public class ProblemReply extends ArmiReply {
  
  
      /**
       * Constructor ProblemReply
       *
       */
      public ProblemReply() {
      }
  
  }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>