View Javadoc

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.activemq.message;
19  
20  /***
21   * ReceiptHolder is a utility class used for waiting for receipts from Packets sent to the broker
22   * 
23   * @version $Revision: 1.5 $
24   */
25  public class ReceiptHolder {
26      private Receipt receipt;
27      private Object lock = new Object();
28      private boolean notified;
29  
30      /***
31       * Construct a receipt holder
32       */
33      public ReceiptHolder() {
34      }
35  
36      /***
37       * Set the Receipt for this holder
38       *
39       * @param r
40       */
41      public void setReceipt(Receipt r) {
42          synchronized (lock) {
43              this.receipt = r;
44              notified = true;
45              lock.notify();
46          }
47      }
48  
49      /***
50       * Get the Receipt
51       * 
52       * @return the Receipt or null if it is closed
53       */
54      public Receipt getReceipt() {
55          return getReceipt(0);
56      }
57  
58      /***
59       * wait upto <Code>timeout</Code> timeout ms to get a receipt
60       *
61       * @param timeout
62       * @return
63       */
64      public Receipt getReceipt(int timeout) {
65          synchronized (lock) {
66              if (!notified) {
67                  try {
68                      lock.wait(timeout);
69                  }
70                  catch (InterruptedException e) {
71                      e.printStackTrace();
72                  }
73              }
74          }
75          return this.receipt;
76      }
77  
78      /***
79       * close this holder
80       */
81      public void close() {
82          synchronized (lock) {
83              notified = true;
84              lock.notifyAll();
85          }
86      }
87  }