1 /***
2 * Redistribution and use of this software and associated documentation
3 * ("Software"), with or without modification, are permitted provided
4 * that the following conditions are met:
5 *
6 * 1. Redistributions of source code must retain copyright
7 * statements and notices. Redistributions must also contain a
8 * copy of this document.
9 *
10 * 2. Redistributions in binary form must reproduce the
11 * above copyright notice, this list of conditions and the
12 * following disclaimer in the documentation and/or other
13 * materials provided with the distribution.
14 *
15 * 3. The name "Exolab" must not be used to endorse or promote
16 * products derived from this Software without prior written
17 * permission of Exoffice Technologies. For written permission,
18 * please contact info@exolab.org.
19 *
20 * 4. Products derived from this Software may not be called "Exolab"
21 * nor may "Exolab" appear in their names without prior written
22 * permission of Exoffice Technologies. Exolab is a registered
23 * trademark of Exoffice Technologies.
24 *
25 * 5. Due credit should be given to the Exolab Project
26 * (http://www.exolab.org/).
27 *
28 * THIS SOFTWARE IS PROVIDED BY EXOFFICE TECHNOLOGIES AND CONTRIBUTORS
29 * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
30 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
31 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
32 * EXOFFICE TECHNOLOGIES OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
33 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
34 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
35 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
36 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
37 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
38 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
39 * OF THE POSSIBILITY OF SUCH DAMAGE.
40 *
41 * Copyright 2000-2004 (C) Exoffice Technologies Inc. All Rights Reserved.
42 *
43 * $Id: JmsTopicSubscriber.java,v 1.10 2004/01/20 14:14:21 tanderson Exp $
44 */
45 package org.exolab.jms.client;
46
47 import javax.jms.InvalidDestinationException;
48 import javax.jms.JMSException;
49 import javax.jms.TopicSubscriber;
50 import javax.jms.Topic;
51
52
53 /***
54 * Client implementation of the <code>javax.jms.TopicSubscriber</code>
55 * interface
56 *
57 * @version $Revision: 1.10 $ $Date: 2004/01/20 14:14:21 $
58 * @author <a href="mailto:jima@comware.com.au">Jim Alateras</a>
59 * @author <a href="mailto:tma@netspace.net.au">Tim Anderson</a>
60 */
61 class JmsTopicSubscriber
62 extends JmsMessageConsumer
63 implements TopicSubscriber {
64
65 /***
66 * The topic to receive messages from
67 */
68 private JmsTopic _topic = null;
69
70 /***
71 * If <code>true</code>, indicates that locally published messages
72 * are inhibited.
73 */
74 private boolean _noLocal = false;
75
76 /***
77 * The subscription name, for durable subscribers. If <code>null</code>,
78 * indicates a non-durable subscriber.
79 */
80 private String _name = null;
81
82
83 /***
84 * Construct a new <code>JmsTopicSubscriber</code>
85 *
86 * @param session the session responsible for the consumer
87 * @param clientId the session allocated consumer identifier
88 * @param topic the topic to subscribe to
89 * @param selector the message selector. May be <code>null</code>
90 * @param noLocal if <code>true</code>, indicates that locally published
91 * messages are inhibited.
92 * @param name the subscription name, for durable consumers. If
93 * <code>null</code>, indicates a non-durable subscriber.
94 * @throws InvalidDestinationException if <code>topic</code> is null
95 */
96 public JmsTopicSubscriber(JmsSession session, long clientId,
97 JmsTopic topic, String selector,
98 boolean noLocal, String name)
99 throws InvalidDestinationException {
100 super(session, clientId, selector);
101 if (topic == null) {
102 throw new InvalidDestinationException("Argument 'topic' is null");
103 }
104
105 _topic = topic;
106 _noLocal = noLocal;
107 _name = name;
108 }
109
110 /***
111 * Returns the topic associated with this subscriber
112 *
113 * @return the topic associated with this subscriber
114 */
115 public Topic getTopic() {
116 return _topic;
117 }
118
119 /***
120 * Returns if locally published messages are being inhibited
121 *
122 * @return <code>true</code> if locally published messages are being
123 * inhibited.
124 */
125 public boolean getNoLocal() {
126 return _noLocal;
127 }
128
129 /***
130 * Return the durable subscription name
131 *
132 * @return the durable subscription name, or <code>null</code> if
133 * this is a non-durable subscriber
134 */
135 public String getName() {
136 return _name;
137 }
138
139 /***
140 * Determines if the subscriber is durable
141 *
142 * @return <code>true</code> if the subscriber is durable
143 */
144 public boolean isDurableSubscriber() {
145 return ((_name != null) && (_name.length() > 0));
146 }
147
148 /***
149 * Close the subscriber.
150 * This call blocks until a receive or message listener in progress has
151 * completed. A blocked subscriber receive call returns <code>null</code>
152 * when this subscriber is closed.
153 *
154 * @throws JMSException if this subscriber can't be closed
155 */
156 public synchronized void close() throws JMSException {
157 if (!isClosed()) {
158 // unregister this subscriber from the session and then call the
159 // base class method.
160 JmsTopicSession session = (JmsTopicSession) getSession();
161 session.removeSubscriber(this);
162 super.close();
163 }
164 }
165
166 /***
167 * Release all resources used by this subscriber
168 *
169 * @throws JMSException if this subscriber can't be destroyed
170 */
171 public synchronized void destroy() throws JMSException {
172 _topic = null;
173 super.destroy();
174 }
175
176 }
177
This page was automatically generated by Maven