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 }