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 }