Using the resequencer from multiple threads shouldn't be a problem, so I need
to dig in a bit deeper to see what's wrong here. I'm not even sure if this a
resequencer problem or if the resequencer just un-covers another problem. 

Best you create a small Maven 2 app with all required dependencies in the
pom.xml, package/zip the app and attach it to a new JIRA ticket. Ideally, a
'mvn test' reproduces the problem. If you'd prefer to share just some
snippets, also create a JIRA ticket and attach the snippets there (but this
might take a bit longer then to resolve your problem).

Thanks,
Martin 


Ryan R. wrote:
> 
> Ok, I jumped the gun on that last post. I am still getting the below two
> exceptions. 
> 
> Martin, thanks for the feedback. I understand what you are saying and I
> can reproduce that behavior but this looks like something else.
> 
> I wrote a unit test that exercises the resequencer using the following
> route:
>          
> from("direct:start2").resequence(header("messageOrder")).stream().capacity(1000).timeout(500L).to(
>               "testOrderComponent");
> 
> This appears to work well so I am thinking the issues lies with the
> camel-jms component interaction with the resequencer. Is there multiple
> threads under the camel-jms component responsible for writing to the
> resequencer? The second exception appears to be a race condition with a
> hashmap that is not thread safe.
> 
> This is more of a system level test than a unit test. Any suggestions on
> putting something together for posting here? I can't seem to think of
> anything besides packaging up a JMS publisher with this consumer (that
> breaks) and posting saying it is meant to be run against activeMQ.
> 
> [aultMessageListenerContainer-1] EndpointMessageListener        ERROR
> Caused by: [org.apache.camel.RuntimeCamelException -
> java.lang.NullPointerException]
> org.apache.camel.RuntimeCamelException: java.lang.NullPointerException
>       at
> org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1126)
>       at
> org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:129)
>       at
> org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:543)
>       at
> org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:482)
>       at
> org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:451)
>       at
> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:323)
>       at
> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:261)
>       at
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:982)
>       at
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:974)
>       at
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:876)
>       at java.lang.Thread.run(Thread.java:619)
> Caused by: java.lang.NullPointerException
>       at
> org.apache.camel.util.CaseInsensitiveMap.entrySet(CaseInsensitiveMap.java:136)
>       at
> org.apache.camel.util.CaseInsensitiveMap.putAll(CaseInsensitiveMap.java:86)
>       at 
> org.apache.camel.component.jms.JmsMessage.copyFrom(JmsMessage.java:77)
>       at
> org.apache.camel.util.ExchangeHelper.copyResults(ExchangeHelper.java:200)
>       at org.apache.camel.processor.Pipeline.process(Pipeline.java:128)
>       at
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:99)
>       at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70)
>       at
> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
>       at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
>       at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68)
>       at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:91)
>       at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:85)
>       at
> org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:84)
>       ... 9 more
> [aultMessageListenerContainer-1] efaultMessageListenerContainer WARN 
> Execution of JMS message listener failed
> org.apache.camel.RuntimeCamelException: java.lang.NullPointerException
>       at
> org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1126)
>       at
> org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:129)
>       at
> org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:543)
>       at
> org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:482)
>       at
> org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:451)
>       at
> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:323)
>       at
> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:261)
>       at
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:982)
>       at
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:974)
>       at
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:876)
>       at java.lang.Thread.run(Thread.java:619)
> Caused by: java.lang.NullPointerException
>       at
> org.apache.camel.util.CaseInsensitiveMap.entrySet(CaseInsensitiveMap.java:136)
>       at
> org.apache.camel.util.CaseInsensitiveMap.putAll(CaseInsensitiveMap.java:86)
>       at 
> org.apache.camel.component.jms.JmsMessage.copyFrom(JmsMessage.java:77)
>       at
> org.apache.camel.util.ExchangeHelper.copyResults(ExchangeHelper.java:200)
>       at org.apache.camel.processor.Pipeline.process(Pipeline.java:128)
>       at
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:99)
>       at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70)
>       at
> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
>       at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
>       at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68)
>       at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:91)
>       at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:85)
>       at
> org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:84)
>       ... 9 more
> 
> 
> 
> 
> [hread 0 - Resequencer Delivery] DefaultErrorHandler            ERROR
> Failed delivery for exchangeId:
> ID:RSI-KAU-RROLND-4982-1278556112753-0:0:1:1:9054. Exhausted after
> delivery attempt: 1 caught: java.util.ConcurrentModificationException
> java.util.ConcurrentModificationException
>       at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
>       at java.util.HashMap$KeyIterator.next(HashMap.java:828)
>       at
> org.apache.camel.util.CaseInsensitiveMap.putAll(CaseInsensitiveMap.java:86)
>       at 
> org.apache.camel.component.jms.JmsMessage.copyFrom(JmsMessage.java:77)
>       at
> org.apache.camel.processor.UnmarshalProcessor.process(UnmarshalProcessor.java:49)
>       at
> org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsyncProcessorBridge.process(AsyncProcessorTypeConverter.java:50)
>       at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70)
>       at
> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
>       at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
>       at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68)
>       at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70)
>       at
> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
>       at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
>       at
> org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:99)
>       at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70)
>       at
> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
>       at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
>       at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68)
>       at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70)
>       at
> org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:284)
>       at
> org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:199)
>       at
> org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:256)
>       at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70)
>       at org.apache.camel.processor.Pipeline.process(Pipeline.java:143)
>       at org.apache.camel.processor.Pipeline.process(Pipeline.java:78)
>       at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:91)
>       at org.apache.camel.processor.Pipeline.process(Pipeline.java:58)
>       at
> org.apache.camel.processor.StreamResequencer.sendElement(StreamResequencer.java:165)
>       at
> org.apache.camel.processor.StreamResequencer.sendElement(StreamResequencer.java:61)
>       at
> org.apache.camel.processor.resequencer.ResequencerEngine.deliverNext(ResequencerEngine.java:254)
>       at
> org.apache.camel.processor.resequencer.ResequencerEngine.deliver(ResequencerEngine.java:218)
>       at
> org.apache.camel.processor.StreamResequencer$Delivery.run(StreamResequencer.java:212)
> 
> 

-- 
View this message in context: 
http://camel.465427.n5.nabble.com/Resequence-Stream-ConcurrentModificationException-tp524555p1044945.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to