camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claus Ibsen <claus.ib...@gmail.com>
Subject Re: DataSet header {CamelDataSetIndex=0} causes failure
Date Tue, 24 Nov 2009 05:42:52 GMT
Hi

Thanks a lot for your findings.

I have created a ticket
https://issues.apache.org/activemq/browse/CAMEL-2215

And will commit a fix in short time.
Feel free to try with latest code.


On Tue, Nov 24, 2009 at 1:54 AM, tide08 <sachin2_2k@yahoo.com> wrote:
>
> So looks like CaseInsensitiveMap is not serializable :(
>
> Map.Entry is non-serializable and so java.util.HashMap defines those as
> transient so that serialization of that member does not happen. So
> CaseInsenstiveMap should also define its member "entrySetView" as transient
> or if it needs to be serialized CaseInsenstiveMap should implement
> writeObject()/readObject().
>
> Here is the unit test which fails on serialization:
>
> @Test
>    public void testInsensitiveMapSerialization() throws IOException,
> ClassNotFoundException {
>        CaseInsensitiveMap testMap = new CaseInsensitiveMap();
>        testMap.put("key", "value");
>        testMap.entrySet();
>
>        ByteArrayOutputStream bStream = new ByteArrayOutputStream();
>
>        ObjectOutputStream objStream = new ObjectOutputStream(bStream);
>        objStream.writeObject(testMap);
>
>        ObjectInputStream inStream = new ObjectInputStream(new
> ByteArrayInputStream(bStream.toByteArray()));
>        CaseInsensitiveMap testMapCopy = (CaseInsensitiveMap)
> inStream.readObject();
>
>        Assert.assertTrue(testMapCopy.containsKey("key"));
>    }
>
>
>
> tide08 wrote:
>>
>> I have soak test with following route and it seems to fail with following
>> error. I am using camel 2.1-SNAPSHOT.
>>
>> I am not sure why that happens -
>>
>> <route>
>>           <from uri="dataset:messageDataSet?produceDelay=10"/>
>>           <to uri="proxySender" />
>> </route>
>> <route>
>>           <from uri="activemq:testQueue"/>
>>           <to uri="dataset:messageDataSet?produceDelay=10"/>
>> </route>
>>
>> ProxySender instead is just a custom processor which uses camelTemplate
>> and camel-jms to send message to "activemq:testQueue" on a standalone
>> broker.
>>
>> I tried using the proxySender without using DataSet and it seems to work
>> just fine. But when used with DataSet it seems to fail while storing
>> message (ActiveMQObjectMessage.storeContent() ) - DataSet header
>> {CamelDataSetIndex=0}. CaseInsensitiveMap fails to serialize?
>>
>> Any ideas on what may be wrong?
>>
>> Thread Stack:
>>
>> Daemon Thread [Camel thread 0: DataSetComponent] (Suspended)
>>       ActiveMQObjectMessage.storeContent() line: 104
>>       ActiveMQObjectMessage.setObject(Serializable) line: 155
>>       ActiveMQSession.createObjectMessage(Serializable) line: 325
>>       PooledSession.createObjectMessage(Serializable) line: 149
>>       JmsBinding.createJmsMessage(Exchange, Object, Map<String,Object>,
>> Session, CamelContext) line: 489
>>       JmsBinding.makeJmsMessage(Exchange, Message, Session, Exception) line:
>> 277
>>       JmsProducer$2.createMessage(Session) line: 316
>>       JmsConfiguration$CamelJmsTemplate.doSendToDestination(Destination,
>> MessageCreator, JmsConfiguration$MessageSentCallback, Session) line: 221
>>
>> JmsConfiguration$CamelJmsTemplate.access$100(JmsConfiguration$CamelJmsTemplate,
>> Destination, MessageCreator, JmsConfiguration$MessageSentCallback,
>> Session) line: 164
>>       JmsConfiguration$CamelJmsTemplate$3.doInJms(Session) line: 198
>>       JmsConfiguration$CamelJmsTemplate(JmsTemplate).execute(SessionCallback,
>> boolean) line: 471
>>       JmsConfiguration$CamelJmsTemplate.send(String, MessageCreator) line: 195
>>       JmsProducer.doSend(boolean, String, Destination, MessageCreator,
>> DeferredRequestReplyMap$DeferredMessageSentCallback) line: 375
>>       JmsProducer.processInOnly(Exchange) line: 320
>>       JmsProducer.process(Exchange) line: 150
>>       ProducerCache$1.doInProducer(Producer, Exchange, ExchangePattern) line:
>> 179
>>       ProducerCache$1.doInProducer(Producer, Exchange, ExchangePattern) line:
>> 161
>>       ProducerCache.doInProducer(Endpoint, Exchange, ExchangePattern,
>> ProducerCallback<T>) line: 146
>>       ProducerCache.sendExchange(Endpoint, ExchangePattern, Processor,
>> Exchange) line: 160
>>       ProducerCache.send(Endpoint, Processor) line: 98
>>       DefaultProducerTemplate.send(Endpoint, Processor) line: 97
>>       DefaultProducerTemplate.sendBodyAndHeaders(Endpoint, Object,
>> Map<String,Object>) line: 206
>>       DefaultProducerTemplate.sendBodyAndHeaders(String, Object,
>> Map<String,Object>) line: 202
>>       JmsMessageServiceImpl.send(Message...) line: 60
>>       ProxySendProcessor.process(Exchange) line: 17
>>       ProcessorEndpoint.onExchange(Exchange) line: 95
>>       ProcessorEndpoint$1.process(Exchange) line: 65
>>       SendProcessor$1.doInProducer(Producer, Exchange, ExchangePattern) line:
>> 97
>>       SendProcessor$1.doInProducer(Producer, Exchange, ExchangePattern) line:
>> 95
>>       ProducerCache.doInProducer(Endpoint, Exchange, ExchangePattern,
>> ProducerCallback<T>) line: 146
>>       SendProcessor.doProcess(Exchange) line: 94
>>       SendProcessor.process(Exchange) line: 82
>>       InstrumentationProcessor.process(Exchange) line: 67
>>       TraceInterceptor(DelegateProcessor).processNext(Exchange) line: 53
>>       TraceInterceptor(DelegateProcessor).proceed(Exchange) line: 82
>>       TraceInterceptor.process(Exchange) line: 93
>>       InstrumentationProcessor.process(Exchange) line: 67
>>       DefaultErrorHandler(RedeliveryErrorHandler).processExchange(Exchange)
>> line: 223
>>       DefaultErrorHandler(RedeliveryErrorHandler).processErrorHandler(Exchange,
>> RedeliveryErrorHandler$RedeliveryData) line: 153
>>       DefaultErrorHandler(RedeliveryErrorHandler).process(Exchange) line: 91
>>       DefaultErrorHandler.process(Exchange) line: 49
>>       DefaultChannel.process(Exchange) line: 206
>>       UnitOfWorkProcessor.processNext(Exchange) line: 54
>>       UnitOfWorkProcessor(DelegateProcessor).process(Exchange) line: 48
>>       InstrumentationProcessor.process(Exchange) line: 67
>>       DataSetConsumer.sendMessages(long, long) line: 70
>>       DataSetConsumer$1.run() line: 61
>>       Executors$RunnableAdapter<T>.call() line: 441
>>       FutureTask$Sync.innerRun() line: 303
>>       ScheduledThreadPoolExecutor$ScheduledFutureTask<V>(FutureTask<V>).run()
>> line: 138
>>
>> ScheduledThreadPoolExecutor$ScheduledFutureTask<V>.access$301(ScheduledThreadPoolExecutor$ScheduledFutureTask)
>> line: 98
>>       ScheduledThreadPoolExecutor$ScheduledFutureTask<V>.run() line: 207
>>       ThreadPoolExecutor$Worker.runTask(Runnable) line: 886
>>       ThreadPoolExecutor$Worker.run() line: 908
>>       Thread.run() line: 637
>>
>>
>> Error StackTrace:
>>
>> [java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156),
>> java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326),
>> java.util.HashSet.writeObject(HashSet.java:267),
>> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39),
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25),
>> java.lang.reflect.Method.invoke(Method.java:597),
>> java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945),
>> java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1461),
>> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392),
>> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150),
>> java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509),
>> java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474),
>> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392),
>> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150),
>> java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509),
>> java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474),
>> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392),
>> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150),
>> java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326),
>> org.apache.activemq.command.ActiveMQObjectMessage.storeContent(ActiveMQObjectMessage.java:98),
>> org.apache.activemq.command.ActiveMQObjectMessage.setObject(ActiveMQObjectMessage.java:155),
>> org.apache.activemq.ActiveMQSession.createObjectMessage(ActiveMQSession.java:325),
>> org.apache.activemq.pool.PooledSession.createObjectMessage(PooledSession.java:149),
>> org.apache.camel.component.jms.JmsBinding.createJmsMessage(JmsBinding.java:489),
>> org.apache.camel.component.jms.JmsBinding.makeJmsMessage(JmsBinding.java:277),
>> org.apache.camel.component.jms.JmsProducer$2.createMessage(JmsProducer.java:316),
>> org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate.doSendToDestination(JmsConfiguration.java:221),
>> org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate.access$100(JmsConfiguration.java:164),
>> org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate$3.doInJms(JmsConfiguration.java:198),
>> org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:471),
>> org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate.send(JmsConfiguration.java:195),
>> org.apache.camel.component.jms.JmsProducer.doSend(JmsProducer.java:375),
>> org.apache.camel.component.jms.JmsProducer.processInOnly(JmsProducer.java:320),
>> org.apache.camel.component.jms.JmsProducer.process(JmsProducer.java:150),
>> org.apache.camel.impl.ProducerCache$1.doInProducer(ProducerCache.java:179),
>> org.apache.camel.impl.ProducerCache$1.doInProducer(ProducerCache.java:161),
>> org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:146),
>> org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:160),
>> org.apache.camel.impl.ProducerCache.send(ProducerCache.java:98),
>> org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:97),
>> org.apache.camel.impl.DefaultProducerTemplate.sendBodyAndHeaders(DefaultProducerTemplate.java:206),
>> org.apache.camel.impl.DefaultProducerTemplate.sendBodyAndHeaders(DefaultProducerTemplate.java:202),
>> com.citrix.message.service.jms.JmsMessageServiceImpl.send(JmsMessageServiceImpl.java:60),
>> com.citrix.message.ProxySendProcessor.process(ProxySendProcessor.java:17),
>> org.apache.camel.impl.ProcessorEndpoint.onExchange(ProcessorEndpoint.java:95),
>> org.apache.camel.impl.ProcessorEndpoint$1.process(ProcessorEndpoint.java:65),
>> org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:97),
>> org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:95),
>> org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:146),
>> org.apache.camel.processor.SendProcessor.doProcess(SendProcessor.java:94),
>> org.apache.camel.processor.SendProcessor.process(SendProcessor.java:82),
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67),
>> org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:53),
>> org.apache.camel.processor.DelegateProcessor.proceed(DelegateProcessor.java:82),
>> org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:93),
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67),
>> org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:223),
>> org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:153),
>> org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:91),
>> org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49),
>> org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:206),
>> org.apache.camel.processor.UnitOfWorkProcessor.processNext(UnitOfWorkProcessor.java:54),
>> org.apache.camel.processor.DelegateProcessor.process(DelegateProcessor.java:48),
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67),
>> org.apache.camel.component.dataset.DataSetConsumer.sendMessages(DataSetConsumer.java:70),
>> org.apache.camel.component.dataset.DataSetConsumer$1.run(DataSetConsumer.java:61),
>> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441),
>> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303),
>> java.util.concurrent.FutureTask.run(FutureTask.java:138),
>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98),
>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:207),
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886),
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908),
>> java.lang.Thread.run(Thread.java:637)]
>>
>
> --
> View this message in context: http://old.nabble.com/DataSet-header-%7BCamelDataSetIndex%3D0%7D-causes-failure-tp26487985p26488848.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>



-- 
Claus Ibsen
Apache Camel Committer

Author of Camel in Action: http://www.manning.com/ibsen/
Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus

Mime
View raw message