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.14 $
39 */
40 public interface TransportChannel extends Service {
41
42
43 /***
44 * Give the TransportChannel a hint it's about to stop
45 * @param pendingStop
46 *
47 */
48 public void setPendingStop(boolean pendingStop);
49
50 /***
51 * @return true if the channel is about to stop
52 */
53 public boolean isPendingStop();
54 /***
55 * close the channel
56 */
57 public void stop();
58
59
60 /***
61 * start listeneing for events
62 *
63 * @throws JMSException if an error occurs
64 */
65 public void start() throws JMSException;
66
67 /***
68 * synchronously send a Packet
69 *
70 * @param packet
71 * @return a Receipt
72 * @throws JMSException
73 */
74
75 public Receipt send(Packet packet) throws JMSException;
76
77 /***
78 * Synchrnously send a Packet
79 *
80 * @param packet packet to send
81 * @param timeout amount of time to wait for a receipt
82 * @return the Receipt
83 * @throws JMSException
84 */
85
86 public Receipt send(Packet packet, int timeout) throws JMSException;
87
88 /***
89 * Asynchronously send a Packet
90 *
91 * @param packet
92 * @throws JMSException
93 */
94
95 public void asyncSend(Packet packet) throws JMSException;
96
97 /***
98 * Set a listener for Packets
99 *
100 * @param l
101 */
102 public void setPacketListener(PacketListener l);
103
104
105 /***
106 * Set an exception listener to listen for asynchronously generated exceptions
107 *
108 * @param listener
109 */
110 public void setExceptionListener(ExceptionListener listener);
111
112 /***
113 * @return true if this transport is multicast based (i.e. broadcasts to multiple nodes)
114 */
115 public boolean isMulticast();
116
117 /***
118 * Add a listener for changes in a channels status
119 *
120 * @param listener
121 */
122 public void addTransportStatusEventListener(TransportStatusEventListener listener);
123
124 /***
125 * Remove a listener for changes in a channels status
126 *
127 * @param listener
128 */
129 public void removeTransportStatusEventListener(TransportStatusEventListener listener);
130
131 /***
132 * Provides a way to specify the client ID that this channel is using
133 *
134 * @param clientID
135 */
136 public void setClientID(String clientID);
137
138 /***
139 * @return the client ID that this channel is being used for
140 */
141 public String getClientID();
142
143 /***
144 * A listener to be notified when the channel is removed
145 *
146 * @param listener
147 */
148 public void setTransportChannelListener(TransportChannelListener listener);
149
150 /***
151 * @return true if this transport is used by the broker to
152 * communicate with a client, or false if this is a client side
153 * transport
154 */
155 public boolean isServerSide();
156
157 /***
158 * set the server flag
159 * @param serverSide
160 */
161 public void setServerSide(boolean serverSide);
162
163 /***
164 * Can this wireformat process packets of this version
165 * @param version the version number to test
166 * @return true if can accept the version
167 */
168 public boolean canProcessWireFormatVersion(int version);
169
170 /***
171 * @return the current version of this wire format
172 */
173 public int getCurrentWireFormatVersion();
174
175 /***
176 * @return true if the transport channel is active,
177 * this value will be false through reconnecting
178 */
179 public boolean isTransportConnected();
180 }