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)

这是来自这些异常之一的完整堆栈跟踪。这些错误似乎对实际运行的进程没有影响,因为所有这些都做了应该做的事情。这可能是我的 WSO2/ODE-Instance 的配置问题吗?也许这是一个线程池问题?!

任何帮助或提示都会很棒,谢谢!

4

3 回答 3

1

我们能够确定导致 java.lang.IllegalArgumentException 的一个问题:没有这样的通道;您可以从以下 jira 中找到。 https://wso2.org/jira/browse/BPS-218

这些将被合并到新版本中。

于 2013-02-21T05:00:13.833 回答
1

从日志来看,这不是配置问题,而是内部错误。由于某种原因,导航器接收到一个计时器事件(您是否将<pick>s 与onAlarm和/或事件处理程序一起使用?)但此计时器的回调通道不存在(不再存在)。我可以想象这样的计时器在流程实例完成时被安排但不会被删除。稍后当触发计时器时,目标活动的路径不可用。这只是猜测,但符合您的描述。我只知道 ODE 和 ODE 2.0 实验代码库,对 WSO2 的自定义了解不多,所以我建议在他们的 JIRA 中提交错误。

于 2011-10-06T14:47:16.157 回答
0

我们遇到了同样的问题。我们可以通过一个小的流程示例来确定并探索它。请参阅 wso2.org ( http://wso2.org/forum/thread/17451 ) 论坛上的线程 17451。

一种解决方法可能是使用 Timer 而不是 onAlarm。移除onAlarm并将Timer 活动与pick 活动并行放置。将拾取和计时器活动包装到 Scope 中并将异常处理程序附加到它。异常处理程序中没有什么可做的,它只是导致引擎取消范围内的所有活动,包括计时器(不幸的onAlarm是,没有取消)。

每当您想取消计时器时以及在计时器的活动路径中引发异常,以使bpel引擎退出(并行)选择活动。可能发生的问题:计时器(即前者onAlarm)可能会在引擎不在等待时触发,但在异常触发之前pick-activity执行常规...onMessage

于 2011-10-14T12:48:22.857 回答