You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by nm...@apache.org on 2007/03/13 14:29:47 UTC
svn commit: r517692 - in
/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq:
connector/openwire/OpenWireConnector.cpp
connector/stomp/StompProducerInfo.h core/ActiveMQProducer.cpp
core/ActiveMQSession.cpp
Author: nmittler
Date: Tue Mar 13 06:29:46 2007
New Revision: 517692
URL: http://svn.apache.org/viewvc?view=rev&rev=517692
Log:
AMQCPP-79 - adding support for producers with null destinations
Modified:
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/OpenWireConnector.cpp
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompProducerInfo.h
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQProducer.cpp
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQSession.cpp
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/OpenWireConnector.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/OpenWireConnector.cpp?view=diff&rev=517692&r1=517691&r2=517692
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/OpenWireConnector.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/OpenWireConnector.cpp Tue Mar 13 06:29:46 2007
@@ -687,22 +687,27 @@
producerId->setSessionId( session->getSessionId() );
producerId->setValue( getNextProducerId() );
- // Cast the destination to an OpenWire destination, so we can
- // get all the goodies.
- const commands::ActiveMQDestination* amqDestination =
- dynamic_cast<const commands::ActiveMQDestination*>(destination);
- if( amqDestination == NULL ) {
- throw ConnectorException( __FILE__, __LINE__,
- "Destination was either NULL or not created by this OpenWireConnector" );
+ // Producers are allowed to have NULL destinations. In this case, the
+ // destination is specified by the messages as they are sent.
+ if( destination != NULL ) {
+
+ // Cast the destination to an OpenWire destination, so we can
+ // get all the goodies.
+ const commands::ActiveMQDestination* amqDestination =
+ dynamic_cast<const commands::ActiveMQDestination*>(destination);
+ if( amqDestination == NULL ) {
+ throw ConnectorException( __FILE__, __LINE__,
+ "Destination was not created by this OpenWireConnector" );
+ }
+
+ // Get any options specified in the destination and apply them to the
+ // ProducerInfo object.
+ producerInfo->setDestination( dynamic_cast<commands::ActiveMQDestination*>(
+ amqDestination->cloneDataStructure()) );
+ const Properties& options = amqDestination->getOptions();
+ producerInfo->setDispatchAsync( Boolean::parseBoolean(
+ options.getProperty( "producer.dispatchAsync", "false" )) );
}
-
- // Get any options specified in the destination and apply them to the
- // ProducerInfo object.
- producerInfo->setDestination( dynamic_cast<commands::ActiveMQDestination*>(
- amqDestination->cloneDataStructure()) );
- const Properties& options = amqDestination->getOptions();
- producerInfo->setDispatchAsync( Boolean::parseBoolean(
- options.getProperty( "producer.dispatchAsync", "false" )) );
// Send the message to the broker.
Response* response = syncRequest(producerInfo);
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompProducerInfo.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompProducerInfo.h?view=diff&rev=517692&r1=517691&r2=517692
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompProducerInfo.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompProducerInfo.h Tue Mar 13 06:29:46 2007
@@ -65,7 +65,14 @@
* @param destination reference to a destination, copied internally
*/
virtual void setDestination( const cms::Destination* destination ) {
- this->destination = destination->clone();
+
+ // Delete the previous destination if it exists.
+ delete this->destination;
+ this->destination = NULL;
+
+ if( destination != NULL ) {
+ this->destination = destination->clone();
+ }
}
/**
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQProducer.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQProducer.cpp?view=diff&rev=517692&r1=517691&r2=517692
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQProducer.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQProducer.cpp Tue Mar 13 06:29:46 2007
@@ -154,6 +154,13 @@
__FILE__, __LINE__,
"ActiveMQProducer::send - This Producer is closed" );
}
+
+ if( destination == NULL ) {
+
+ throw InvalidStateException(
+ __FILE__, __LINE__,
+ "ActiveMQProducer::send - Attempting to send on NULL destination");
+ }
// configure the message
message->setCMSDestination( destination );
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQSession.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQSession.cpp?view=diff&rev=517692&r1=517691&r2=517692
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQSession.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQSession.cpp Tue Mar 13 06:29:46 2007
@@ -265,7 +265,7 @@
{
throw InvalidStateException(
__FILE__, __LINE__,
- "ActiveMQSession::createProducer - Session Already Closed" );
+ "ActiveMQSession::createDurableConsumer - Session Already Closed" );
}
// Create the consumer instance.