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-2003 (C) Exoffice Technologies Inc. All Rights Reserved.
42 *
43 * $Id: JmsSessionStubIfc.java,v 1.20 2003/08/17 01:32:21 tanderson Exp $
44 *
45 * Date Author Changes
46 * 04/12/2000 jima Created
47 */
48 package org.exolab.jms.client;
49
50 import java.util.Vector;
51
52 import javax.jms.JMSException;
53 import javax.jms.Message;
54 import javax.transaction.xa.XAException;
55 import javax.transaction.xa.XAResource;
56 import javax.transaction.xa.Xid;
57
58
59 /***
60 * This is the interface that session stubs must implement in order to
61 * support remote invocations. This level of indirection will enable us to
62 * support different ORB environments. The only restriction is that the
63 * stubs must support this interface and that it must have a default
64 * constructor.
65 *
66 * @version $Revision: 1.20 $ $Date: 2003/08/17 01:32:21 $
67 * @author <a href="mailto:jima@exoffice.com">Jim Alateras</a>
68 */
69 public interface JmsSessionStubIfc {
70
71 /***
72 * Return the client id associated with this session.
73 *
74 * @return the client id associated with this session
75 * @throws JMSException for any JMS error
76 */
77 String getClientId() throws JMSException;
78
79 /***
80 * Return the session identity. Session identities are unique
81 * within the context of a server.
82 *
83 * @return the session identity
84 * @throws JMSException for any JMS error
85 */
86 String getSessionId() throws JMSException;
87
88 /***
89 * This method is called before the call to <code>close</code>, so that the
90 * stub can do some local clean up
91 *
92 * @throws JMSException for any JMS error
93 */
94 void beforeClose() throws JMSException;
95
96 /***
97 * Close and release any resource allocated to this session.
98 *
99 * @throws JMSException for any JMS error
100 */
101 void close() throws JMSException;
102
103 /***
104 * Acknowledge the following message If this method does not complete then
105 * throw JMSException.
106 *
107 * @param clientId the identity ofthe client
108 * @param messageId the message identity to ack
109 * @throws JMSException for any JMS error
110 */
111 void acknowledgeMessage(long clientId, String messageId)
112 throws JMSException;
113
114 /***
115 * Send the specified message to the server. If there is any problem
116 * then throw the JMSException exception
117 *
118 * @param message the message to send
119 * @throws JMSException for any JMS error
120 */
121 void sendMessage(Message message) throws JMSException;
122
123 /***
124 * Send the specified messages to the server. If there is any problem
125 * then throw the JMSException exception
126 *
127 * @param messages the messages to send
128 * @throws JMSException for any JMS error
129 */
130 void sendMessages(Vector messages) throws JMSException;
131
132 /***
133 * Return the next message for the specified client. The client id
134 * maps to a consumer on the server side. The caller can also specify
135 * how long to wait if no messages are currently available. If the caller
136 * specifies 0 then the call will return immediately if there are no
137 * messages available. If the caller specified -1 then the call will
138 * block until a message becomes available.
139 *
140 * @param clientId the client identity
141 * @param wait the number of ms to wait. -1 means wait indefinitely.
142 * @return the next message or null
143 * @throws JMSException for any JMS error
144 */
145 Message receiveMessage(long clientId, long wait) throws JMSException;
146
147 /***
148 * Return a collection of messages from the specified client upto the
149 * nominated count. This method may return less than count messages
150 * but it will never return more than count messages
151 *
152 * @param client the client identity
153 * @param count max messages to return
154 * @return collection of MessageImpl objects
155 * @throws JMSException for any JMS error
156 */
157 Vector receiveMessages(long clientId, int count) throws JMSException;
158
159 /***
160 * Create a queue with the specified name. If the queue already exists
161 * then simply return a reference to it. If the queue does not exist
162 * then create it.
163 *
164 * @param queue the queue to create
165 * @throws JMSException for any JMS error
166 */
167 void createQueue(JmsQueue queue) throws JMSException;
168
169 /***
170 * Create a topic with the specified name. If the topic already exists
171 * then simply return a reference to it. If the topic does not exist
172 * then create it.
173 *
174 * @param topic the topic to create
175 * @throws JMSException for any JMS error
176 */
177 void createTopic(JmsTopic topic) throws JMSException;
178
179 /***
180 * Create a receiver endpoint for this session. A reciever is a message
181 * consumer specific to the queue message model. The receiver is associated
182 * with a queue.
183 * <p>
184 * You cannot create more than one receiver for the same destination
185 *
186 * @param queue the receiver destination
187 * @param clientId the session allocated identifier of this consumer
188 * @param selector the message selector. This may be null.
189 * @return the unique consumer identifier
190 * @throws JMSException for any JMS error
191 */
192 void createReceiver(JmsQueue queue, long clientId, String selector)
193 throws JMSException;
194
195 /***
196 * Create a sender endpoint for this session. A sender is a message
197 * publisher specific to the queue message model. The sender is associated
198 * with a queue.
199 * <p>
200 * You cannot create more than one receiver for the same destination
201 *
202 * @param queue the receiver destination
203 * @throws JMSException for any JMS error
204 */
205 void createSender(JmsQueue queue) throws JMSException;
206
207 /***
208 * Create a queue browser for this session. This allows clients to browse
209 * a queue without removing any messages.
210 * <p>
211 *
212 * You cannot create more than one queue browser for the same queue
213 * in a single session.
214 *
215 * @param queue the queue to browse
216 * @param clientId the client identity
217 * @param selector the message selector. This may be null
218 * @throws JMSException for any JMS error
219 */
220 void createBrowser(JmsQueue queue, long clientId, String selector)
221 throws JMSException;
222
223 /***
224 * Delete the receiver with the corresponding client id.
225 *
226 * @param clientId the identity of the receiver to delete
227 * @throws JMSException for any JMS error
228 */
229 void deleteReceiver(long clientId) throws JMSException;
230
231 /***
232 * Delete the queue browser associated with the corresponding client id.
233 *
234 * @param clientId the id of the browser
235 * @throws JMSException for any JMS error
236 */
237 void deleteBrowser(long clientId) throws JMSException;
238
239 /***
240 * Create a subscriber endpoint for this session. A subscriber is a message
241 * consumer specific to the topic message model. The subscriber is
242 * associated with a topic. The name is used to identify the consumer and
243 * can be set to null
244 * <p>
245 * You cannot create more than one subscriber for the same destination
246 *
247 * @param topic subscriber destination
248 * @param name name of the consumer associated with the subscriber.
249 * This may be null.
250 * @param clientId the session allocated identifier of this consumer
251 * @param selector message selector. This may be null.
252 * @param noLocal inhibit consuming messages on same connection.
253 * @throws JMSException for any JMS error
254 */
255 void createSubscriber(JmsTopic topic, String name, long clientId,
256 String selector, boolean noLocal)
257 throws JMSException;
258
259 /***
260 * Create a publisher endpoint for this session. A publisher is a message
261 * publisher specific to the topic message model. The publisher is
262 * associated with a topic.
263 * <p>
264 * You cannot create more than one publisher for the same destination
265 *
266 * @param topic receiver destination
267 * @throws JMSException for any JMS error
268 */
269 void createPublisher(JmsTopic topic) throws JMSException;
270
271 /***
272 * Delete the subscriber associated with the sepcified identity.
273 *
274 * @param clientid the client identity
275 * @throws JMSException for any JMS error
276 */
277 void deleteSubscriber(long clientId) throws JMSException;
278
279 /***
280 * Unsubscribe a durable subscription
281 *
282 * @param name the name used to identify the subscription
283 * @throws JMSException for any JMS error
284 */
285 void unsubscribe(String name) throws JMSException;
286
287 /***
288 * Stop message delivery to this session
289 *
290 * @throws JMSException for any JMS error
291 */
292 void stopMessageDelivery() throws JMSException;
293
294 /***
295 * Start message delivery to this session
296 *
297 * @throws JMSException for any JMS error
298 */
299 void startMessageDelivery() throws JMSException;
300
301 /***
302 * Set the listener for this session. The listener is an object that
303 * implements MessageListener and is called back whenever a message
304 * for the session is present
305 *
306 * @param listener the message listener
307 */
308 void setMessageListener(JmsMessageListener listener);
309
310 /***
311 * Enable or disable asynchronous message delivery for a particular
312 * consumer
313 *
314 * @param clientId the id of the client to check
315 * @param id the message id of the last delivered message
316 * @param enable true to enable; false to disable
317 * @throws JMSException for any JMS error
318 */
319 void enableAsynchronousDelivery(long clientId, String id, boolean enable)
320 throws JMSException;
321
322 /***
323 * Recover the session. This means all unacknowledged messages are
324 * resent with the redelivery flag set
325 *
326 * @throws JMSException if the session cannot be recovered
327 */
328 void recover() throws JMSException;
329
330 /***
331 * Commit the session which will send all the published messages and
332 * acknowledge all received messages
333 *
334 * @throws JMSException if the session cannot be committed
335 */
336 void commit() throws JMSException;
337
338 /***
339 * Rollback the session, which will not acknowledge any of the sent
340 * messages
341 *
342 * @throws JMSException if the session cannot be rolled back
343 */
344 void rollback() throws JMSException;
345
346 /***
347 * Commits an XA transaction that is in progress.
348 *
349 * @param xid the xa transaction identity
350 * @param onePhase true if it is a one phase commit
351 * @throws XAException if there is a problem completing the call
352 */
353 void commit(Xid xid, boolean onePhase) throws XAException;
354
355 /***
356 * Ends the work performed on behalf of a transaction branch. The resource
357 * manager disassociates the XA resource from the transaction branch
358 * specified and let the transaction be completedCommits an XA transaction
359 * that is in progress.
360 *
361 * @param xid the xa transaction identity
362 * @param flags one of TMSUCCESS, TMFAIL, or TMSUSPEND
363 * @throws XAException if there is a problem completing the call
364 */
365 void end(Xid xid, int flags) throws XAException;
366
367 /***
368 * Tell the resource manager to forget about a heuristically completed
369 * transaction branch.
370 *
371 * @param xid the xa transaction identity
372 * @throws XAException if there is a problem completing the call
373 */
374 void forget(Xid xid) throws XAException;
375
376 /***
377 * Return the transaction timeout for this instance of the resource
378 * manager.
379 *
380 * @return the timeout in seconds
381 * @throws XAException if there is a problem completing the call
382 */
383 int getTransactionTimeout() throws XAException;
384
385 /***
386 * Ask the resource manager to prepare for a transaction commit of the
387 *transaction specified in xid
388 *
389 * @param xid the xa transaction identity
390 * @return XA_RDONLY or XA_OK
391 * @throws XAException if there is a problem completing the call
392 */
393 int prepare(Xid xid) throws XAException;
394
395 /***
396 * Obtain a list of prepared transaction branches from a resource manager.
397 * The transaction manager calls this method during recovery to obtain the
398 * list of transaction branches that are currently in prepared or
399 * heuristically completed states.
400 *
401 * @param flag One of TMSTARTRSCAN, TMENDRSCAN, TMNOFLAGS. TMNOFLAGS
402 * @return the set of Xids to recover
403 * @throws XAException - if there is a problem completing the call
404 */
405 Xid[] recover(int flag) throws XAException;
406
407 /***
408 * Inform the resource manager to roll back work done on behalf of a
409 * transaction branch
410 *
411 * @param xid the xa transaction identity
412 * @throws XAException if there is a problem completing the call
413 */
414 void rollback(Xid xid) throws XAException;
415
416 /***
417 * Set the current transaction timeout value for this XAResource instance.
418 *
419 * @param seconds timeout in seconds
420 * @return if the new transaction timeout was accepted
421 * @throws XAException if there is a problem completing the call
422 */
423 boolean setTransactionTimeout(int seconds) throws XAException;
424
425 /***
426 * Start work on behalf of a transaction branch specified in xid If TMJOIN
427 * is specified, the start is for joining a transaction previously seen by
428 * the resource manager
429 *
430 * @param xid the xa transaction identity
431 * @param flags One of TMNOFLAGS, TMJOIN, or TMRESUME
432 * @throws XAException if there is a problem completing the call
433 */
434 void start(Xid xid, int flags) throws XAException;
435
436 /***
437 * Return the identity of the associated resource manager.
438 *
439 * @return the identity of the resource manager
440 * @throws XAException if there is a problem completing the call
441 */
442 String getResourceManagerId() throws XAException;
443 }
This page was automatically generated by Maven