NPE using Switchyard BPM with jca and peristence
jachym.culka Feb 20, 2014 8:21 AMHi, I'm having trouble with SY BPM component with enabled persistence. I'm getting NPE thrown in BPM internal org.drools.persistence.SingleSessionCommandService class
at org.drools.persistence.SingleSessionCommandService$TransactionInterceptor.execute(SingleSessionCommandService.java:515) [drools-persistence-jpa-6.0.0.CR5.jar:6.0.0.CR5] [full stack trace bellow]:
This issue can be simulated by signaling on nonexisting correlationKey on a freshly deployed sy app through JCA (ActiveMQ) transacted binding. I've noticed that once the process is successfully called and its state is stored, subsequent requests seem to be handled correctly. Problem seem to occur only when there is active transaction before BPM component is called, when the component is called through rest binding or JCA binding with disabled transactions it behaves as I'd expect (getting Cannot signalEvent: unknown processInstanceId or unknown/unmatched correlationKey: org.switchyard.HandlerException).
I've also tried to change SimpleProcessService transaction policy from propagatesTransaction to suspendTransaction both with managedTransaction.Global on bpm impl, but result remained the same.
I've encountered this issue in one of our larger sy modules but the same problem can be simulated with a simple SY app which is included. Any help greatly appreciated.
Platform on which I tested: EAP 6.1.0.Alpha + SY 1.1 + ActiveMQ 5.9 JCA resource, with adapter named activemq-ra.rar.
To signal the process, insert json object in the format below into the ActiveMQ In.SimpleServiceSignalQueue.
To start the process, use In.SimpleServiceStartQueue.
{ | "correlationKey": "xxxzzz" } |
Thanks
JC
15:38:49,321 ERROR [org.switchyard.bus.camel.DefaultErrorListener] (default-threads - 9)
------- Begin Message Trace -------
Consumer -> {urn:beei:jbpm-tester:1.0}SimplePromotedService
Provider -> {urn:beei:jbpm-tester:1.0}SimplePromotedService
Operation -> process
MEP -> IN_ONLY
Phase -> IN
State -> OK
Exchange Context ->
CamelCreatedTimestamp ...............................: Wed Feb 19 15:38:49 CET 2014
CamelExceptionCaught ................................: java.lang.NullPointerException
CamelFailureEndpoint ................................: direct://%7Burn:beei:jbpm-tester:1.0%7DSimplePromotedService
CamelFilterMatched ..................................: false
CamelToEndpoint .....................................: direct://%7Burn:beei:jbpm-tester:1.0%7DSimplePromotedService
org.switchyard.bus.camel.consumer ...................: ServiceReference [name={urn:beei:jbpm-tester:1.0}SimplePromotedService, interface=SWITCHYARD010007: BaseServiceInterface [type=java, operations=[SWITCHYARD010008: process : IN_ONLY : [{beei:bt}Action.json, null, null], SWITCHYARD010008: acceptData : IN_ONLY : [{beei:bt}Data.json, null, null]]], domain=ServiceDomain [name=null]]
org.switchyard.bus.camel.contract ...................: org.switchyard.metadata.BaseExchangeContract@292a6ae9
org.switchyard.bus.camel.dispatcher .................: org.switchyard.bus.camel.ExchangeDispatcher@59e5a7bf
org.switchyard.bus.camel.intercept.Consumer .........: before
org.switchyard.bus.camel.intercept.Provider .........: before
org.switchyard.bus.camel.labels .....................: {org.switchyard.exchangeGatewayName=[org.switchyard.label.behavior.transient], org.switchyard.exchangeInitiatedNS=[org.switchyard.label.behavior.transient], org.switchyard.policy.provided=[org.switchyard.label.behavior.transient], org.switchyard.exchange.transaction.beforeInvoked=[org.switchyard.label.behavior.transient]}
org.switchyard.bus.camel.phase ......................: IN
org.switchyard.bus.camel.provider ...................: Service [name={urn:beei:jbpm-tester:1.0}SimplePromotedService, interface=SWITCHYARD010007: BaseServiceInterface [type=java, operations=[SWITCHYARD010008: process : IN_ONLY : [java:net.servodata.beei.data.Action, null, null], SWITCHYARD010008: acceptData : IN_ONLY : [java:net.servodata.beei.data.Data, null, null]]], domain=ServiceDomain [name=null], metadata=org.switchyard.metadata.ServiceMetadataBuilder$ServiceMetadataImpl@13cdb240]
org.switchyard.exchange.transaction.beforeInvoked ...: true
org.switchyard.exchangeGatewayName ..................: processBinding
org.switchyard.exchangeInitiatedNS ..................: 440445088980562
org.switchyard.policy.provided ......................: [propagatesTransaction, managedTransaction.Global]
{urn:switchyard-component-bpm:bpm:1.0}correlationKey : kkk1-a
Message Context ->
breadcrumbId ..............................: ID-jachymculka-dl-63931-1392820688180-4-19
org.switchyard.bus.camel.labels ...........: {org.switchyard.contentType=[org.switchyard.label.behavior.transient], org.switchyard.bus.camel.messageSent=[org.switchyard.label.behavior.transient], org.switchyard.transform.TransformSequence=[org.switchyard.label.behavior.transient]}
org.switchyard.bus.camel.messageSent ......: true
org.switchyard.contentType ................: java:net.servodata.beei.data.Action
org.switchyard.messageId ..................: ID-jachymculka-dl-63931-1392820688180-4-19
org.switchyard.transform.TransformSequence : org.switchyard.transform.TransformSequence@5157a295
------ End Message Trace -------
Caught exception of type java.lang.NullPointerException with message: null: java.lang.NullPointerException
at org.drools.persistence.SingleSessionCommandService$TransactionInterceptor.execute(SingleSessionCommandService.java:515) [drools-persistence-jpa-6.0.0.CR5.jar:6.0.0.CR5]
at org.drools.persistence.SingleSessionCommandService.execute(SingleSessionCommandService.java:374) [drools-persistence-jpa-6.0.0.CR5.jar:6.0.0.CR5]
at org.drools.core.command.impl.CommandBasedStatefulKnowledgeSession.addEventListener(CommandBasedStatefulKnowledgeSession.java:460) [drools-core-6.0.0.CR5.jar:6.0.0.CR5]
at org.switchyard.component.common.knowledge.util.Listeners.registerListener(Listeners.java:182)
at org.switchyard.component.bpm.exchange.BPMExchangeHandler.getBPMSession(BPMExchangeHandler.java:303) [switchyard-component-bpm-1.1.0.Final.jar:1.1.0.Final]
at org.switchyard.component.bpm.exchange.BPMExchangeHandler.handleOperation(BPMExchangeHandler.java:222) [switchyard-component-bpm-1.1.0.Final.jar:1.1.0.Final]
at org.switchyard.component.common.knowledge.exchange.KnowledgeExchangeHandler.handleMessage(KnowledgeExchangeHandler.java:253)
at org.switchyard.bus.camel.processors.ProviderProcessor.process(ProviderProcessor.java:29) [switchyard-bus-camel-1.1.0.Final.jar:1.1.0.Final]
at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:73) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:91) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) [camel-core-2.10.3.jar:2.10.3]
at org.switchyard.bus.camel.audit.FaultProcessor.process(FaultProcessor.java:46) [switchyard-bus-camel-1.1.0.Final.jar:1.1.0.Final]
at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:45) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.interceptor.DefaultChannel.process(DefaultChannel.java:303) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.Pipeline.process(Pipeline.java:117) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.Pipeline.process(Pipeline.java:80) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.TryProcessor.process(TryProcessor.java:104) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.TryProcessor.process(TryProcessor.java:78) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:73) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:91) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) [camel-core-2.10.3.jar:2.10.3]
at org.switchyard.bus.camel.audit.FaultProcessor.process(FaultProcessor.java:46) [switchyard-bus-camel-1.1.0.Final.jar:1.1.0.Final]
at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:45) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.interceptor.DefaultChannel.process(DefaultChannel.java:303) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:45) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:122) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.RouteInflightRepositoryProcessor.processNext(RouteInflightRepositoryProcessor.java:48) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:73) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:61) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:150) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:117) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:99) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:86) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.processor.UnitOfWorkProducer.process(UnitOfWorkProducer.java:63) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:366) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:337) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:233) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:337) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:159) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:106) [camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:92) [camel-core-2.10.3.jar:2.10.3]
at org.switchyard.bus.camel.ExchangeDispatcher.dispatch(ExchangeDispatcher.java:87) [switchyard-bus-camel-1.1.0.Final.jar:1.1.0.Final]
at org.switchyard.bus.camel.CamelExchange.sendInternal(CamelExchange.java:234) [switchyard-bus-camel-1.1.0.Final.jar:1.1.0.Final]
at org.switchyard.bus.camel.CamelExchange.send(CamelExchange.java:171) [switchyard-bus-camel-1.1.0.Final.jar:1.1.0.Final]
at org.switchyard.component.jca.endpoint.JMSEndpoint.onMessage(JMSEndpoint.java:49) [switchyard-component-jca-1.1.0.Final.jar:1.1.0.Final]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_07]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_07]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_07]
at java.lang.reflect.Method.invoke(Method.java:601) [rt.jar:1.7.0_07]
at org.switchyard.component.jca.EndpointProxy.delivery(EndpointProxy.java:194) [switchyard-component-jca-1.1.0.Final.jar:1.1.0.Final]
at org.switchyard.component.jca.EndpointProxy.invoke(EndpointProxy.java:159) [switchyard-component-jca-1.1.0.Final.jar:1.1.0.Final]
at $Proxy160.onMessage(Unknown Source) at org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointAlive.onMessage(MessageEndpointProxy.java:123)
at org.apache.activemq.ra.MessageEndpointProxy.onMessage(MessageEndpointProxy.java:64)
at org.apache.activemq.ActiveMQSession.run(ActiveMQSession.java:916)
at org.apache.activemq.ra.ServerSessionImpl.run(ServerSessionImpl.java:169)
at org.jboss.jca.core.workmanager.WorkWrapper.run(WorkWrapper.java:218)
at org.jboss.threads.SimpleDirectExecutor.execute(SimpleDirectExecutor.java:33)
at org.jboss.threads.QueueExecutor.runTask(QueueExecutor.java:806)
at org.jboss.threads.QueueExecutor.access$100(QueueExecutor.java:45)
at org.jboss.threads.QueueExecutor$Worker.run(QueueExecutor.java:826)
at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_07]
at org.jboss.threads.JBossThread.run(JBossThread.java:122)
Source codes added
-
bpmn-demo-jb.zip 14.4 KB