You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Gary Tully (JIRA)" <ji...@apache.org> on 2011/04/01 13:22:11 UTC
[jira] [Updated] (AMQ-2679) "VMTransport" NullPointerException from
ActiveMQSessionExecutor.wakeup
[ https://issues.apache.org/jira/browse/AMQ-2679?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Gary Tully updated AMQ-2679:
----------------------------
Fix Version/s: (was: 5.5.0)
5.6.0
> "VMTransport" NullPointerException from ActiveMQSessionExecutor.wakeup
> ----------------------------------------------------------------------
>
> Key: AMQ-2679
> URL: https://issues.apache.org/jira/browse/AMQ-2679
> Project: ActiveMQ
> Issue Type: Bug
> Components: Broker, Geronimo Integration
> Affects Versions: 4.1.2
> Environment: AMQ 4.1.2 embedded in Geronimo 2.1.3, SuSE Linux 11
> Reporter: TH L.
> Fix For: 5.6.0
>
>
> setup in Geronimo deployment plan with
> {quote}
> <config-property-setting name="ServerUrl">vm://localhost?async=true&jms.asyncDispatch=false&jms.copyMessageOnSend=false&jms.watchTopicAdvisories=false</config-property-setting>
> {quote}
> I use only JMS send/reply pattern:
> {quote}
> connection = factory.createQueueConnection();
> connection.start();
> session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
> sender = session.createSender(requestQueue);
> replyQueue = session.createTemporaryQueue();
> jmsRequestMessage = session.createTextMessage();
> sender.send(jmsRequestMessage, DeliveryMode.NON_PERSISTENT, Message.DEFAULT_PRIORITY, timeToLive);
> receiver = session.createReceiver(replyQueue);
> jmsReplyMessage = receiver.receive();
> connection.close();
> {quote}
> When the message traffic get huge (or the server is under intensive computing), I would got such NPE
> {quote}
> Exception in thread "VMTransport" java.lang.NullPointerException
> at org.apache.activemq.ActiveMQSessionExecutor.wakeup(ActiveMQSessionExecutor.java:76)
> at org.apache.activemq.ActiveMQSessionExecutor.execute(ActiveMQSessionExecutor.java:61)
> at org.apache.activemq.ActiveMQSession.dispatch(ActiveMQSession.java:1344)
> at org.apache.activemq.ActiveMQConnection.onCommand(ActiveMQConnection.java:1485)
> at org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:95)
> at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:65)
> at org.apache.activemq.transport.vm.VMTransport.iterate(VMTransport.java:201)
> at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:120)
> at org.apache.activemq.thread.PooledTaskRunner.access$100(PooledTaskRunner.java:26)
> at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:47)
> at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
> at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
> at java.lang.Thread.run(Thread.java:619)
> {quote}
> setting _jms.asyncDispatch=false_ may ease the problem, but the NPE still happens..
> as comment from kevan http://n3.nabble.com/sudden-NullPointerException-from-ActiveMQSessionExecutor-wakeup-tt676485.html#a676966
> It could be a timing hole in ActiveMQSessionExecutor.
> possible fix from kevan
> {quote}
> Index: activemq-core/src/main/java/org/apache/activemq/ActiveMQSessionExecutor.java
> ===================================================================
> --- activemq-core/src/main/java/org/apache/activemq/ActiveMQSessionExecutor.java (revision 663068)
> +++ activemq-core/src/main/java/org/apache/activemq/ActiveMQSessionExecutor.java (working copy)
> @@ -118,10 +118,14 @@
> try {
> if (messageQueue.isRunning()) {
> messageQueue.stop();
> - if (taskRunner != null) {
> - taskRunner.shutdown();
> - taskRunner = null;
> + TaskRunner tempTaskRunner;
> + synchronized (this) {
> + tempTaskRunner = this.taskRunner;
> + this.taskRunner = null;
> }
> + if (tempTaskRunner != null) {
> + tempTaskRunner.shutdown();
> + }
> }
> } catch (InterruptedException e) {
> Thread.currentThread().interrupt();
> {quote}
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira