ASG
IBM
Zystems
Cressida
Icon
Netflexity
 
  MQSeries.net
Search  Search       Tech Exchange      Education      Certifications      Library      Info Center      SupportPacs      LinkedIn  Search  Search                                                                   FAQ  FAQ   Usergroups  Usergroups
 
Register  ::  Log in Log in to check your private messages
 
RSS Feed - WebSphere MQ Support RSS Feed - Message Broker Support

MQSeries.net Forum Index » IBM MQ Java / JMS » How to clear MQ channel when Tomcat container is bounced

Post new topic  Reply to topic
 How to clear MQ channel when Tomcat container is bounced « View previous topic :: View next topic » 
Author Message
markg
PostPosted: Tue Sep 26, 2006 2:21 pm    Post subject: How to clear MQ channel when Tomcat container is bounced Reply with quote

Newbie

Joined: 26 Sep 2006
Posts: 3

Hello,

I am making asynchronous calls via Lingo using lingo-1.0-SNAPSHOT.jar in the application run on Tomcat.

<bean id="stagingManagerServer"
class="org.logicblaze.lingo.jms.JmsServiceExporter">
<property name="service">
<ref bean="stagingManagerService" />
</property>
<property name="serviceInterface"
value="org.tiaa.scm.tool.service.IStagingManager" />
<property name="connectionFactory">
<ref bean="jmsQueueConnectionFactory" />
</property>
<property name="destination">
<ref bean="jmsDestination"/>
</property>
</bean>

<bean id="stagingManagerClient"
class="org.logicblaze.lingo.jms.JmsProxyFactoryBean">
<property name="serviceInterface"
value="org.tiaa.scm.tool.service.IStagingManager" />
<property name="connectionFactory">
<ref bean="jmsQueueConnectionFactory" />
</property>
<property name="destination">
<ref bean="jmsDestination"/>
</property>
<property name="remoteInvocationFactory" ref="invocationFactory" />
</bean>

<bean id="invocationFactory"
class="org.logicblaze.lingo.LingoRemoteInvocationFactory">
<constructor-arg>
<bean class="org.logicblaze.lingo.SimpleMetadataStrategy">
<property name="oneWayForVoidMethods" value="true" />
</bean>
</constructor-arg>
</bean>

My problem is that when the container is bounced lingo does not always close open MQ queue and does not delete temporary queue (see exceptions attached).

Any clues would be greatly appreciated.

Thanks,
Mark
=======================================================

ERROR - Destroy method on bean with name 'stagingManagerServer' threw an exception
javax.jms.JMSException: MQJMS2000: failed to close MQ queue
at com.ibm.mq.jms.services.ConfigEnvironment.newException(ConfigEnvironment.java:567)
at com.ibm.mq.jms.MQMessageConsumer.closeQ(MQMessageConsumer.java:1265)
at com.ibm.mq.jms.MQQueueReceiver.close(MQQueueReceiver.java:137)
at org.logicblaze.lingo.jms.JmsServiceExporter.destroy(JmsServiceExporter.java:75)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.destroy(AbstractBeanFactory.java:924)
at org.springframework.beans.factory.support.AbstractBeanFactory.destroyBean(AbstractBeanFactory.java:1020)
at org.springframework.beans.factory.support.AbstractBeanFactory.destroyDisposableBean(AbstractBeanFactory.java:992)
at org.springframework.beans.factory.support.AbstractBeanFactory.destroyBean(AbstractBeanFactory.java:1014)
at org.springframework.beans.factory.support.AbstractBeanFactory.destroyDisposableBean(AbstractBeanFactory.java:992)
at org.springframework.beans.factory.support.AbstractBeanFactory.destroySingletons(AbstractBeanFactory.java:561)
at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:512)
at org.springframework.web.struts.ContextLoaderPlugIn.destroy(ContextLoaderPlugIn.java:390)
at org.apache.struts.action.ActionServlet.destroyModules(ActionServlet.java:499)
at org.apache.struts.action.ActionServlet.destroy(ActionServlet.java:286)
at org.apache.catalina.core.StandardWrapper.unload(StandardWrapper.java:1331)
at org.apache.catalina.core.StandardWrapper.stop(StandardWrapper.java:1666)
at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:892)
at org.apache.catalina.core.StandardContext.removeChild(StandardContext.java:3095)
at org.apache.catalina.startup.ContextConfig.stop(ContextConfig.java:1082)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:276)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4355)
at org.apache.catalina.manager.ManagerServlet.stop(ManagerServlet.java:1226)
at org.apache.catalina.manager.HTMLManagerServlet.stop(HTMLManagerServlet.java:545)
at org.apache.catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:106)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
2006.09.25 11:39:42 MQJMS1023E rollback failed
ERROR - Destroy method on bean with name 'stagingManagerClient' threw an exception
javax.jms.JMSException: MQJMS3004: failed to delete temporary queue
at com.ibm.mq.jms.services.ConfigEnvironment.newException(ConfigEnvironment.java:567)
at com.ibm.mq.jms.MQTemporaryQueue.delete(MQTemporaryQueue.java:196)
at org.logicblaze.lingo.jms.impl.SingleThreadedRequestor.close(SingleThreadedRequestor.java:83)
at org.logicblaze.lingo.jms.JmsClientInterceptor.destroy(JmsClientInterceptor.java:127)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.destroy(AbstractBeanFactory.java:924)
at org.springframework.beans.factory.support.AbstractBeanFactory.destroyBean(AbstractBeanFactory.java:1020)
at org.springframework.beans.factory.support.AbstractBeanFactory.destroyDisposableBean(AbstractBeanFactory.java:992)
at org.springframework.beans.factory.support.AbstractBeanFactory.destroyBean(AbstractBeanFactory.java:1014)
at org.springframework.beans.factory.support.AbstractBeanFactory.destroyDisposableBean(AbstractBeanFactory.java:992)
at org.springframework.beans.factory.support.AbstractBeanFactory.destroyBean(AbstractBeanFactory.java:1014)
at org.springframework.beans.factory.support.AbstractBeanFactory.destroyDisposableBean(AbstractBeanFactory.java:992)
at org.springframework.beans.factory.support.AbstractBeanFactory.destroyBean(AbstractBeanFactory.java:1014)
at org.springframework.beans.factory.support.AbstractBeanFactory.destroyDisposableBean(AbstractBeanFactory.java:992)
at org.springframework.beans.factory.support.AbstractBeanFactory.destroySingletons(AbstractBeanFactory.java:561)
at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:512)
at org.springframework.web.struts.ContextLoaderPlugIn.destroy(ContextLoaderPlugIn.java:390)
at org.apache.struts.action.ActionServlet.destroyModules(ActionServlet.java:499)
at org.apache.struts.action.ActionServlet.destroy(ActionServlet.java:286)
at org.apache.catalina.core.StandardWrapper.unload(StandardWrapper.java:1331)
at org.apache.catalina.core.StandardWrapper.stop(StandardWrapper.java:1666)
at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:892)
at org.apache.catalina.core.StandardContext.removeChild(StandardContext.java:3095)
at org.apache.catalina.startup.ContextConfig.stop(ContextConfig.java:1082)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:276)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4355)
at org.apache.catalina.manager.ManagerServlet.stop(ManagerServlet.java:1226)
at org.apache.catalina.manager.HTMLManagerServlet.stop(HTMLManagerServlet.java:545)
at org.apache.catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:106)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
INFO - Closing Spring root WebApplicationContex
Back to top
View user's profile Send private message
jefflowrey
PostPosted: Tue Sep 26, 2006 2:25 pm    Post subject: Reply with quote

