开发者

What means "No such channel"-Exception in Apache ODE?

开发者 https://www.devze.com 2023-04-06 12:10 出处:网络
I have multiple BPEL-processes which runs fine on WSO2 (version 2.0.1). But after some time, there appears following exception in the log. I have no clue, what they means nor how to get rid of them.

I have multiple BPEL-processes which runs fine on WSO2 (version 2.0.1). But after some time, there appears following exception in the log. I have no clue, what they means nor how to get rid of them.

Here is a snippet of the stacktrace:

[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$Serv开发者_如何学PythonerRunnable.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)

This the complete stacktrace from one of these exceptions. The errors seems to have no influence on the actual running processes, because the all do what the should. Can this be a configuration problem of my WSO2/ODE-Instance? Maybe it is a thread-pool-problem?!

Any help or hint would be great, thanks!


We were able to identify one issue that was causing the java.lang.IllegalArgumentException: No such channel; You can find the from following jira. https://wso2.org/jira/browse/BPS-218

These will be incorporated into the new releases.


From the logs, this is not a configuration issue but rather an internal bug. For some reason, the navigator receives a timer event (did you use <pick>s with onAlarm and/or event handlers?) but the callback channel for this timer does not exist (anymore). I could imagine such timers are scheduled but not removed when when the process instance is completed. Later when the timer is triggered the path to target activity is not available. This is just guess work but fits to your description. I only know the ODE and ODE 2.0-experimental code base and not much about WSO2's customizations so I'd suggest to file a bug in their JIRA.


we ran into the same problem. We could nail it down and explore it with a small process example. See thread 17451 on the forum of wso2.org (http://wso2.org/forum/thread/17451).

A workaround might be to use a Timer instead of onAlarm. Remove the onAlarm and put a Timer activity in parallel to the pick activity. Wrap the pick and timer activity into a Scope and attach an exception handler to it. There's nothing to do in the exception handler, it just causes the engine to cancel all activities within the scope, including the timer (unfortunatley, an onAlarm is not cancelled).

Throw an exception whenever you want to cancel the timer and also in the activity-path of the timer to make the bpel engine get out of the (parallel) pick activity. A problem that might happen: The timer (i.e. the former onAlarm) could fire while the engine is not waiting in the pick-activity, but executing a regular onMessage before the exception fired...

0

精彩评论

暂无评论...
验证码 换一张
取 消