0

*強いテキスト* タスク完了イベントが StatefulKnowledgeSession にディスパッチされない場合、何が問題になる可能性がありますか?

新しいプロセスインスタンスの場合、私は

  • 新しいセッションを作成する

    ヒューマン タスク ローカルを登録する GenericHTWorkItemHandler

    カスタム イベント リスナーを登録する

    電話startProcess(processDefinitionId,parameters);

新しいインスタンスを開始し、登録されたヒューマン タスク ハンドラを介して最初のヒューマン タスクを作成します。

ヒューマン タスクを完了したいときは、

  • でKnowledgeSessionを復元します JPAKnowledgeService.loadStatefulKnowledgeSession(lastSessionId,kBase,null, env);

    ヒューマン タスク ローカルの GenericHTWorkItemHandler を再度登録します。

    カスタムイベントリスナーを再度登録する

次に taskService.completeTask を呼び出しますが、完了したタスクは KnowledgeSession にディスパッチされません。そして、プロセスフローは起こっていません

イベント リスナーを再度登録しないでください。work-item-handlers を再度登録するべきではありませんか?

更新 1 例外トレース:

07:52:09,618 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/workflow-console].[rsservlet]] (http--0.0.0.0-8280-15) Servlet.service() for servlet rsservlet threw exception: java.lang.IllegalStateException: EntityManager is closed
        at org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:1158) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
        at org.drools.container.spring.beans.persistence.DroolsSpringJpaManager.getApplicationScopedPersistenceContext(DroolsSpringJpaManager.java:89) [drools-spring-5.5.0.Final.jar:5.5.0.Final]
        at org.drools.persistence.SingleSessionCommandService.execute(SingleSessionCommandService.java:350) [drools-persistence-jpa-5.5.0.Final.jar:5.5.0.Final]
        at org.drools.command.impl.CommandBasedStatefulKnowledgeSession.getEnvironment(CommandBasedStatefulKnowledgeSession.java:478) [drools-core-5.5.0.Final.jar:5.5.0.Final]
        at org.jbpm.process.workitem.wsht.GenericHTWorkItemHandler$TaskCompletedHandler.handleCompletedTask(GenericHTWorkItemHandler.java:260) [jbpm-human-task-core-5.4.0.Final.jar:5.4.0.Final]
        at org.jbpm.process.workitem.wsht.GenericHTWorkItemHandler$TaskCompletedHandler.execute(GenericHTWorkItemHandler.java:234) [jbpm-human-task-core-5.4.0.Final.jar:5.4.0.Final]
        at org.jbpm.task.service.local.LocalTaskService$SimpleEventTransport.trigger(LocalTaskService.java:329) [jbpm-human-task-core-5.4.0.Final.jar:5.4.0.Final]

セッションをリロードするときに、新しい HumanTaskWorkItemhandlers を登録しています。TaskService にイベント ハンドラーを登録し続けます。

workItemHandlers を接続すると、eventHandlers が taskService に登録されます。この eventHandlers はいつ taskService から登録解除されますか?

4

1 に答える 1

0

タスク サービスを使用している場合、デフォルトですべてのリスナーにイベントがディスパッチされます。つまり、複数の ksession がイベントを受け取ることができます (ただし、タスク完了イベントは 1 つの ksession によってのみ処理されるべきです)。あなたが述べたように、owningKSessionOnly を使用すると、1 つの ksession だけが完了イベントに反応するようにすることができます。

ハンドラーで dispose を呼び出すことにより、ハンドラーのリスナーの登録を解除できます。

于 2013-04-22T00:37:20.907 に答える