私は、サービスタスクだけで構成されるActivitiで実行されているポーレットを持っています。ポルセは長時間走っていて、途中で中止したいと思っています。プロセスがactiviti forumからactiviti - 実行中のプロセスインスタンスを終了する
ProcessInstance pi = runtimeService.startProcessInstanceById(
processDefinitionId, executionParameters);
を使用して開始され、プロセスがruntimeService
上
void deleteProcessInstance(String processInstanceId, String deleteReason);
を呼び出すことによって終了させることができます。
startProcessInstanceById
メソッドは、実行が終了した後にのみ返されるという問題があります。プロセスが終了していない限り、私はprocessInstance
を取得しません。
しかし、私はコードをデバッグして、メソッドの実装でprocessInstanceId
を見つけることができました。
他のスレッドからruntimeService.deleteProcessInstance(processInstanceId, deleteReason)
メソッドを呼び出すと、指定されたprocessInstanceIdが存在しないことを示すActivitiObjectNotFoundException
が得られます。
さらに、processInstanceが実行されているときに、プロセスが実行中であっても、runtimeService.createProcessInstanceQuery().list()
を呼び出すと空白のリストが返されます。
ここに正しい答えがあります。パース・ハンドラーを使用して、アクティビティー境界でインスタンスを終了する(完了イベントまたは作成イベントのいずれかで)リスナーを各サービス・タスクに自動的に追加します。 REST APIまたは標準のJavaプロセスインスタンスを使用してコールを終了または削除することはできません。実際には「ストレートスルー」プロセスでデータベースにアクセスしたことはありません。 –