JBoss hangs during application undeployment with Spring DefaultMessageListenerContainer thread running
Environment
- JBoss Enterprise Application Platform (EAP) 6
Issue
When a shutdown command is issued to the server through the jboss-cli, the server does not shutdown. It just keeps on throwing exceptions similar to the following.
ERROR [org.hornetq.ra] (consumerCheckTransactionBatchProcessListenerContainer-1) HQ154002: Could not create session: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:/JmsXA
at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:390)
at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:368)
at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:464)
at org.hornetq.ra.HornetQRASessionFactoryImpl.allocateConnection(HornetQRASessionFactoryImpl.java:832)
at org.hornetq.ra.HornetQRASessionFactoryImpl.createSession(HornetQRASessionFactoryImpl.java:465)
at org.springframework.jms.support.JmsAccessor.createSession(JmsAccessor.java:200) [spring.jar:2.0.6]
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:292) [spring.jar:2.0.6]
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:254) [spring.jar:2.0.6]
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:871) [spring.jar:2.0.6]
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:811) [spring.jar:2.0.6]
at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_51]
Caused by: javax.resource.ResourceException: IJ000655: No managed connections available within configured blocking timeout (30000 [ms])
at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.getConnection(SemaphoreArrayListManagedConnectionPool.java:383)
at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getSimpleConnection(AbstractPool.java:416)
at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:365)
at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:329)
... 10 more
The only way to shutdown the application server seems to be to forcefully kill the java process for the server.
Resolution
If Spring version is below 3.0.7, upgrade.
Add a dependency on the resource as required.1
Root Cause
There is an issue in Spring prior to version 3.0.7 1 that can see this behaviour demonstrated.
It could be a dependency on JmsXA is required so JBoss knows it should not be shut down before Spring app shuts down.
Diagnostic Steps
It may be is that when the application starts undeploying, the Spring DefaultMessageListenerContainer is not shut down.
- Check the Spring context file configuring it, or the code that programmatically configured it.
- Take a thread dump when the server is hung
This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.
Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.
