2013-03-26 40 views
1

我正在使用wso2 bps 2.1.2來運行簡單的bpel進程,並在循環中逐個調用樹調用。循環大約有一百次。問題在於有時進程在運行狀態下掛起。在日誌中,我收到錯誤:Wso2 BPS:沒有這樣的通道錯誤

[2013-03-25 14:44:17,897] ERROR - BpelEngineImpl - Scheduled job failed; jobDetail=JobDetails(instanceId: 14109433 mexId: null processId: null type: TIMER channel: 11513 correlatorId: null correlationKeySet: null retryCount: null inMem: false detailsExt: {}) 
java.lang.IllegalArgumentException: No such channel; id=11513 
    at org.apache.ode.jacob.vpu.ExecutionQueueImpl.findChannelFrame(ExecutionQueueImpl.java:205) 
    at org.apache.ode.jacob.vpu.ExecutionQueueImpl.consumeExport(ExecutionQueueImpl.java:232) 
    at org.apache.ode.jacob.vpu.JacobVPU$JacobThreadImpl.importChannel(JacobVPU.java:369) 
    at org.apache.ode.jacob.JacobObject.importChannel(JacobObject.java:47) 
    at org.apache.ode.bpel.engine.BpelRuntimeContextImpl$5.run(BpelRuntimeContextImpl.java:964) 
    at sun.reflect.GeneratedMethodAccessor44.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 
    at java.lang.reflect.Method.invoke(Method.java:611) 
    at org.apache.ode.jacob.vpu.JacobVPU$JacobThreadImpl.run(JacobVPU.java:451) 
    at org.apache.ode.jacob.vpu.JacobVPU.execute(JacobVPU.java:139) 
    at org.apache.ode.bpel.engine.BpelRuntimeContextImpl.execute(BpelRuntimeContextImpl.java:879) 
    at org.apache.ode.bpel.engine.BpelRuntimeContextImpl.timerEvent(BpelRuntimeContextImpl.java:968) 
    at org.apache.ode.bpel.engine.BpelProcess.handleJobDetails(BpelProcess.java:478) 
    at org.apache.ode.bpel.engine.BpelEngineImpl.onScheduledJob(BpelEngineImpl.java:560) 
    at org.apache.ode.bpel.engine.BpelServerImpl.onScheduledJob(BpelServerImpl.java:445) 
    at org.apache.ode.scheduler.simple.SimpleScheduler$RunJob$1.call(SimpleScheduler.java:537) 
    at org.apache.ode.scheduler.simple.SimpleScheduler$RunJob$1.call(SimpleScheduler.java:531) 
    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:531) 
    at org.apache.ode.scheduler.simple.SimpleScheduler$RunJob.call(SimpleScheduler.java:515) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:149) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919) 
    at java.lang.Thread.run(Thread.java:738) 

我找不到有關此錯誤的任何有用信息。我正在使用oracle數據庫。我試圖修改bps.xml:

<tns:OpenJPAConfig> 
    <tns:property name="openjpa.FlushBeforeQueries" value="true"/> 
    <!-- added this line as for https://wso2.org/jira/browse/CARBON-7500 (use also Oracle 11g Driver!!) --> 
    <tns:property name="openjpa.jdbc.DBDictionary" value="oracle(batchLimit=0)"/> 
</tns:OpenJPAConfig> 

但是這並沒有幫助。

過程是非常簡單,它看起來像這樣:

<forEach counterName="count" parallel="no" > 

    < doXslTransform …> 
    <wait 1s> 
    <invoke ...> 

    <doXslTransform …> 
    <wait 1s> 
    <invoke ...> 

    < doXslTransform …> 
    <wait 1s> 
    <invoke ...> 
</forEach> 

我該如何解決「沒有這樣的通道」的錯誤?

謝謝Tomek

回答

0

我從過程中移出等待,一切都沒有開始工作的問題。似乎在WSO2 BPS 2.1.2中有< wait>活動存在一些錯誤。在BPS 3.0.0中,接口處於等待狀態。

1

我們發現了一個導致此問題並修復它的問題。這是由於在嵌入BPS的頌歌運行時中缺少流程實例鎖。我們發現了這個問題並修復了它。

https://issues.apache.org/jira/browse/ODE-989

https://wso2.org/jira/browse/BPS-218

如果您可以將您的示例場景連接到JIRA,這將有助於我們增加一個測試用例。此修復程序已在中繼中提供,並將在下一個版本中提供。

問候 Nandika

+0

我看到了這個問題。我將補丁從我的補丁中移除到我的bps,但沒有任何結果。正如您在989號問題的堆棧跟蹤中看到的那樣,它涉及到類PartnerLinkMyRoleImpl,而不是在我的堆棧跟蹤中調用。所以它有些不同。我的過程中的循環重複約100次。在大約50%的情況下,成功的情況下,它會在日誌中掛起錯誤。 – Kendzi 2013-03-26 18:10:21

+0

我已經從流程中刪除了等待,所有事情都毫無問題地開始工作。看來在活動中有一些錯誤。 – Kendzi 2013-03-27 21:25:21