NullPointerException in org.jboss.remoting.Lease.notifyClien
rtm333 Nov 14, 2006 11:13 AMWe are using Messaging 1.0.1.GA with JBoss 4.0.5.GA. We are experiencing a serious problem that prevents further client connections to JMS. It can be reproduced by the following steps:
1. Start JBoss (standard messaging configuration).
2. Start a JMS topic subscriber.
3. Shutdown JBoss (client ExceptionListener is triggered, no action, client remains running).
4. Restart JBoss.
5. Stop JMS topic subscriber.
6. After about a minute JBoss throws a NullPointerException.
7. No further JMS connections will be accepted by the server.
2. Start a JMS topic subscriber.
3. Shutdown JBoss (client ExceptionListener is triggered, no action, client remains running).
4. Restart JBoss.
5. Stop JMS topic subscriber.
6. After about a minute JBoss throws a NullPointerException.
7. No further JMS connections will be accepted by the server.
This is the server side exception from step 6:
Exception in thread "Timer-1" java.lang.NullPointerException at org.jboss.remoting.Lease.notifyClientLost(Lease.java:211) at org.jboss.remoting.Lease.access$300(Lease.java:39) at org.jboss.remoting.Lease$LeaseTimerTask.run(Lease.java:242) at java.util.TimerThread.mainLoop(Timer.java:512) at java.util.TimerThread.run(Timer.java:462)
This is the exception that is thrown when a new JMS client tries to connect in step 7:
[java] java.lang.RuntimeException: Error setting up client lease upon performing connect. [java] at org.jboss.remoting.Client.connect(Client.java:394) [java] at org.jboss.remoting.Client.connect(Client.java:380) [java] at org.jboss.jms.client.remoting.JMSRemotingConnection.start(JMSRemotingConnection.java:99) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate.invoke(ClientConnectionFactoryDelegate.java:159) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.invokeNext(ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.java) [java] at org.jboss.jms.client.container.StateCreationAspect.handleCreateConnectionDelegate(StateCreationAspect.java:81) [java] at org.jboss.aop.advice.org.jboss.jms.client.container.StateCreationAspect0.invoke(StateCreationAspect0.java) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.invokeNext(ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.java) [java] at org.jboss.jms.client.container.ExceptionInterceptor.invoke(ExceptionInterceptor.java:69) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.invokeNext(ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.java) [java] at org.jboss.jms.client.container.ClientLogInterceptor.invoke(ClientLogInterceptor.java:107) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.invokeNext(ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.java) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate.createConnectionDelegate(ClientConnectionFactoryDelegate.java) [java] at org.jboss.jms.client.JBossConnectionFactory.createConnectionInternal(JBossConnectionFactory.java:202) [java] at org.jboss.jms.client.JBossConnectionFactory.createTopicConnection(JBossConnectionFactory.java:120) [java] at org.jboss.jms.client.JBossConnectionFactory.createTopicConnection(JBossConnectionFactory.java:115) [java] at testjms.JmsTestDriver.<init>(JmsTestDriver.java:31) [java] at testjms.TestTopicSubscriber.<init>(TestTopicSubscriber.java:5) [java] at testjms.TestTopicSubscriber.main(TestTopicSubscriber.java:35) [java] Caused by: java.lang.Exception: Error setting up client lease. [java] at org.jboss.remoting.MicroRemoteClientInvoker.establishLease(MicroRemoteClientInvoker.java:393) [java] at org.jboss.remoting.Client.setupClientLease(Client.java:481) [java] at org.jboss.remoting.Client.connect(Client.java:390) [java] ... 18 more [java] Caused by: java.lang.IllegalStateException: Timer already cancelled. [java] at java.util.Timer.sched(Timer.java:354) [java] at java.util.Timer.schedule(Timer.java:222) [java] at org.jboss.remoting.util.TimerUtil.schedule(TimerUtil.java:27) [java] at org.jboss.remoting.Lease.startLease(Lease.java:80) [java] at org.jboss.remoting.ServerInvoker.updateClientLease(ServerInvoker.java:1086) [java] at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:946) [java] at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:857) [java] at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:454) [java] at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:541) [java] at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:261) [java] at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:172) [java] at org.jboss.remoting.MicroRemoteClientInvoker.establishLease(MicroRemoteClientInvoker.java:362) [java] ... 20 more [java] 16:17:41,952 ERROR [ExceptionInterceptor] Cause of exception: [java] java.lang.Exception: Error setting up client lease. [java] at org.jboss.remoting.MicroRemoteClientInvoker.establishLease(MicroRemoteClientInvoker.java:393) [java] at org.jboss.remoting.Client.setupClientLease(Client.java:481) [java] at org.jboss.remoting.Client.connect(Client.java:390) [java] at org.jboss.remoting.Client.connect(Client.java:380) [java] at org.jboss.jms.client.remoting.JMSRemotingConnection.start(JMSRemotingConnection.java:99) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate.invoke(ClientConnectionFactoryDelegate.java:159) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.invokeNext(ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.java) [java] at org.jboss.jms.client.container.StateCreationAspect.handleCreateConnectionDelegate(StateCreationAspect.java:81) [java] at org.jboss.aop.advice.org.jboss.jms.client.container.StateCreationAspect0.invoke(StateCreationAspect0.java) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.invokeNext(ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.java) [java] at org.jboss.jms.client.container.ExceptionInterceptor.invoke(ExceptionInterceptor.java:69) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.invokeNext(ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.java) [java] at org.jboss.jms.client.container.ClientLogInterceptor.invoke(ClientLogInterceptor.java:107) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.invokeNext(ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.java) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate.createConnectionDelegate(ClientConnectionFactoryDelegate.java) [java] at org.jboss.jms.client.JBossConnectionFactory.createConnectionInternal(JBossConnectionFactory.java:202) [java] at org.jboss.jms.client.JBossConnectionFactory.createTopicConnection(JBossConnectionFactory.java:120) [java] at org.jboss.jms.client.JBossConnectionFactory.createTopicConnection(JBossConnectionFactory.java:115) [java] at testjms.JmsTestDriver.<init>(JmsTestDriver.java:31) [java] at testjms.TestTopicSubscriber.<init>(TestTopicSubscriber.java:5) [java] at testjms.TestTopicSubscriber.main(TestTopicSubscriber.java:35) [java] Caused by: java.lang.IllegalStateException: Timer already cancelled. [java] at java.util.Timer.sched(Timer.java:354) [java] at java.util.Timer.schedule(Timer.java:222) [java] at org.jboss.remoting.util.TimerUtil.schedule(TimerUtil.java:27) [java] at org.jboss.remoting.Lease.startLease(Lease.java:80) [java] at org.jboss.remoting.ServerInvoker.updateClientLease(ServerInvoker.java:1086) [java] at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:946) [java] at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:857) [java] at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:454) [java] at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:541) [java] at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:261) [java] at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:172) [java] at org.jboss.remoting.MicroRemoteClientInvoker.establishLease(MicroRemoteClientInvoker.java:362) [java] javax.jms.IllegalStateException: Error setting up client lease upon performing connect. [java] at org.jboss.jms.client.container.ExceptionInterceptor.invoke(ExceptionInterceptor.java:91) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.invokeNext(ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.java) [java] ... 20 more [java] 16:17:42,718 ERROR [ExceptionInterceptor] Cause of exception: [java] java.lang.IllegalStateException: Timer already cancelled. [java] at java.util.Timer.sched(Timer.java:354) [java] at java.util.Timer.schedule(Timer.java:222) [java] at org.jboss.remoting.util.TimerUtil.schedule(TimerUtil.java:27) [java] at org.jboss.remoting.Lease.startLease(Lease.java:80) [java] at org.jboss.remoting.ServerInvoker.updateClientLease(ServerInvoker.java:1086) [java] at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:946) [java] at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:857) [java] at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:454) [java] at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:541) [java] at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:261) [java] at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:172) [java] at org.jboss.remoting.MicroRemoteClientInvoker.establishLease(MicroRemoteClientInvoker.java:362) [java] at org.jboss.remoting.Client.setupClientLease(Client.java:481) [java] at org.jboss.remoting.Client.connect(Client.java:390) [java] at org.jboss.remoting.Client.connect(Client.java:380) [java] at org.jboss.jms.client.remoting.JMSRemotingConnection.start(JMSRemotingConnection.java:99) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate.invoke(ClientConnectionFactoryDelegate.java:159) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.invokeNext(ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.java) [java] at org.jboss.jms.client.container.StateCreationAspect.handleCreateConnectionDelegate(StateCreationAspect.java:81) [java] at org.jboss.aop.advice.org.jboss.jms.client.container.StateCreationAspect0.invoke(StateCreationAspect0.java) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.invokeNext(ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.java) [java] at org.jboss.jms.client.container.ExceptionInterceptor.invoke(ExceptionInterceptor.java:69) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.invokeNext(ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.java) [java] at org.jboss.jms.client.container.ClientLogInterceptor.invoke(ClientLogInterceptor.java:107) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.invokeNext(ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.java) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate.createConnectionDelegate(ClientConnectionFactoryDelegate.java) [java] at org.jboss.jms.client.JBossConnectionFactory.createConnectionInternal(JBossConnectionFactory.java:202) [java] at org.jboss.jms.client.JBossConnectionFactory.createTopicConnection(JBossConnectionFactory.java:120) [java] at org.jboss.jms.client.JBossConnectionFactory.createTopicConnection(JBossConnectionFactory.java:115) [java] at testjms.JmsTestDriver.<init>(JmsTestDriver.java:31) [java] at testjms.TestTopicSubscriber.<init>(TestTopicSubscriber.java:5) [java] at testjms.TestTopicSubscriber.main(TestTopicSubscriber.java:35) [java] at org.jboss.jms.client.container.ClientLogInterceptor.invoke(ClientLogInterceptor.java:107) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.invokeNext(ClientConnectionFactoryDelegate$createConnectionDelegate_N6840474864420126404.java) [java] at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate.createConnectionDelegate(ClientConnectionFactoryDelegate.java) [java] at org.jboss.jms.client.JBossConnectionFactory.createConnectionInternal(JBossConnectionFactory.java:202) [java] at org.jboss.jms.client.JBossConnectionFactory.createTopicConnection(JBossConnectionFactory.java:120) [java] at org.jboss.jms.client.JBossConnectionFactory.createTopicConnection(JBossConnectionFactory.java:115) [java] at testjms.JmsTestDriver.<init>(JmsTestDriver.java:31) [java] at testjms.TestTopicSubscriber.<init>(TestTopicSubscriber.java:5) [java] at testjms.TestTopicSubscriber.main(TestTopicSubscriber.java:35)
TRACE output for remoting on the server indicates that the previous client lease is re-established early during step 4. I suppose the server's lease registration gets disturbed when the client is finally terminated in step 5.
This is a major show stopper for us, as any client kept running during a server restart and terminated subsequently will render the JMS server unusable.
Any suggestions appreciated.