Hi Nathan-

Requesting to reopen the issue given at
https://issues.apache.org/activemq/browse/AMQCPP-64

I had already tried the solution you have provided ... it throws a
StompException ....
It is some kind of a inconsistency between how activemq uses stomp ...

http://www.nabble.com/file/6142/StompExceptionWithToStringMethod.jpg 

I appreciate all the help ... 

Thank you

Lalit Nagpal
CSA, SunGard



Lalit Nagpal wrote:
> 
> created JIRA issue at
> https://issues.apache.org/activemq/browse/AMQCPP-64
> 
> attched = source code to reproduce and the image file for output.
> 
> Any rough timelines when we can expect a solution for this.
> 
> Thanks
> 
> Lalit Nagpal
> CSA, SunGard
> 
> 
> 
> nmittler wrote:
>> 
>> Yep, something is definitely not right.  Please create a JIRA issue here
>> http://issues.apache.org/activemq/browse/AMQCPP
>> 
>> ... be sure to attach the code and your output image.
>> 
>> Thanks!
>> Nate
>> 
>> On 1/30/07, Lalit Nagpal <[EMAIL PROTECTED]> wrote:
>>>
>>>
>>> Copy pasting the entire sample main code to reproduce my issue
>>>
>>> #include "stdafx.h"
>>> #include <activemq/concurrent/Thread.h>
>>> #include <activemq/concurrent/Runnable.h>
>>> #include <activemq/core/ActiveMQConnectionFactory.h>
>>> #include <cms/Connection.h>
>>> #include <cms/Session.h>
>>> #include <cms/TextMessage.h>
>>> #include <cms/ExceptionListener.h>
>>> #include <cms/MessageListener.h>
>>> #include <stdlib.h>
>>> #include <stdio.h>
>>>
>>> using namespace activemq::core;
>>> using namespace activemq::concurrent;
>>> using namespace cms;
>>> using namespace std;
>>>
>>> bool GenerateGuid(char* buf, size_t strsz)
>>> {
>>>         GUID a_guid;
>>>
>>>         UuidCreate(&a_guid);
>>>
>>>         if (strsz > 38)
>>>         {
>>>                 sprintf(buf,
>>>
>>>                                
>>> "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
>>>                                 a_guid.Data1, a_guid.Data2,
>>> a_guid.Data3,
>>>                                 a_guid.Data4[0], a_guid.Data4[1],
>>>                                 a_guid.Data4[2], a_guid.Data4[3],
>>>                                 a_guid.Data4[4], a_guid.Data4[5],
>>>                                 a_guid.Data4[6], a_guid.Data4[7]
>>>                                 );
>>>                 return true;
>>>         }
>>>         return false;
>>> };
>>>
>>> class HelloWorldProducer : public Runnable, public MessageListener {
>>> private:
>>>
>>>         Connection* connection;
>>>         Session* session;
>>>         Destination* destination;
>>>         MessageProducer* producer;
>>>         MessageConsumer* consumer;
>>>         int numMessages;
>>>
>>> public:
>>>
>>>         HelloWorldProducer( int numMessages ){
>>>                 connection = NULL;
>>>         session = NULL;
>>>         destination = NULL;
>>>         producer = NULL;
>>>         this->numMessages = numMessages;
>>>         }
>>>
>>>     virtual void onMessage( const Message* message ){
>>>
>>>         try
>>>         {
>>>             const TextMessage* textMessage = dynamic_cast< const
>>> TextMessage*
>>> >( message );
>>>             string text = textMessage->getText();
>>>             printf( "Producer Received: %s\n", text.c_str() );
>>>         } catch (CMSException& e) {
>>>             e.printStackTrace();
>>>         }
>>>     }
>>>
>>>         virtual ~HelloWorldProducer(){
>>>                 cleanup();
>>>         }
>>>
>>>     virtual void run() {
>>>         try {
>>>             // Create a ConnectionFactory
>>>             ActiveMQConnectionFactory* connectionFactory = new
>>> ActiveMQConnectionFactory("tcp://127.0.0.1:61617");
>>>
>>>             // Create a Connection
>>>             connection = connectionFactory->createConnection();
>>>             connection->start();
>>>
>>>             // Create a Session
>>>             session = connection->createSession(
>>> Session::AUTO_ACKNOWLEDGE
>>> );
>>>
>>>             // Create the destination (Topic or Queue)
>>>             destination = session->createTopic( "TEST.FOO" );
>>>
>>>             // Create a MessageProducer from the Session to the Topic or
>>> Queue
>>>                         cout << endl << "Producer has been registered at
>>> "
>>> <<
>>> destination->toString() << endl << endl;
>>>             producer = session->createProducer( destination );
>>>             producer->setDeliveryMode( DeliveryMode::NON_PERSISTANT );
>>>
>>>                         // Lets have a reply-back channel to this
>>> producer
>>> now
>>>                         char* charGuid = new char[40];
>>>                         GenerateGuid(charGuid, 39);
>>>                         cms::Topic* replyTopic =
>>> session->createTopic(charGuid);
>>>                         consumer = session->createConsumer( replyTopic
>>> );
>>>                         consumer->setMessageListener(this);
>>>                         cout << "Reply back channel has been registered
>>> at
>>> " <<
>>> replyTopic->toString() << endl << endl;
>>>
>>>             // Stringify the thread id
>>>             char threadIdStr[100];
>>>             _snprintf(threadIdStr, sizeof(threadIdStr), "%d",
>>> Thread::getId() );
>>>
>>>             // Create a messages
>>>             string text = (string)"Hello world! from thread " +
>>> threadIdStr;
>>>
>>>             for( int ix=0; ix<numMessages; ++ix ){
>>>                     TextMessage* message = session->createTextMessage(
>>> text );
>>>
>>>                                
>>> message->setCMSReplyTo(replyTopic->toProviderString());
>>>
>>>                 // Tell the producer to send the message
>>>                     printf( "Producer Sent message from thread %s\n",
>>> threadIdStr);
>>>                 producer->send( message );
>>>
>>>                 delete message;
>>>             }
>>>
>>>         }catch ( CMSException& e ) {
>>>             e.printStackTrace();
>>>         }
>>>     }
>>>
>>> private:
>>>
>>>     void cleanup(){
>>>
>>>                         // Destroy resources.
>>>                         try{
>>>                 if( destination != NULL ) delete destination;
>>>                         }catch ( CMSException& e ) {}
>>>                         destination = NULL;
>>>
>>>                         try{
>>>                     if( producer != NULL ) delete producer;
>>>                         }catch ( CMSException& e ) {}
>>>                         producer = NULL;
>>>
>>>                 // Close open resources.
>>>                 try{
>>>                         if( session != NULL ) session->close();
>>>                         if( connection != NULL ) connection->close();
>>>                         }catch ( CMSException& e ) {}
>>>
>>>                         try{
>>>                 if( session != NULL ) delete session;
>>>                         }catch ( CMSException& e ) {}
>>>                         session = NULL;
>>>
>>>             try{
>>>                 if( connection != NULL ) delete connection;
>>>                         }catch ( CMSException& e ) {}
>>>                 connection = NULL;
>>>     }
>>> };
>>>
>>> class HelloWorldConsumer : public ExceptionListener,
>>>                            public MessageListener,
>>>                            public Runnable {
>>>
>>> private:
>>>
>>>         Connection* connection;
>>>         Session* session;
>>>         Destination* destination;
>>>         MessageConsumer* consumer;
>>>         long waitMillis;
>>>
>>> public:
>>>
>>>         HelloWorldConsumer( long waitMillis ){
>>>                 connection = NULL;
>>>         session = NULL;
>>>         destination = NULL;
>>>         consumer = NULL;
>>>         this->waitMillis = waitMillis;
>>>         }
>>>     virtual ~HelloWorldConsumer(){
>>>         cleanup();
>>>     }
>>>
>>>     virtual void run() {
>>>
>>>         try {
>>>
>>>             // Create a ConnectionFactory
>>>             ActiveMQConnectionFactory* connectionFactory =
>>>                 new ActiveMQConnectionFactory( "tcp://127.0.0.1:61617"
>>> );
>>>
>>>             // Create a Connection
>>>             connection = connectionFactory->createConnection();
>>>             delete connectionFactory;
>>>             connection->start();
>>>
>>>             connection->setExceptionListener(this);
>>>
>>>             // Create a Session
>>>             session = connection->createSession(
>>> Session::AUTO_ACKNOWLEDGE
>>> );
>>>
>>>             // Create the destination (Topic or Queue)
>>>             destination = session->createTopic( "TEST.FOO" );
>>>
>>>             // Create a MessageConsumer from the Session to the Topic or
>>> Queue
>>>             consumer = session->createConsumer( destination );
>>>
>>>             consumer->setMessageListener( this );
>>>
>>>             // Sleep while asynchronous messages come in.
>>>             Thread::sleep( waitMillis );
>>>
>>>         } catch (CMSException& e) {
>>>             e.printStackTrace();
>>>         }
>>>     }
>>>
>>>     virtual void onMessage( const Message* message ){
>>>
>>>         try
>>>         {
>>>                         // display the message received
>>>             const TextMessage* textMessage = dynamic_cast< const
>>> TextMessage*
>>> >( message );
>>>             string text = textMessage->getText();
>>>             printf( "Consumer Received: %s\n", text.c_str() );
>>>
>>>                         // lets reply back with a thanks
>>>                         if (textMessage->getCMSReplyTo().c_str() &&
>>> strcmp("null",
>>> textMessage->getCMSReplyTo().c_str())==1 ) {
>>>                                 cms::Topic* destination_ =
>>> session->createTopic(
>>> textMessage->getCMSReplyTo().c_str() );
>>>                                 MessageProducer* producer =
>>> session->createProducer( destination_ );
>>>                                 producer->setDeliveryMode(
>>> DeliveryMode::NON_PERSISTANT );
>>>                                 cout << endl << "Consumer Replying back
>>> to
>>> " << destination_->toString()
>>> << endl;
>>>                                 TextMessage* message_ =
>>> session->createTextMessage( "Thank you for Hello
>>> World !!!" );
>>>                                 producer->send(message_);
>>>                         }
>>>
>>>         } catch (CMSException& e) {
>>>             e.printStackTrace();
>>>         }
>>>     }
>>>
>>>     virtual void onException( const CMSException& ex ) {
>>>         printf("JMS Exception occured.  Shutting down client.\n");
>>>     }
>>>
>>> private:
>>>
>>>     void cleanup(){
>>>
>>>                 // Destroy resources.
>>>                 try{
>>>                 if( destination != NULL ) delete destination;
>>>                 }catch (CMSException& e) {}
>>>                 destination = NULL;
>>>
>>>                 try{
>>>             if( consumer != NULL ) delete consumer;
>>>                 }catch (CMSException& e) {}
>>>                 consumer = NULL;
>>>
>>>                 // Close open resources.
>>>                 try{
>>>                         if( session != NULL ) session->close();
>>>                         if( connection != NULL ) connection->close();
>>>                 }catch (CMSException& e) {}
>>>
>>>         try{
>>>                 if( session != NULL ) delete session;
>>>                 }catch (CMSException& e) {}
>>>                 session = NULL;
>>>
>>>                 try{
>>>                 if( connection != NULL ) delete connection;
>>>                 }catch (CMSException& e) {}
>>>                 connection = NULL;
>>>     }
>>> };
>>>
>>> int _tmain(int argc, _TCHAR* argv[])
>>> {
>>>     HelloWorldProducer producer( 5 );
>>>         HelloWorldConsumer consumer( 1500 );
>>>
>>>         // Start the consumer thread.
>>>         Thread consumerThread( &consumer );
>>>         consumerThread.start();
>>>
>>>         // Start the producer thread.
>>>         Thread producerThread( &producer );
>>>         producerThread.start();
>>>
>>>         // Wait for the threads to complete.
>>>         producerThread.join();
>>>         consumerThread.join();
>>>
>>>         cout << endl << endl << endl;
>>>
>>>         return 0;
>>> }
>>>
>>>
>>>
>>>
>>>
>>>
>>> Lalit Nagpal wrote:
>>> >
>>> > Hi
>>> >
>>> > I am using the activemq-cpp cms api 1.0 release. The problem I am
>>> facing
>>> > is like this-
>>> > My producer sends a message to the consumer and a message should be
>>> sent
>>> > from the receiving end as a reply after this - consider a situation
>>> where
>>> > a loginRequest message has been sent and now a loginReply message
>>> should
>>> > be sent from the receiving end.
>>> >
>>> > Attached is a sample main that can reproduce the problem I am facing -
>>> I
>>> > have modified the sample helloproducer helloconsumer code available at
>>> > http://activemq.org/site/activemq-cpp-client.html
>>> > to reproduce my problem so that its easier for you to see.
>>> >
>>> >  http://www.nabble.com/file/6111/DestProbs.cpp DestProbs.cpp
>>> >
>>> > If you execute this piece of code you will see the output as in the
>>> > attached image file
>>> >
>>> >  http://www.nabble.com/file/6110/DestinationProblem.JPG
>>> >
>>> > This is what the code does
>>> > producer lets call it xxx sends a "Hello world! from thread xxxx" to
>>> the
>>> > consumer
>>> > consumer lets call it yyy receives the message and displays it
>>> > this is the normal behavior as given in the example on
>>> > http://activemq.org/site/activemq-cpp-client.html
>>> > Following extra needs to be done now
>>> > from yyy a reply should go back to xxx ... for this i registered a
>>> > producer at yyy by creating a topic using the message->getCMSReplyTo()
>>> and
>>> > then replying back to that destination.
>>> >
>>> > The mismatch can be easily see by doing a bstat .... when I created
>>> the
>>> > consumer yyy initially it created a topic by name say ABCDEFGH (which
>>> is
>>> a
>>> > random id) and later on when I used the message->getCMSReplyTo() to
>>> create
>>> > a topic the topic was registered with the name /topic/ABCDEFGH .....
>>> the
>>> > additional /topic/ that has got added is doing a mess up here and the
>>> > replies from yyy to xxx are not reaching xxx (getting enqueued and not
>>> > dequeued) ...
>>> >
>>> > the /topic/ gets added due to the following statement in
>>> > HelloWorldProducer - run method
>>> > message->setCMSReplyTo(replyTopic->toProviderString());
>>> > here the toProviderString method adds it actually ... if you replace
>>> this
>>> > method with just the toString() method ... you will get a stomp
>>> exception
>>> > saying that destinations should start with either /topic/ or /queue/
>>> >
>>> > Can somebody make this code work please.
>>> >
>>> > For every message sent by the producer to consumer "Hello world! from
>>> > thread xxxx" there should be a reply coming back as "Thank you for
>>> Hello
>>> > World !!!"
>>> >
>>> > Please help me urgently here.
>>> >
>>> > Thank you in advance
>>> >
>>> > Lalit Nagpal
>>> > CSA, SunGard
>>> >
>>> >
>>>
>>> --
>>> View this message in context:
>>> http://www.nabble.com/activemq-cms-stomp---creating-a-topic-from-message-%3EgetCMSReplyTo%28%29-does-not-work-tf3142309.html#a8709155
>>> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>>>
>>>
>> 
>> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/activemq-cms-stomp---creating-a-topic-from-message-%3EgetCMSReplyTo%28%29-does-not-work-tf3142309.html#a8743627
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to