You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2010/11/14 17:46:15 UTC
svn commit: r1035019 - in
/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core:
ActiveMQConnection.cpp ActiveMQConnection.h
Author: tabish
Date: Sun Nov 14 16:46:15 2010
New Revision: 1035019
URL: http://svn.apache.org/viewvc?rev=1035019&view=rev
Log:
Add a method to get the Resource Manager Id for the Connection, used in XA transactions.
Modified:
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.h
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp?rev=1035019&r1=1035018&r2=1035019&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp Sun Nov 14 16:46:15 2010
@@ -121,6 +121,7 @@ namespace core{
Pointer<commands::BrokerInfo> brokerInfo;
Pointer<commands::WireFormatInfo> brokerWireFormatInfo;
Pointer<CountDownLatch> transportInterruptionProcessingComplete;
+ Pointer<CountDownLatch> brokerInfoReceived;
Pointer<Exception> firstFailureError;
@@ -144,6 +145,7 @@ namespace core{
this->defaultRedeliveryPolicy.reset( new DefaultRedeliveryPolicy() );
this->clientIdGenerator.reset(new util::IdGenerator );
this->connectionInfo.reset( new ConnectionInfo() );
+ this->brokerInfoReceived.reset( new CountDownLatch(1) );
// Generate a connectionId
decaf::lang::Pointer<ConnectionId> connectionId( new ConnectionId() );
@@ -151,6 +153,9 @@ namespace core{
this->connectionInfo->setConnectionId( connectionId );
}
+ void waitForBrokerInfo() {
+ this->brokerInfoReceived->await();
+ }
};
// Static init.
@@ -663,6 +668,7 @@ void ActiveMQConnection::onCommand( cons
} else if( command->isBrokerInfo() ) {
this->config->brokerInfo =
command.dynamicCast<BrokerInfo>();
+ this->config->brokerInfoReceived->countDown();
} else if( command->isShutdownInfo() ) {
try {
@@ -714,6 +720,8 @@ void ActiveMQConnection::onException( co
this->config->firstFailureError.reset( ex.clone() );
}
+ this->config->brokerInfoReceived->countDown();
+
// TODO - Until this fires in another thread we can't dipose of
// the transport here since it could result in this method
// being called again recursively.
@@ -1168,3 +1176,17 @@ void ActiveMQConnection::setMessagePrior
decaf::lang::Exception* ActiveMQConnection::getFirstFailureError() const {
return this->config->firstFailureError.get();
}
+
+////////////////////////////////////////////////////////////////////////////////
+std::string ActiveMQConnection::getResourceManagerId() const {
+ try {
+ this->config->waitForBrokerInfo();
+
+ if( this->config->brokerInfo == NULL ) {
+ throw CMSException("Connection failed before Broker info was received.");
+ }
+
+ return this->config->brokerInfo->getBrokerId()->getValue();
+ }
+ AMQ_CATCH_ALL_THROW_CMSEXCEPTION()
+}
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.h?rev=1035019&r1=1035018&r2=1035019&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.h Sun Nov 14 16:46:15 2010
@@ -615,6 +615,14 @@ namespace core{
transport::Transport& getTransport() const;
/**
+ * Returns the Id of the Resource Manager that this client will use should
+ * it be entered into an XA Transaction.
+ *
+ * @returns a string containing the resource manager Id for XA Transactions.
+ */
+ std::string getResourceManagerId() const;
+
+ /**
* Clean up this connection object, reseting it back to a state that mirrors
* what a newly created ActiveMQConnection object has.
*/