org.apache.activemq.transport.Transport Maven / Gradle / Ivy
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.transport;
import java.io.IOException;
import java.net.URI;
import java.security.cert.X509Certificate;
import org.apache.activemq.Service;
import org.apache.activemq.wireformat.WireFormat;
/**
* Represents the client side of a transport allowing messages to be sent
* synchronously, asynchronously and consumed.
*/
public interface Transport extends Service {
/**
* A one way asynchronous send
*
* @param command
* @throws IOException
*/
void oneway(Object command) throws IOException;
/**
* An asynchronous request response where the Receipt will be returned in
* the future. If responseCallback is not null, then it will be called when
* the response has been completed.
*
* @param command
* @param responseCallback TODO
* @return the FutureResponse
* @throws IOException
*/
FutureResponse asyncRequest(Object command, ResponseCallback responseCallback) throws IOException;
/**
* A synchronous request response
*
* @param command
* @return the response
* @throws IOException
*/
Object request(Object command) throws IOException;
/**
* A synchronous request response
*
* @param command
* @param timeout
* @return the repsonse or null if timeout
* @throws IOException
*/
Object request(Object command, int timeout) throws IOException;
/**
* Returns the current transport listener
*
* @return
*/
TransportListener getTransportListener();
/**
* Registers an inbound command listener
*
* @param commandListener
*/
void setTransportListener(TransportListener commandListener);
/**
* @param target
* @return the target
*/
T narrow(Class target);
/**
* @return the remote address for this connection
*/
String getRemoteAddress();
/**
* Indicates if the transport can handle faults
*
* @return true if fault tolerant
*/
boolean isFaultTolerant();
/**
* @return true if the transport is disposed
*/
boolean isDisposed();
/**
* @return true if the transport is connected
*/
boolean isConnected();
/**
* @return true if reconnect is supported
*/
boolean isReconnectSupported();
/**
* @return true if updating uris is supported
*/
boolean isUpdateURIsSupported();
/**
* reconnect to another location
* @param uri
* @throws IOException on failure of if not supported
*/
void reconnect(URI uri) throws IOException;
/**
* Provide a list of available alternative locations
* @param rebalance
* @param uris
* @throws IOException
*/
void updateURIs(boolean rebalance,URI[] uris) throws IOException;
/**
* Returns a counter which gets incremented as data is read from the transport.
* It should only be used to determine if there is progress being made in reading the next command from the transport.
* The value may wrap into the negative numbers.
*
* @return a counter which gets incremented as data is read from the transport.
*/
int getReceiveCounter();
/**
* @return the Certificates provided by the peer, or null if not a secure channel.
*/
X509Certificate[] getPeerCertificates();
/**
* Sets the certificates provided by the connected peer.
*
* @param certificates
* the Certificates provided by the peer.
*/
void setPeerCertificates(X509Certificate[] certificates);
/**
* Retrieves the WireFormat instance associated with this Transport instance.
*
* @return the WireFormat in use.
*/
WireFormat getWireFormat();
}