2 Replies Latest reply on Apr 8, 2009 10:42 PM by Brad Warren

    JBoss closing JMS connection automatically

    Brad Warren Novice

      I'm creating a connection to a topic like this:

      public class FOSMessageListener implements MessageListener {
      
       private ConnectionFactory connectionFactory;
       private javax.jms.Connection topicConnection;
       private Session session;
       private MessageConsumer consumer;
      
       public FOSMessageListener() {
       try {
       Context ctx = new InitialContext();
       connectionFactory = (ConnectionFactory)ctx.lookup("java:activemq/TopicConnectionFactory");
       log.info("got topic connection factory: " + connectionFactory);
       Topic topic = (Topic)ctx.lookup("activemq/topic/FOS");
       log.info("got topic: " + topic);
       topicConnection = connectionFactory.createConnection();
       log.info("got topic connection: " + topicConnection);
       session = topicConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
       log.info("got session: " + session);
       consumer = session.createConsumer(topic);
       log.info("got consumer: " + consumer);
       consumer.setMessageListener(this);
       log.info("topic listener registered");
       //Message message = consumer.receive();
       //log.info("message received: " + message);
       }
       catch(Exception e) {
       log.error("JMS Exception", e);
       }
       }
      
       public void onMessage(Message message) {
       log.info("message received: " + message);
       }
      }
      


      JBoss is closing the connection automatically right after the connection is created:

      15:48:58,863 INFO [FOSMessageListener] got topic connection factory: org.apache.activemq.ra.ActiveMQConnectionFactory@1b2fcac
      15:48:58,863 INFO [FOSMessageListener] got topic: topic://topic.FOS
      15:48:58,863 INFO [FOSMessageListener] got topic connection: org.apache.activemq.ra.ManagedConnectionProxy@14d711
      15:48:58,863 INFO [FOSMessageListener] got session: ManagedSessionProxy { ActiveMQSession {id=ID:76360RWAUIT-4475-1239227462795-2:24:152,started=false} }
      15:48:58,863 INFO [FOSMessageListener] got consumer: ActiveMQMessageConsumer { value=ID:76360RWAUIT-4475-1239227462795-2:24:152:1, started=false }
      15:48:58,863 INFO [FOSMessageListener] topic listener registered
      15:48:59,628 INFO [CachedConnectionManager] Closing a connection for you. Please close them yourself: org.apache.activemq.ra.ManagedConnectionProxy@14d711
      java.lang.Throwable: STACKTRACE
       at org.jboss.resource.connectionmanager.CachedConnectionManager.registerConnection(CachedConnectionManager.java:278)
       at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:524)
       at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:941)
       at org.apache.activemq.ra.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:94)
       at org.apache.activemq.ra.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:67)
       at com.usairways.cbro.rtd.view.FOSMessageListener.<init>(FOSMessageListener.java:51)
       at com.usairways.cbro.rtd.view.RtdBackingBean.<init>(RtdBackingBean.java:79)
       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
       at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
       at java.lang.Class.newInstance0(Class.java:350)
       at java.lang.Class.newInstance(Class.java:303)
       at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:186)
       at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:106)
       at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:368)
       at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:222)
       at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:86)
       at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
       at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
       at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:61)
       at org.apache.el.parser.AstValue.getValue(AstValue.java:107)
       at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
       at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
       at javax.faces.component.UIOutput.getValue(UIOutput.java:184)
       at com.icesoft.faces.renderkit.dom_html_basic.MenuRenderer.getCurrentSelectedValues(MenuRenderer.java:594)
       at com.icesoft.faces.renderkit.dom_html_basic.MenuRenderer.renderOptions(MenuRenderer.java:469)
       at com.icesoft.faces.renderkit.dom_html_basic.MenuRenderer.renderSelect(MenuRenderer.java:412)
       at com.icesoft.faces.renderkit.dom_html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:119)
       at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:861)
       at com.icesoft.faces.renderkit.dom_html_basic.DomBasicRenderer.encodeParentAndChildren(DomBasicRenderer.java:367)
       at com.icesoft.faces.renderkit.dom_html_basic.GridRenderer.encodeChildren(GridRenderer.java:208)
       at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
       at com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:517)
       at com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:522)
       at com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:522)
       at com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:522)
       at com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:522)
       at com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:522)
       at com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:522)
       at com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:522)
       at com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:522)
       at com.icesoft.faces.facelets.D2DFaceletViewHandler.renderResponse(D2DFaceletViewHandler.java:282)
       at com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:153)
       at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
       at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
       at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
       at com.icesoft.faces.webapp.http.core.JsfLifecycleExecutor.apply(JsfLifecycleExecutor.java:17)
       at com.icesoft.faces.context.View$2$1.respond(View.java:47)
       at com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:197)
       at com.icesoft.faces.webapp.http.servlet.ThreadBlockingAdaptingServlet$ThreadBlockingRequestResponse.respondWith(ThreadBlockingAdaptingServlet.java:36)
       at com.icesoft.faces.context.View$2.serve(View.java:72)
       at com.icesoft.faces.context.View.servePage(View.java:133)
       at com.icesoft.faces.webapp.http.core.SingleViewServer.service(SingleViewServer.java:52)
       at com.icesoft.faces.webapp.http.common.ServerProxy.service(ServerProxy.java:11)
       at com.icesoft.faces.webapp.http.servlet.MainSessionBoundServlet$4.service(MainSessionBoundServlet.java:114)
       at com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:24)
       at com.icesoft.faces.webapp.http.servlet.MainSessionBoundServlet.service(MainSessionBoundServlet.java:160)
       at com.icesoft.faces.webapp.http.servlet.SessionDispatcher$1.service(SessionDispatcher.java:42)
       at com.icesoft.faces.webapp.http.servlet.ThreadBlockingAdaptingServlet.service(ThreadBlockingAdaptingServlet.java:19)
       at com.icesoft.faces.webapp.http.servlet.EnvironmentAdaptingServlet.service(EnvironmentAdaptingServlet.java:63)
       at com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:62)
       at com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
       at com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:153)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:638)
       at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:444)
       at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:382)
       at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:310)
       at org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:696)
       at org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:667)
       at org.apache.jsp.index_jsp._jspService(index_jsp.java:59)
       at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
       at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
       at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:322)
       at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:249)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
       at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
       at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
       at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
       at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
       at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
       at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
       at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
       at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
       at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
       at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
       at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
       at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
       at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:601)
       at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
       at java.lang.Thread.run(Thread.java:595)
      


      If I comment out setMessageListener() and instead do consumer.receive(), I get a message just fine, then JBoss closes the connection.

      Why would my connection be closed right after opening it? It is not going out of scope or anything.

      Environment:
      JBoss 5.0.1.GA
      ActiveMQ 5.2.0

        • 1. Re: JBoss closing JMS connection automatically
          Yong Hao Gao Master

          I believe this is ActiveMQ RA not working properly with JBoss 5.
          I suggest you put the question to AS forum and ActiveMQ forum also. Or you may consider using JBoss messaging, it's been tested with JBoss server and we know it better. :)

          • 2. Re: JBoss closing JMS connection automatically
            Brad Warren Novice

            ActiveMQ wasn't my decision and it's not easily changeable (politically).

            It's hard to believe that no one would have run across this if it was a widespread problem given how many people are using ActiveMQ with JBoss. I'm guessing it's something with my configuration. Or...

            Let me ask this a different way:

            Does the CachedConnectionManager assume that a JMS connection created inside a method should always be closed when that method returns?

            It's working fine with the CachedConnectionManager auto-close turned off so I don't think there's a fundamental problem with how I'm using JMS. I'm not seeing zombie JMS connections on the server.