001/** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.activemq.transport; 018 019import java.io.IOException; 020import java.net.URI; 021import org.apache.activemq.Service; 022 023/** 024 * Represents the client side of a transport allowing messages to be sent 025 * synchronously, asynchronously and consumed. 026 */ 027public interface Transport extends Service { 028 029 /** 030 * A one way asynchronous send 031 * 032 * @param command 033 * @throws IOException 034 */ 035 void oneway(Object command) throws IOException; 036 037 /** 038 * An asynchronous request response where the Receipt will be returned in 039 * the future. If responseCallback is not null, then it will be called when 040 * the response has been completed. 041 * 042 * @param command 043 * @param responseCallback TODO 044 * @return the FutureResponse 045 * @throws IOException 046 */ 047 FutureResponse asyncRequest(Object command, ResponseCallback responseCallback) throws IOException; 048 049 /** 050 * A synchronous request response 051 * 052 * @param command 053 * @return the response 054 * @throws IOException 055 */ 056 Object request(Object command) throws IOException; 057 058 /** 059 * A synchronous request response 060 * 061 * @param command 062 * @param timeout 063 * @return the repsonse or null if timeout 064 * @throws IOException 065 */ 066 Object request(Object command, int timeout) throws IOException; 067 068 /** 069 * Returns the current transport listener 070 * 071 * @return 072 */ 073 TransportListener getTransportListener(); 074 075 /** 076 * Registers an inbound command listener 077 * 078 * @param commandListener 079 */ 080 void setTransportListener(TransportListener commandListener); 081 082 /** 083 * @param target 084 * @return the target 085 */ 086 <T> T narrow(Class<T> target); 087 088 /** 089 * @return the remote address for this connection 090 */ 091 String getRemoteAddress(); 092 093 /** 094 * Indicates if the transport can handle faults 095 * 096 * @return true if fault tolerant 097 */ 098 boolean isFaultTolerant(); 099 100 /** 101 * @return true if the transport is disposed 102 */ 103 boolean isDisposed(); 104 105 /** 106 * @return true if the transport is connected 107 */ 108 boolean isConnected(); 109 110 /** 111 * @return true if reconnect is supported 112 */ 113 boolean isReconnectSupported(); 114 115 /** 116 * @return true if updating uris is supported 117 */ 118 boolean isUpdateURIsSupported(); 119 /** 120 * reconnect to another location 121 * @param uri 122 * @throws IOException on failure of if not supported 123 */ 124 void reconnect(URI uri) throws IOException; 125 126 /** 127 * Provide a list of available alternative locations 128 * @param rebalance 129 * @param uris 130 * @throws IOException 131 */ 132 void updateURIs(boolean rebalance,URI[] uris) throws IOException; 133 134 /** 135 * Returns a counter which gets incremented as data is read from the transport. 136 * It should only be used to determine if there is progress being made in reading the next command from the transport. 137 * The value may wrap into the negative numbers. 138 * 139 * @return a counter which gets incremented as data is read from the transport. 140 */ 141 int getReceiveCounter(); 142}