The connectionId and clientId seem to be the same. And they don't match what I'm getting from my delivered JMS message. Code and output as follows:
if (activeMQMessage.getDataStructure() instanceof ConnectionInfo) { ConnectionInfo connectionInfo = (ConnectionInfo) activeMQMessage.getDataStructure(); logger.info("received connection notice " + connectionInfo.getConnectionId()); logger.info("received connection notice clientid" + connectionInfo.getClientId()); logger.info("received clientid" + activeMQMessage.getConnection().getClientID()); logger.info("received initialized clientid" + activeMQMessage.getConnection().getInitializedClientID()); } 2006-09-04 08:42:19,700 INFO [Thread-28] ConnectionMonitor.info - received connection notice ID:server-corp-1768-1157384519543-15:0 2006-09-04 08:42:19,700 INFO [Thread-28] ConnectionMonitor.info - received connection notice clientidID:server-corp-1768-1157384519543-15:0 2006-09-04 08:42:19,700 INFO [Thread-28] ConnectionMonitor.info - received clientidID:server-corp-1768-1157384519543-14:0 2006-09-04 08:42:19,700 INFO [Thread-28] ConnectionMonitor.info - received initialized clientidID:server-corp-1768-1157384519543-14:0 And on the message receive side: logger.error ("connection id is " + activeMQMessage.getConnection().getConnectionInfo().getConnectionId()); //ConnectionInfo connectionInfo = (ConnectionInfo) activeMQMessage.getDataStructure(); //logger.error ("(hopefully)client id is " + connectionInfo.getClientId()); try { logger.error ("client id is " + activeMQMessage.getConnection().getClientID()); } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } 2006-09-04 08:42:21,404 ERROR [Thread-29] RequestReplyController.onMessage - connection id is ID:server-corp-1768-1157384519543-5:4 2006-09-04 08:42:21,404 ERROR [Thread-29] RequestReplyController.onMessage - client id is ID:server-corp-1768-1157384519543-10:0 James.Strachan wrote: > > I think the issue is how you are unpacking the advisory. Its a little > non-intuitive, but to unpack the details of the advisory (as apposed > to looking at the current client's connection) try > > command = activemqMessage.getDataStructure(); > > then cast it to a RemoveInfo for a removal of a > connection/producer/consumer and you should be able to extract the > actual client ID from that. > > e.g. see the onMessage() method on ConsumerEventSource for a hint at > how to do it. > > We could create a > ConnectionEvent/ConnectionListener/ConnectionEventSource in a similar > way to the Producer/Consumer helper classes in the advisory package to > hide some of the lower level details of the implementation of > advisories and openwire). > > On 9/4/06, jlittman <[EMAIL PROTECTED]> wrote: >> >> Thanks James, but it still doesn't seem to line up. I tried clients from >> java >> and from stomp, with similar results. >> Adding the code to my connection monitor object: >> >> try { >> logger.info("received connection notice clientid" >> + activeMQMessage.getConnection().getClientID()); >> } catch (JMSException e) { >> // TODO Auto-generated catch block >> e.printStackTrace(); >> } >> >> produces: >> >> 2006-09-04 07:22:05,328 INFO [Thread-40] server.ConnectionMonitor.info - >> received connection notice clientidID:server-corp-1092-1157379254703-10:0 >> >> and adding code to my onMessage handler: >> >> try { >> logger.error ("client id is " + >> activeMQMessage.getConnection().getClientID()); >> } catch (JMSException e) { >> // TODO Auto-generated catch block >> e.printStackTrace(); >> } >> >> >> 2006-09-04 07:22:06,578 ERROR [Thread-41] >> RequestReplyController.onMessage - >> client id is ID:server-corp-1092-1157379254703-13:0 >> >> >> >> James.Strachan wrote: >> > >> > Try use the clientID of the JMS Connection. >> > >> > Connection.getClientId() >> > >> > >> http://java.sun.com/j2ee/1.4/docs/api/javax/jms/Connection.html#getClientID() >> > >> > to correlate between advisories and a specific JMS connection. >> > >> > On 9/3/06, jlittman <[EMAIL PROTECTED]> wrote: >> >> >> >> It looks like I'm close, maybe someone can suggest the last piece. >> >> >> >> Following basic instructions found in: >> >> http://www.activemq.org/site/advisory-message.html >> >> >> >> Subscribe to ActiveMQ.Advisory.Connection. Can keep track of >> connections >> >> coming and going as follows: >> >> public void onMessage(Message msg) { >> >> ActiveMQMessage activeMQMessage = (ActiveMQMessage) msg; >> >> if (activeMQMessage.getDataStructure() instanceof >> ConnectionInfo) >> >> { >> >> ConnectionInfo connectionInfo = (ConnectionInfo) >> >> activeMQMessage.getDataStructure(); >> >> logger.info("received connection notice " + >> >> connectionInfo.getConnectionId()); >> >> } else if (activeMQMessage.getDataStructure() instanceof >> >> RemoveInfo) >> >> { >> >> RemoveInfo removeInfo = (RemoveInfo) >> >> activeMQMessage.getDataStructure(); >> >> logger.info("received remove notice " + >> >> (ConnectionId)removeInfo.getObjectId()); >> >> } >> >> } >> >> >> >> and when I receive a message, I try to correlate it with my connected >> >> client >> >> as follows: >> >> >> >> ActiveMQMessage activeMQMessage = (ActiveMQMessage) >> jmsMessage; >> >> ProducerId producerId = activeMQMessage.getProducerId(); >> >> logger.info ("producer id is " + producerId); >> >> logger.info ("connection id is " + >> >> >> activeMQMessage.getConnection().getConnectionInfo().getConnectionId()); >> >> >> >> The problem is that the output is: >> >> >> >> 2006-09-03 08:15:56,439 INFO [Thread-35] >> >> com.dmarc.ras.common.server.ConnectionMonitor.info - received >> connection >> >> notice ID:server-corp-2975-1157296540985-18:0 >> >> 2006-09-03 08:16:03,611 INFO [Thread-38] controller.onMessage - >> producer >> >> id >> >> is ID:server-corp-2975-1157296540985-18:0:-1:1 >> >> 2006-09-03 08:16:03,611 INFO [Thread-38] controller.onMessage - >> >> connection >> >> id is ID:server-corp-2975-1157296540985-6:4 >> >> >> >> >> >> So the connectId doesn't match, but the producerId *almost* matches. >> So I >> >> guess I don't quite have the way to match the connection events with >> the >> >> incoming messages. >> >> >> >> >> >> >> >> >> >> jlittman wrote: >> >> > >> >> > From my ActiveMQ server application, I want to be able to detect >> when a >> >> > client has disappeared (i.e. crash) without explicitly closing the >> >> > application level session. What I'd like to do is the following: >> >> > 1) receive ApplicationConnect message from a client. Save some sort >> of >> >> an >> >> > id representing the connection. >> >> > 2) If the application disconnects or exits ungracefully without >> sending >> >> an >> >> > ApplicationDisconnect message, I want to receive notification that >> the >> >> > client with the given id is gone, and I should clean up all relevant >> >> > state, locks, etc.... >> >> > >> >> > I can set up a MessageListener interested in topic >> >> > ActiveMQ.Advisory.Connection, and I get a message delivered when >> >> clients >> >> > connect and when they disconnect or crash. When I get a JMS message >> for >> >> > ApplicationConnect, I can see that there is ConnectionInfo in the >> data >> >> > structure for Message. However, I don't see any values that >> correlate >> >> with >> >> > the ConnectionInfo received in the ActiveMQ.Advisory.Connection >> topic >> >> > message. There's a clientId, sessionId etc... but they don't seem to >> be >> >> > the value I am after. Is there a value here that I can use, or is >> there >> >> a >> >> > better way to build this mousetrap altogether? Thanks in advance for >> >> any >> >> > tips. >> >> > >> >> >> >> -- >> >> View this message in context: >> >> http://www.nabble.com/Detecting-lost-clients-tf2208237.html#a6123603 >> >> Sent from the ActiveMQ - User forum at Nabble.com. >> >> >> >> >> > >> > >> > -- >> > >> > James >> > ------- >> > http://radio.weblogs.com/0112098/ >> > >> > >> >> -- >> View this message in context: >> http://www.nabble.com/Detecting-lost-clients-tf2208237.html#a6136537 >> Sent from the ActiveMQ - User forum at Nabble.com. >> >> > > > -- > > James > ------- > http://radio.weblogs.com/0112098/ > > -- View this message in context: http://www.nabble.com/Detecting-lost-clients-tf2208237.html#a6137775 Sent from the ActiveMQ - User forum at Nabble.com.