[ https://issues.apache.org/jira/browse/AMQ-5198?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14041896#comment-14041896 ]
Enrico Musuruana commented on AMQ-5198: --------------------------------------- Hi Timothy, As I mentioned the problem is not related to the Session, but the Connection itself not being thread safe. We currently make use of a single Session per thread. We both agree that an 'in frequently triggered' race condition doesnt exactly lend itself to a simple junit, but I believe that the test case I provided you with the actual patch should be quite straight-forward to test. > MessageConsumer and Producer are not thread safe > ------------------------------------------------ > > Key: AMQ-5198 > URL: https://issues.apache.org/jira/browse/AMQ-5198 > Project: ActiveMQ > Issue Type: Bug > Affects Versions: 5.9.0 > Reporter: Enrico Musuruana > Attachments: ActiveMq.zip > > > We currently have an object that acts both as a consumer and as a producer > over the same queue. > Lazy initialization of the scheduler is not 100% thread safe when a consumer > and a producer are created sharing the same connection. > We encountered the following sporadic NPE when a rollback() is invoked: > Caused by: java.lang.NullPointerException > at > org.apache.activemq.thread.Scheduler.executeAfterDelay(Scheduler.java:64) > at > org.apache.activemq.ActiveMQMessageConsumer.rollback(ActiveMQMessageConsumer.java:1278) > at > org.apache.activemq.ActiveMQMessageConsumer$5.afterRollback(ActiveMQMessageConsumer.java:1054) > at > org.apache.activemq.TransactionContext.afterRollback(TransactionContext.java:157) > ... 11 more > We believe that the lazy initialized getScheduler() is open for a race > condition when a publish and rollback are happening concurrently. > try { > result = scheduler = new > Scheduler("ActiveMQConnection["+info.getConnectionId().getValue()+"] > Scheduler"); > scheduler.start(); > } catch(Exception e) { > throw JMSExceptionSupport.create(e); > } > The suggested fix is to simply invoke the start within the constructor of the > Scheduler class. -- This message was sent by Atlassian JIRA (v6.2#6252)