StubMessageListener xref

    1   /***
    2    *
    3    * Copyright 2004 Protique Ltd
    4    *
    5    * Licensed under the Apache License, Version 2.0 (the "License");
    6    * you may not use this file except in compliance with the License.
    7    * You may obtain a copy of the License at
    8    *
    9    * http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   *
    17   **/
    18  package org.codehaus.activecluster;
    19
    20  import javax.jms.Message;
    21  import javax.jms.MessageListener;
    22  import java.util.ArrayList;
    23  import java.util.List;
    24
    25  /***
    26   * A mock message listener for testing
    27   *
    28   * @version $Revision: 1.1 $
    29   */
    30  public class StubMessageListener implements MessageListener {
    31      private List messages = new ArrayList();
    32      private Object semaphore;
    33
    34      public StubMessageListener() {
    35          this(new Object());
    36      }
    37
    38      public StubMessageListener(Object semaphore) {
    39          this.semaphore = semaphore;
    40      }
    41
    42      /***
    43       * @return all the messages on the list so far, clearing the buffer
    44       */
    45      public synchronized List flushMessages() {
    46          List answer = new ArrayList(messages);
    47          messages.clear();
    48          return answer;
    49      }
    50
    51      public synchronized void onMessage(Message message) {
    52          messages.add(message);
    53          synchronized (semaphore) {
    54              semaphore.notifyAll();
    55          }
    56      }
    57
    58      public void waitForMessageToArrive() {
    59          System.out.println("Waiting for message to arrive");
    60
    61          long start = System.currentTimeMillis();
    62
    63          try {
    64              if (messages.isEmpty()) {
    65                  synchronized (semaphore) {
    66                      semaphore.wait(4000);
    67                  }
    68              }
    69          }
    70          catch (InterruptedException e) {
    71              System.out.println("Caught: " + e);
    72          }
    73          long end = System.currentTimeMillis() - start;
    74
    75          System.out.println("End of wait for " + end + " millis");
    76      }
    77  }