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
19 package org.codehaus.activemq.transport;
20
21 import org.codehaus.activemq.message.Packet;
22 import org.codehaus.activemq.message.PacketListener;
23 import org.codehaus.activemq.message.Receipt;
24 import org.codehaus.activemq.service.Service;
25
26 import javax.jms.ExceptionListener;
27 import javax.jms.JMSException;
28
29 /***
30 * A TransportChannel is used for tranporting packets between nodes
31 * e.g. a ActiveMQ JMS Connection and Broker.
32 * The TransportChannel supports synchronous and asynchronous send operations
33 * as well as sync or async reading of packets. A TransportChannel implementation
34 * could use a dedicated thread using blocking IO to read from a socket or
35 * could use NIO or poll some file system or database etc.
36 * On receipt of a Packet the TransportChannel should invoke the PacketListener
37 *
38 * @version $Revision: 1.9 $
39 */
40 public interface TransportChannel extends Service {
41
42 /***
43 * close the channel
44 */
45 public void stop();
46
47
48 /***
49 * start listeneing for events
50 *
51 * @throws JMSException if an error occurs
52 */
53 public void start() throws JMSException;
54
55 /***
56 * synchronously send a Packet
57 *
58 * @param packet
59 * @return a Receipt
60 * @throws JMSException
61 */
62
63 public Receipt send(Packet packet) throws JMSException;
64
65 /***
66 * Synchrnously send a Packet
67 *
68 * @param packet packet to send
69 * @param timeout amount of time to wait for a receipt
70 * @return the Receipt
71 * @throws JMSException
72 */
73
74 public Receipt send(Packet packet, int timeout) throws JMSException;
75
76 /***
77 * Asynchronously send a Packet
78 *
79 * @param packet
80 * @throws JMSException
81 */
82
83 public void asyncSend(Packet packet) throws JMSException;
84
85 /***
86 * Set a listener for Packets
87 *
88 * @param l
89 */
90 public void setPacketListener(PacketListener l);
91
92
93 /***
94 * Set an exception listener to listen for asynchronously generated exceptions
95 *
96 * @param listener
97 */
98 public void setExceptionListener(ExceptionListener listener);
99
100 /***
101 * @return true if this transport is multicast based (i.e. broadcasts to multiple nodes)
102 */
103 public boolean isMulticast();
104
105 /***
106 * Add a listener for changes in a channels status
107 *
108 * @param listener
109 */
110 public void addTransportStatusEventListener(TransportStatusEventListener listener);
111
112 /***
113 * Remove a listener for changes in a channels status
114 *
115 * @param listener
116 */
117 public void removeTransportStatusEventListener(TransportStatusEventListener listener);
118
119 /***
120 * Provides a way to specify the client ID that this channel is using
121 *
122 * @param clientID
123 */
124 public void setClientID(String clientID);
125
126 /***
127 * Returns the client ID that this channel is being used for
128 */
129 public String getClientID();
130
131 /***
132 * A listener to be notified when the channel is removed
133 *
134 * @param listener
135 */
136 public void setTransportChannelListener(TransportChannelListener listener);
137 }