カスタムジョブをcamunda BPMのjobexecutorに追加することは可能ですか? 私の要件は、プロセス関連のサービスをタイマーまたはループで実行することです。これは実際にはプロセスの一部ではないため、BPMN で直接モデル化したくありません。これをアーカイブするために、非同期サービス タスクを 1 つだけ含む任意のプロセスを追加で開始することもできますが、SOAP/REST/RMI 呼び出しを含むメソッド呼び出しをジョブ キューに直接追加することをお勧めします。誰もこれを前に試しましたか?
質問する
1830 次
1 に答える
8
これは高度な質問です。内部 API を使用してジョブを作成することができます。次の 2 つを提供する必要があります。
カスタム ジョブ ハンドラ:
public class CustomjobHandler implements JobHandler {
public static final String TYPE = "customjobHandler";
public String getType() {
return TYPE;
}
public void execute(String configuration, ExecutionEntity execution, CommandContext commandContext) {
// provide custom job execution logic
}
}
ジョブ ハンドラーがプロセス エンジン構成に追加されます。(customJobHandlers
リスト) を参照してください。
ジョブを作成するコマンド
たとえば、Java デリゲートから (カスタム コマンドを使用することもできます)。
public class CreateJobCommand implements Command<String> {
public String execute(CommandContext commandContext) {
MessageEntity message = new MessageEntity();
message.setJobHandlerType(CustomJobHandler.TYPE);
String config = "some string you want to pass to the hanlder";
message.setJobHandlerConfiguration(config);
Context
.getCommandContext()
.getJobManager()
.send(message);
return message.getId();
}
}
これにより、できるだけ早く実行される「メッセージ エンティティ」が作成されます。時間指定の実行が必要な場合は、TimerEntity を作成できます。その後、プロセス エンジンのコマンド エグゼキュータでコマンドを実行できます。
編集: スタンドアロン エンジンでこれをテストするには、CustomJobHandler を camunda.cfg.xml に追加する必要があります。
<property name="customJobHandlers">
<list>
<bean class="<FQN of CustomJobHandler>" />
</list>
</property>
于 2013-09-09T09:04:12.580 に答える