How to correctly perform cleanup of StdServerSessionPool?
maksimus Feb 25, 2004 2:09 PMI'm integrating propriatary JMS implementation with JBoss. The only problem that I'm facing is that JBoss hangs on shutdown. I've found that it happens at StdServerSessionPool.clear method at sessionPool.wait() call.
//wait for all server sessions to be returned.
synchronized (sessionPool)
{
while (numServerSessions > 0)
{
try
{
sessionPool.wait();
}
catch (InterruptedException ignore)
{
}
}
}
It looks like JMS I'm using does not return server sessions correctly or doesn't notify about their return.
What is the API that should be called to correctly return server session?
Here is the full stack of Shutdown Hook thread:
Thread [JBoss Shutdown Hook] (Suspended)
java.lang.Object.wait(long) line: not available [native method]
java.util.ArrayList(java.lang.Object).wait() line: 429
org.jboss.jms.asf.StdServerSessionPool.clear() line: 251
org.jboss.ejb.plugins.jms.JMSContainerInvoker.innerStop() line: 770
org.jboss.ejb.plugins.jms.JMSContainerInvoker.stopService() line: 710
org.jboss.ejb.plugins.jms.JMSContainerInvoker(org.jboss.system.ServiceMBeanSupport).stop() line: 240
org.jboss.ejb.MessageDrivenContainer.stopService() line: 273
org.jboss.ejb.MessageDrivenContainer(org.jboss.system.ServiceMBeanSupport).stop() line: 240
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 39
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 25
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) line: 324
org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(java.lang.String, java.lang.Object[], java.lang.String[]) line: 284
org.jboss.mx.server.MBeanServerImpl.invoke(javax.management.ObjectName, java.lang.String, java.lang.Object[], java.lang.String[]) line: 546
org.jboss.system.ServiceController$ServiceProxy.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) line: 976
$Proxy14.stop() line: not available
org.jboss.system.ServiceController.stop(javax.management.ObjectName) line: 471
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 39
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 25
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) line: 324
org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(java.lang.String, java.lang.Object[], java.lang.String[]) line: 284
org.jboss.mx.server.MBeanServerImpl.invoke(javax.management.ObjectName, java.lang.String, java.lang.Object[], java.lang.String[]) line: 546
org.jboss.mx.util.MBeanProxyExt.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) line: 177
$Proxy29.stop(javax.management.ObjectName) line: not available
org.jboss.ejb.EjbModule.stopService() line: 350
org.jboss.ejb.EjbModule(org.jboss.system.ServiceMBeanSupport).stop() line: 240
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 39
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 25
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) line: 324
org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(java.lang.String, java.lang.Object[], java.lang.String[]) line: 284
org.jboss.mx.server.MBeanServerImpl.invoke(javax.management.ObjectName, java.lang.String, java.lang.Object[], java.lang.String[]) line: 546
org.jboss.system.ServiceController$ServiceProxy.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) line: 976
$Proxy14.stop() line: not available
org.jboss.system.ServiceController.stop(javax.management.ObjectName) line: 471
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 39
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 25
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) line: 324
org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(java.lang.String, java.lang.Object[], java.lang.String[]) line: 284
org.jboss.mx.server.MBeanServerImpl.invoke(javax.management.ObjectName, java.lang.String, java.lang.Object[], java.lang.String[]) line: 546
org.jboss.mx.util.MBeanProxyExt.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) line: 177
$Proxy12.stop(javax.management.ObjectName) line: not available
org.jboss.ejb.EJBDeployer.stop(org.jboss.deployment.DeploymentInfo) line: 567
org.jboss.deployment.MainDeployer.stop(org.jboss.deployment.DeploymentInfo) line: 489
org.jboss.deployment.MainDeployer.undeploy(org.jboss.deployment.DeploymentInfo, boolean) line: 472
org.jboss.deployment.MainDeployer.shutdown() line: 359
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 39
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 25
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) line: 324
org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(java.lang.String, java.lang.Object[], java.lang.String[]) line: 284
org.jboss.mx.server.MBeanServerImpl.invoke(javax.management.ObjectName, java.lang.String, java.lang.Object[], java.lang.String[]) line: 546
org.jboss.system.server.ServerImpl$ShutdownHook.shutdownDeployments() line: 849
org.jboss.system.server.ServerImpl$ShutdownHook.shutdown() line: 824
org.jboss.system.server.ServerImpl$ShutdownHook.run() line: 812