I am using a multi-threaded client of JbossMQ which does the following:
1.) Creates a Connection on the main thread
2.) Spawns n client threads.  On start, each client thread then aquires a 
Session from the Connection, and a MessageConsumer from the Session it created. 
 Once the MessageConsumer is created the thread goes into a loop calling 
receive() on the MessageConsumer.  Note that all of this has quite possibly 
occured before calling start() on the Connection.  All this should be allowed 
by the spec as Connection is a thread safe object.
3.) Calls Connection.start() on the main thread.

The problem I am seeing is that I intermittently get 
javax.jms.JMSException: The provided subscription does not exist
          at 
org.jboss.mq.server.ClientConsumer.getSubscription(ClientConsumer.java:365)
          at 
org.jboss.mq.server.JMSDestinationManager.getSubscription(JMSDestinationManager.java:867)
          at 
org.jboss.mq.server.JMSServerInterceptorSupport.getSubscription(JMSServerInterceptorSupport.java:319)
          at 
org.jboss.mq.security.ServerSecurityInterceptor.receive(ServerSecurityInterceptor.java:96)
          at 
org.jboss.mq.server.TracingInterceptor.receive(TracingInterceptor.java:535)
...

Looking through the code of the interceptor stack, I believe the problem to be 
in the JMSDestinationManager.  For several operations, including adding a 
MessageConsumer, it calls the method getClientConsumer(ConnectionToken tok).  
This method lazily creates a ClientConsumer for a given connection token the 
first time it is called for the connection token.  This method is not 
synchronized in any way, so I'm guessing adding multiple MessageConsumer 
simultaneously triggers the creation of multiple ClientConsumer objects due to 
this lack of synchronization.  This then leads to the stack trace above since 
the ClientConsumer cached for the connection token does not have all the 
subscriptions, since some subscriptions were mistakenly created on other 
ClientConsumers due to the race condition. 

Is there some sort of synchronization going on here that I'm missing or is this 
a bug?


View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3961048#3961048

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3961048
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to