Grand Poobah

Joined: 16 Oct 2002
Posts: 19981

If you're using MQ v6, you should be able to find the still-open connection on the temporary queue using dis qstatus type(handle) and then forcing the connection closed (stop connection).
_________________
I am *not* the model of the modern major general.
Back to top
View user's profile Send private message
markg
PostPosted: Tue Sep 26, 2006 2:43 pm    Post subject: Reply with quote

Newbie

Joined: 26 Sep 2006
Posts: 3

Jeff,

Thanks a lot for your quick reply. It seems like I will have to close all open MQ connections manually every time I bounce Tomcat. Is that correct?
Is there a way to setup container to take care of MQ connections automatically when a bounce occurs?

Thanks,
Mark
Back to top
View user's profile Send private message
fjb_saper
PostPosted: Tue Sep 26, 2006 3:11 pm    Post subject: Reply with quote

Grand High Poobah

Joined: 18 Nov 2003
Posts: 20756
Location: LI,NY

markg wrote:
Jeff,

Thanks a lot for your quick reply. It seems like I will have to close all open MQ connections manually every time I bounce Tomcat. Is that correct?
Is there a way to setup container to take care of MQ connections automatically when a bounce occurs?

Thanks,
Mark


No you should not have to sever any connection manually. This would point ot a network problem. I suspect, the root of the problem to be that your code handles poorly the exceptions in the finalizer/destroy method when trying to release the MQ resource. This should get called by the container on all objects (beans) after the stop request and before it enters the stopped state.

You may try to close the resources in the right serial order producers, stop connections, listeners, consumers, sessions, close connections but you have them all in just one try catch block.

Each resource you are trying to close will need its own try catch finally block. So that when an exception is being thrown at close of consumer you still close the session and the connection.

Now if you do a hard bounce and just kill the JVM, Jeff's method may be the only way to
reclaim abandoned resources


Enjoy

_________________
MQ & Broker admin
Back to top
View user's profile Send private message Send e-mail
markg
PostPosted: Wed Sep 27, 2006 11:28 am    Post subject: Reply with quote

Newbie

Joined: 26 Sep 2006
Posts: 3

As you can see from my post, I do not handle MQ-related issue in the code at all. Everything is done declaratively via Spring beans in the applicationContext.xml. In that case Lingo, Spring remoting imlplementation handles everything for me when server and client beans are initialized, and a method is executed on the client and a message is sent to the queue of the service implementation. There's no clearing down. Then replies are by default sent to a temporary queue - which is destroyed by the JMS provider if the client dies.

My problem is that when the container is bounced lingo does not always close open MQ queue and does not delete temporary queue (see exceptions attached).

Mark
Back to top
View user's profile Send private message
jefflowrey
PostPosted: Wed Sep 27, 2006 12:31 pm    Post subject: Reply with quote

Grand Poobah

Joined: 16 Oct 2002
Posts: 19981

Sounds like a bug in Lingo.
_________________
I am *not* the model of the modern major general.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic  Reply to topic Page 1 of 1

MQSeries.net Forum Index » IBM MQ Java / JMS » How to clear MQ channel when Tomcat container is bounced
Jump to:  



You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Protected by Anti-Spam ACP
 
 


Theme by Dustin Baccetti
Powered by phpBB © 2001, 2002 phpBB Group

Copyright © MQSeries.net. All rights reserved.