[ 
https://issues.apache.org/activemq/browse/AMQCPP-218?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=48396#action_48396
 ] 

Timothy Bish commented on AMQCPP-218:
-------------------------------------

This is due to C++ yuck and not being able to determine the right base class to 
cast too. 

The fix for this would force an API change in CMS and in the exception classes 
in ActiveMQ-CPP and in the Decaf library so it can't be done until a later 
release of ActiveMQ-CPP such as 2.3

> CMSException is not getting caught by base class std::exception.
> ----------------------------------------------------------------
>
>                 Key: AMQCPP-218
>                 URL: https://issues.apache.org/activemq/browse/AMQCPP-218
>             Project: ActiveMQ C++ Client
>          Issue Type: Bug
>    Affects Versions: 2.2.1, 2.2.2
>         Environment: Windows XP, fuse-message-broker-5.2.0.1
>            Reporter: Ashok Panchal
>            Assignee: Timothy Bish
>
> I am upgrading CPP libary 2.1.1 to AMQCPP 2.2.2, and using 
> fuse-message-broker-5.2.0.1. 
> My application is in C++ so it uses std::exception handler as generic. But 
> with AMQCPP 2.2.2 and 2.2.1, these handlers are not getting called though 
> cms:CMSException handlers get called. 
> I tested it using test application in AMQCPP library 
> <vs2005-activemq-example>. Here is consumer's run method from example. Put 
> your broker down, so you will get exception at CreateConnection(). 
> Ex: 
>  virtual void run() { 
>         try { 
>             // Create a ConnectionFactory 
>             auto_ptr<ConnectionFactory> connectionFactory( 
>                 ConnectionFactory::createCMSConnectionFactory( brokerURI ) ); 
>             // Create a Connection 
>             connection = connectionFactory->createConnection(); 
>             connection->start(); 
>             connection->setExceptionListener(this); 
>             // Create a Session 
>             if( this->sessionTransacted == true ) { 
>                 session = connection->createSession( 
> Session::SESSION_TRANSACTED ); 
>             } else { 
>                 session = connection->createSession( 
> Session::AUTO_ACKNOWLEDGE ); 
>             } 
>             // Create the destination (Topic or Queue) 
>             if( useTopic ) { 
>                 destination = session->createTopic( "TEST.FOO" ); 
>             } else { 
>                 destination = session->createQueue( "TEST.FOO" ); 
>             } 
>             // Create a MessageConsumer from the Session to the Topic or 
> Queue 
>             consumer = session->createConsumer( destination ); 
>             consumer->setMessageListener( this ); 
>             std::cout.flush(); 
>             std::cerr.flush(); 
>             // Indicate we are ready for messages. 
>             latch.countDown(); 
>             // Wait while asynchronous messages come in. 
>             doneLatch.await( waitMillis ); 
>                 } catch (std::exception& e) {
>                       //e.printStackTrace(); 
>                         printf(e.what()); 
>                         printf( "Std Exception at Consumer:"); 
>                 }catch(cms::CMSException& e) {
>             // Indicate we are ready for messages. 
>             latch.countDown(); 
>           printf("cms Exception occurred. Consumer.\n"); 
>             e.printStackTrace(); 
>                 } 
>     } 
> I am getting warning for this as expected in build: 
> warning C4286: 'cms::CMSException &' : is caught by base class 
> ('std::exception &') on line 127 
> But the std::exception handler is not getting called though CMSException 
> handler excuted. As a base class  I believe that std:exception should get 
> called. This is working fine using 2.1.1 library, but not 2.2.1/2.2.2. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to