[jboss-dev-forums] [Design of Messaging on JBoss (Messaging/JBoss)] - Re: Deadlock in JBoss Messaging during JBoss5 shutdown

clebert.suconic@jboss.com do-not-reply at jboss.com
Mon Oct 29 12:14:22 EDT 2007


anonymous wrote : >>The problem is that your code does account for the case where FailoverCommandCenter == null (non clustered), but it's not a MessagingShutdownException

on this case, the handleClose will aways be closed...  let me explain:

The basic problem is, When JBAS is shutdown, case the handleClosing is not complete, the ConnectionConsumer will be waiting forever. So, during a shutdown we need to ensure ConnectionConsumer will finish

handleClosing performs a client2server communication before calling clientConsumer.close():

   public Object handleClosing(Invocation invocation) throws Throwable
  |    {
  | 
  | ......
  |          Long l = (Long) invocation.invokeNext(); <<<< --- this line will fail iif the server was killed...
  | ....
  |          consumerState.getClientConsumer().close(lastDeliveryId); <<< -- if the server was killed, nothing will close the clientConsumer
  | 
  | ....
  | 

When you have failover in place, the above code is not a problem, as failover will take care of the exception reconnecting everything.


But when you don't have a failover logic in place, nothing will close the consumer, what will cause a hang. That's why I aways close the consumer when you don't have a FailoverCommandCenter.

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

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4099898



More information about the jboss-dev-forums mailing list