7

カスタムジョブをcamunda BPMのjobexecutorに追加することは可能ですか? 私の要件は、プロセス関連のサービスをタイマーまたはループで実行することです。これは実際にはプロセスの一部ではないため、BPMN で直接モデル化したくありません。これをアーカイブするために、非同期サービス タスクを 1 つだけ含む任意のプロセスを追加で開始することもできますが、SOAP/REST/RMI 呼び出しを含むメソッド呼び出しをジョブ キューに直接追加することをお勧めします。誰もこれを前に試しましたか?

4

1 に答える 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 に答える