[ 
https://issues.apache.org/activemq/browse/AMQCPP-314?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Barbara Dawkins updated AMQCPP-314:
-----------------------------------


I traced through the creation of the ConnectionID.  When apr_gethostname calls 
gethostname,  some sort of exception occurs that
throws the trace back to ActiveMQConnection::ActiveMQConnection.  I attempted 
to do generic catches,  but was unable to stop the
exit back to the "Pointer<ConnectionConfig> configuration( new ConnectionConfig 
);" line.  


>       libapr-1D.dll!apr_gethostname(char * buf=0x0214e650, int 
> len=0x00000101, apr_pool_t * cont=0x01aa2328)  Line 262        C
        activemq-cppud.dll!decaf::net::InetAddress::getLocalHost()  Line 154 + 
0x2a bytes       C++
        
activemq-cppud.dll!activemq::util::IdGenerator::StaticData::StaticData()  Line 
42 + 0xc bytes   C++
        activemq-cppud.dll!activemq::util::IdGenerator::getClassStaticData()  
Line 163 + 0x2a bytes     C++
        activemq-cppud.dll!activemq::util::IdGenerator::generateId()  Line 89 + 
0x5 bytes       C++
        activemq-cppud.dll!activemq::core::ConnectionConfig::ConnectionConfig() 
 Line 145 + 0x1c bytes  C++
        
activemq-cppud.dll!activemq::core::ActiveMQConnection::ActiveMQConnection(const 

Since I don't know what error winsock2's gethostname is generating, 
I was able to get things working here by making this change to 
IdGenerator::StaticData::StaticData():

////////////////////////////////////////////////////////////////////////////////
IdGenerator::StaticData::StaticData() : UNIQUE_STUB(), instanceCount(0), 
hostname() {

  TCHAR chrComputerName[MAX_COMPUTERNAME_LENGTH + 1];
  DWORD dwBufferSize = MAX_COMPUTERNAME_LENGTH + 1;  
  std::string stub = "";
  
#ifdef _WINDOWS_
  if(GetComputerName(chrComputerName,&dwBufferSize)) 
  {  
          // We got the name, set the return value.  
          hostname = chrComputerName;  
  } else 
  {  
          hostname = UUID::randomUUID().toString(); 
  }  
    stub = "-1-" + Long::toString( System::currentTimeMillis() ) + "-";
#else

    try {
        hostname = InetAddress::getLocalHost().getHostName();
        ServerSocket ss( 0 );
        stub = "-" + Long::toString( ss.getLocalPort() ) + "-" +
                     Long::toString( System::currentTimeMillis() ) + "-";
        Thread::sleep( 100 );
        ss.close();
    } catch( Exception& ioe ) {
        hostname = "localhost";
        stub = "-1-" + Long::toString( System::currentTimeMillis() ) + "-";
    }
#endif

    UNIQUE_STUB = stub;
}

P. S.  Looking forward to your suggestions for permanent fix :-).



> Starting app with Com using cms destroys connection of other app. New problem 
> with recent lib version
> -----------------------------------------------------------------------------------------------------
>
>                 Key: AMQCPP-314
>                 URL: https://issues.apache.org/activemq/browse/AMQCPP-314
>             Project: ActiveMQ C++ Client
>          Issue Type: Bug
>          Components: CMS Impl
>    Affects Versions: 3.2.2
>         Environment: Windows XP, SP 3, ActiveMQ apache-activemq-5.3.1 and/or 
> apache-activemq-5.4.0. CMS library 3.2.2
>            Reporter: Barbara Dawkins
>            Assignee: Timothy Bish
>            Priority: Critical
>         Attachments: ActiveMQLog_CatcherStart.txt, 
> ActiveMQLog_PitcherStart.txt, ActiveMQLog_SimpleSenderStart.txt, 
> CatcherPitcherTest2.zip
>
>
> We ran into a problem after we upgraded the CMS library from revison 3.1.3 to 
> revision 3.2.2.  We have two applications. When we start up the second 
> application, and try to send a message to the activemq broker, it seems to 
> wipe out the existing connection that the first application has. This is a 
> new problem. We have not seen this with the earlier version of CMS.
> Here are more details about our applications.
> Both applications are using a COM component that we have created as a thin 
> wrapper around CMS.
> Application 1: 
>  The "Catcher" application creates listeners and waits for messages to arrive 
> on two "request" topics.  When it receives messages, it sends out responses 
> on the appropriate "response" topic.  This app is intended as a local, 
> dumbed-down similator of a remote server.  The Catcher app uses only the COM 
> wrapper of CMS.  When the catcher is started, you can see it's listeners on 
> the "Topics" page.
> Application 2:
> The "SimpleSender" app uses an Additional COM object that loads the CMS 
> wrapper.  SimpleSender creates listers on the "response" topics and sends 
> messages on the "request" topics.    When SimpleSender starts,  it loads it's 
> configuration, creates a listener on the response topic, and sends 1 message. 
>  If you look at the topics page (http://localhost:8161/admin/topics.jsp) 
> before the message is sent,  the Catcher listeners are undisturbed.  After it 
> sends a message,  the listeners are destroyed.
> Application 3:
> A simple message sender that only uses the COM wrapper.  It does not destroy 
> Catcher's connections,  and can be used to test whether Catcher can receive 
> messages.
> I will send an attachment containing the test programs.
>  

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