activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Timothy Bish (JIRA)" <j...@apache.org>
Subject [jira] Commented: (AMQCPP-218) CMSException is not getting caught by base class std::exception.
Date Tue, 30 Dec 2008 21:02:05 GMT

    [ 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.


Mime
View raw message