ode-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hudson (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (ODE-894) BPEL with <pick> followed by <invoke> fails with NPE when using JPA persistence
Date Sun, 15 Sep 2013 17:47:52 GMT

    [ https://issues.apache.org/jira/browse/ODE-894?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13767865#comment-13767865
] 

Hudson commented on ODE-894:
----------------------------

SUCCESS: Integrated in ODE-1.x #417 (See [https://builds.apache.org/job/ODE-1.x/417/])
ODE-894: messages should be correctly persisted. Thanks to Kurt for the patch. (vanto: rev
6a6b9ca77a8a5b5d88a44e53959af0512b3ccd50)
* dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageExchangeDAOImpl.java

                
> BPEL with <pick> followed by <invoke> fails with NPE when using JPA persistence
> -------------------------------------------------------------------------------
>
>                 Key: ODE-894
>                 URL: https://issues.apache.org/jira/browse/ODE-894
>             Project: ODE
>          Issue Type: Bug
>          Components: BPEL Runtime
>    Affects Versions: 1.3.4
>         Environment: JBI distribution on servicemix 3.3.2
>            Reporter: Kurt Westerfeld
>            Assignee: Tammo van Lessen
>             Fix For: 1.3.6, 1.4
>
>
> We have a bpel process which contains a <pick> followed by a few <assign>
and an <invoke> operation.  When running this process, we can resume the <pick>
but soon afterwards an NPE occurs as in the following stack trace:
> 13:04:04,013 | ERROR | pool-5-thread-1 | SimpleScheduler          | .simple.SimpleScheduler$RunJob
 545 | Error while processing a persisted job: Job hqejbhcnphr5nd9dfp0pnt time: 2010-10-05
13:04:00 EDT transacted: true persisted: true details: JobDetails( instanceId: null mexId:
hqejbhcnphr5nd9dfp0pns processId: {(endpoint-name-removed)-0 type: INVOKE_INTERNAL channel:
null correlatorId: null correlationKeySet: null retryCount: null inMem: false detailsExt:
{})
> org.apache.ode.bpel.iapi.Scheduler$JobProcessorException: java.lang.NullPointerException
> 	at org.apache.ode.bpel.engine.BpelEngineImpl.onScheduledJob(BpelEngineImpl.java:478)
> 	at org.apache.ode.bpel.engine.BpelServerImpl.onScheduledJob(BpelServerImpl.java:450)
> 	at org.apache.ode.scheduler.simple.SimpleScheduler$RunJob$1.call(SimpleScheduler.java:518)
> 	at org.apache.ode.scheduler.simple.SimpleScheduler$RunJob$1.call(SimpleScheduler.java:513)
> 	at org.apache.ode.scheduler.simple.SimpleScheduler.execTransaction(SimpleScheduler.java:284)
> 	at org.apache.ode.scheduler.simple.SimpleScheduler.execTransaction(SimpleScheduler.java:239)
> 	at org.apache.ode.scheduler.simple.SimpleScheduler$RunJob.call(SimpleScheduler.java:512)
> 	at org.apache.ode.scheduler.simple.SimpleScheduler$RunJob.call(SimpleScheduler.java:496)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> 	at java.lang.Thread.run(Thread.java:619)
> Caused by: java.lang.NullPointerException
> 	at org.apache.ode.bpel.engine.MessageImpl.getMessage(MessageImpl.java:104)
> 	at org.apache.ode.bpel.engine.PartnerLinkMyRoleImpl.computeCorrelationKeys(PartnerLinkMyRoleImpl.java:294)
> 	at org.apache.ode.bpel.engine.PartnerLinkMyRoleImpl.findRoute(PartnerLinkMyRoleImpl.java:122)
> 	at org.apache.ode.bpel.engine.BpelProcess.invokeProcess(BpelProcess.java:233)
> 	at org.apache.ode.bpel.engine.BpelProcess.invokeProcess(BpelProcess.java:279)
> 	at org.apache.ode.bpel.engine.BpelProcess.handleJobDetails(BpelProcess.java:426)
> 	at org.apache.ode.bpel.engine.BpelEngineImpl.onScheduledJob(BpelEngineImpl.java:460)
> 	... 12 more
> This problem then continues for a while, while the scheduling and refiring of this job
continues.
> In diagnosing the problem, it was seen that the dao-jpa persistence has an issue in that
the MessageDAOImpl class is never persisted with the MEX that created it.  The NPE occurs
when the internal <pick> resumes on a message exchange that is later scheduled, hydrated
from persistence but the MEX does not contain the "receive" message.
> Specifically, the class org.apache.ode.dao.jpa.MessageExchangeDAOImpl is not doing is
not doing a getEM().persist() on the MessageDAOImpl, and there is no cascading one-to-many
setup to cause the MessageDAOImpl to be persisted.  The hibernate dao does persist the message
in this case, and testing with the hibernate back-end caused the issue to go away.  However,
we are experiencing other "primary constraint" violations with the hibernate back-end, so
we want to use the JPA back-end.
> Here is a minimal patch which we tested which fixes the issue:
>   Index: dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageExchangeDAOImpl.java
>   ===================================================================
>   --- dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageExchangeDAOImpl.java    (revision
997965)
>   +++ dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageExchangeDAOImpl.java    (working
copy)
>   @@ -128,6 +128,7 @@
>        public MessageDAO createMessage(QName type) {
>            MessageDAOImpl ret = new MessageDAOImpl(type,this);
>   +        getEM().persist(ret);
>            return ret ;
>        }
> We do not know whether this patch is the right way to fix this, but it does seem to be
similar to the hibernate back-end. One issue with this minimal change is potentially not having
the MessageDAOImpl cleanup in place--not sure how best to approach that.
> Another approach considered could be to harden the PartnerLinkMyRoleImpl.computeCorrelationKeys
method to ensure it doesn't get an NPE when this message component is missing.  Not sure which
way is best.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message