1

WSO2(バージョン2.0.1)で正常に実行される複数のBPELプロセスがあります。しかし、しばらくすると、ログに次の例外が表示されます。私には、それらが何を意味するのか、そしてそれらを取り除く方法についての手がかりがありません。

スタックトレースのスニペットは次のとおりです。

[2011-10-05 11:28:26,541] ERROR -  Method "run" in class "org.apache.ode.bpel.rtrep.v2.RuntimeInstanceImpl$3" threw an unexpected exception. {org.apache.ode.jacob.vpu.JacobVPU}
java.lang.IllegalArgumentException: No such channel; id=71
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.rtrep.v2.RuntimeInstanceImpl$3.run(RuntimeInstanceImpl.java:627)
at sun.reflect.GeneratedMethodAccessor41.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
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.rtrep.v2.RuntimeInstanceImpl.execute(RuntimeInstanceImpl.java:639)
at org.apache.ode.bpel.engine.BpelRuntimeContextImpl.execute(BpelRuntimeContextImpl.java:618)
at org.apache.ode.bpel.engine.ODEProcess.executeContinueInstanceTimerReceived(ODEProcess.java:476)
at org.apache.ode.bpel.engine.ODEProcess.execInstanceEvent(ODEProcess.java:684)
at org.apache.ode.bpel.engine.ODEProcess.access$000(ODEProcess.java:105)
at org.apache.ode.bpel.engine.ODEProcess$4.run(ODEProcess.java:619)
at org.apache.ode.bpel.engine.Contexts$1.call(Contexts.java:86)
at org.apache.ode.bpel.engine.Contexts$1.call(Contexts.java:85)
at org.apache.ode.bpel.engine.Contexts.execTransaction(Contexts.java:106)
at org.apache.ode.bpel.engine.Contexts.execTransaction(Contexts.java:83)
at org.apache.ode.bpel.engine.BpelServerImpl$TransactedRunnable.run(BpelServerImpl.java:893)
at org.apache.ode.bpel.engine.BpelInstanceWorker$2.call(BpelInstanceWorker.java:143)
at org.apache.ode.bpel.engine.BpelInstanceWorker$2.call(BpelInstanceWorker.java:142)
at org.apache.ode.bpel.engine.BpelInstanceWorker.doInstanceWork(BpelInstanceWorker.java:174)
at org.apache.ode.bpel.engine.BpelInstanceWorker.run(BpelInstanceWorker.java:141)
at org.apache.ode.bpel.engine.ODEProcess$ProcessRunnable.run(ODEProcess.java:1290)
at org.apache.ode.bpel.engine.BpelServerImpl$ServerRunnable.run(BpelServerImpl.java:839)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
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)

これは、これらの例外の1つからの完全なスタックトレースです。エラーは実際に実行中のプロセスに影響を与えないようです。すべてが必要なことを実行するからです。これは私のWSO2/ODE-Instanceの構成の問題である可能性がありますか?多分それはスレッドプールの問題ですか?!

どんな助けやヒントも素晴らしいでしょう、ありがとう!

4

3 に答える 3

1

ログから、これは構成の問題ではなく、内部のバグです。何らかの理由で、ナビゲーターはタイマーイベントを受信しますが(および/またはイベントハンドラー<pick>でsを使用しonAlarmましたか?)、このタイマーのコールバックチャネルは(もう)存在しません。このようなタイマーはスケジュールされていますが、プロセスインスタンスが完了したときに削除されないことを想像できます。後でタイマーがトリガーされると、ターゲットアクティビティへのパスは使用できなくなります。これは単なる推測作業ですが、あなたの説明に適合します。私はODEとODE2.0のみを知っています-実験的なコードベースであり、WSO2のカスタマイズについてはあまり知らないので、JIRAにバグを報告することをお勧めします。

于 2011-10-06T14:47:16.157 に答える
1

java.lang.IllegalArgumentExceptionを引き起こしている1つの問題を特定することができました:そのようなチャネルはありません。次のjiraから見つけることができます。 https://wso2.org/jira/browse/BPS-218

これらは新しいリリースに組み込まれます。

于 2013-02-21T05:00:13.833 に答える
0

同じ問題が発生しました。私たちはそれを釘付けにして、小さなプロセスの例でそれを探求することができます。wso2.orgのフォーラム( http://wso2.org/forum/thread/17451 )のスレッド17451を参照してください。

回避策は、onAlarmの代わりにタイマーを使用することです。を削除しonAlarmタイマーアクティビティをピックアクティビティと並行して配置します。ピックとタイマーのアクティビティをスコープにラップし、それに例外ハンドラーをアタッチします。例外ハンドラーでは何もする必要はありません。タイマーを含むスコープ内のすべてのアクティビティをエンジンがキャンセルするだけです(残念ながら、onAlarmキャンセルされません)。

タイマーをキャンセルする場合、およびタイマーのアクティビティパスで例外をスローして、 bpelエンジンが(並列)ピ​​ックアクティビティから抜け出すようにします。発生する可能性のある問題:タイマー(つまり前者onAlarm)は、エンジンがで待機していないときに起動する可能性がありますが、例外が発生する前にpick-activity通常の実行を実行します...onMessage

于 2011-10-14T12:48:22.857 に答える