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