Spring SingleConnectionFactory-引发ConcurrentModificationException

Spring SingleConnectionFactory-引发ConcurrentModificationException,spring,spring-jms,Spring,Spring Jms,我使用多个SimpleMessageListenerContainer,它们都使用来自单个ConnectionFactory的相同连接。它们都在SingleConnectionFactory的AggregatedExceptionListener中注册。因为,当SingleConnectionFactory的JMS连接断开时,需要通知所有SMLC清除其会话和使用者,并从SCF获取新连接 但是,当SingleConnectionFactory的AggregatedExceptionListener

我使用多个SimpleMessageListenerContainer,它们都使用来自单个ConnectionFactory的相同连接。它们都在SingleConnectionFactory的AggregatedExceptionListener中注册。因为,当SingleConnectionFactory的JMS连接断开时,需要通知所有SMLC清除其会话和使用者,并从SCF获取新连接

但是,当SingleConnectionFactory的AggregatedExceptionListener在其this.delegate上迭代并尝试调用listener.OneException时,会发生此错误。例如,我的所有SMLC都是委托

这在Spring类中似乎是一个bug。它也许应该复制委托,然后在复制的列表上迭代,这样如果列表被修改,它就不会引发ConcurrentModificationException

如果您有任何关于解决方案的想法,我们将不胜感激

13:30:28,201 ERROR [SimpleMessageListenerContainer] Encountered non-recoverable JMSException
javax.jms.JMSException: java.io.EOFException
    at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:54)
    at org.apache.activemq.ActiveMQConnection.onAsyncException(ActiveMQConnection.java:1998)
    at org.apache.activemq.ActiveMQConnection.onException(ActiveMQConnection.java:2017)
    at org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:101)
    at org.apache.activemq.transport.ResponseCorrelator.onException(ResponseCorrelator.java:126)
    at org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:101)
    at org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:101)
    at org.apache.activemq.transport.WireFormatNegotiator.onException(WireFormatNegotiator.java:160)
    at org.apache.activemq.transport.AbstractInactivityMonitor.onException(AbstractInactivityMonitor.java:314)
    at org.apache.activemq.transport.TransportSupport.onException(TransportSupport.java:96)
    at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:200)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.io.EOFException
    at java.io.DataInputStream.readInt(Unknown Source)
    at org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:258)
    at org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:221)
    at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:213)
    at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196)
    ... 1 more
Exception in thread "ActiveMQ Connection Executor: tcp://localhost/127.0.0.1:9002@58017" java.util.ConcurrentModificationException
    at java.util.LinkedHashMap$LinkedHashIterator.nextNode(Unknown Source)
    at java.util.LinkedHashMap$LinkedKeyIterator.next(Unknown Source)
    at org.springframework.jms.connection.SingleConnectionFactory$AggregatedExceptionListener.onException(SingleConnectionFactory.java:670)
    at org.apache.activemq.ActiveMQConnection$5.run(ActiveMQConnection.java:2005)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

正如您所怀疑的,这是一个bug,请参阅

它应该在即将发布的版本4.1.8和4.2.2中修复,计划于2015年10月15日发布