blob: 0a9236cc9a57a005ddc3b933d1f26618230ad3b8 [file] [log] [blame]
* 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
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* See the License for the specific language governing permissions and
* limitations under the License.
#include <activemq/util/Config.h>
#include <activemq/transport/Transport.h>
#include <activemq/transport/DefaultTransportListener.h>
#include <decaf/net/URI.h>
#include <decaf/lang/Pointer.h>
#include <memory>
namespace activemq {
namespace transport {
namespace failover {
using decaf::lang::Pointer;
class BackupTransportPool;
class AMQCPP_API BackupTransport : public DefaultTransportListener {
// The parent of this Backup
BackupTransportPool* parent;
// The Transport this one is managing.
Pointer<Transport> transport;
// The URI of this Backup
decaf::net::URI uri;
// Indicates that the contained transport is not valid any longer.
bool closed;
// Is this Transport one of the priority backups.
bool priority;
BackupTransport(const BackupTransport&);
BackupTransport& operator=(const BackupTransport&);
BackupTransport(BackupTransportPool* failover);
virtual ~BackupTransport();
* Gets the URI assigned to this Backup
* @return the assigned URI
decaf::net::URI getUri() const {
return this->uri;
* Sets the URI assigned to this Transport.
void setUri(const decaf::net::URI& uri) {
this->uri = uri;
* Gets the currently held transport
* @return pointer to the held transport or NULL if not set.
const Pointer<Transport>& getTransport() {
return transport;
* Sets the held transport, if not NULL then start to listen for exceptions
* from the held transport.
* @param transport
* The transport to hold.
void setTransport(const Pointer<Transport> transport) {
this->transport = transport;
if (this->transport != NULL) {
* Event handler for an exception from a command transport.
* <p>
* The BackupTransport closes its internal Transport when an exception is
* received and returns the URI to the pool of URIs to attempt connections to.
* @param ex
* The exception that was passed to this listener to handle.
virtual void onException(const decaf::lang::Exception& ex);
* Has the Transport been shutdown and no longer usable.
* @return true if the Transport
bool isClosed() const {
return this->closed;
* Sets the closed flag on this Transport.
* @param value - true for closed.
void setClosed(bool value) {
this->closed = value;
* @return true if this transport was in the priority backup list.
bool isPriority() const {
return this->priority;
* Set if this transport is a Priority backup or not.
* @param value
* True if this is a priority backup.
void setPriority(bool value) {
this->priority = value;