Что означает «Нет такого канала» - исключение в Apache ODE? - PullRequest
1 голос
/ 22 сентября 2011

У меня есть несколько BPEL-процессов, которые прекрасно работают на WSO2 (версия 2.0.1).Но через некоторое время в журнале появляется следующее исключение.Я понятия не имею, что они означают и как от них избавиться.

Вот фрагмент трассировки стека:

[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?Может быть, это проблема пула потоков?!

Любая помощь или подсказка была бы отличной, спасибо!

Ответы [ 3 ]

1 голос
/ 21 февраля 2013

Нам удалось выявить одну проблему, которая вызывала исключение java.lang.IllegalArgumentException: такого канала нет; Вы можете найти из следующих jira. https://wso2.org/jira/browse/BPS-218

Они будут включены в новые выпуски.

1 голос
/ 06 октября 2011

Из журналов это не проблема конфигурации, а скорее внутренняя ошибка. По какой-то причине навигатор получает событие таймера (вы использовали <pick> s с onAlarm и / или обработчиками событий?), Но канал обратного вызова для этого таймера больше не существует. Я мог предположить, что такие таймеры запланированы, но не удалены, когда экземпляр процесса завершен. Позже, когда таймер срабатывает, путь к целевой активности недоступен. Это просто догадка, но подходит под ваше описание. Я знаю только экспериментальную базу ODE и ODE 2.0 и немного разбираюсь в настройках WSO2, поэтому я бы предложил сообщить об ошибке в их JIRA.

0 голосов
/ 14 октября 2011

мы столкнулись с той же проблемой.Мы могли бы зафиксировать это и исследовать на небольшом примере процесса.См. Ветку 17451 на форуме wso2.org (http://wso2.org/forum/thread/17451).

Обходной путь может заключаться в использовании таймера вместо onAlarm. Удалите onAlarm и поместите активность таймера параллельнов действие выбора . Оберните действие выбора и таймера в область и прикрепите к нему обработчик исключения. Ничего не нужно делать в обработчике исключений, он просто заставляет механизм отменять все действия в области действия,включая таймер (к сожалению, onAlarm не отменяется).

Выдает исключение всякий раз, когда вы хотите отменить таймер, а также в пути активности таймера, чтобы заставить двигатель bpel выйти из (параллельного)выбрать деятельность.Проблема, которая может возникнуть: таймер (то есть прежний onAlarm) может сработать, пока двигатель не ожидает в pick-activity, а выполняет обычный onMessage до того, как сработало исключение ...

...