外部コマンドを非同期に実行することができます。

メッセージングミドルウェア Rabbit MQ が起動している必要があります。Rabbit MQ は Wagby に同梱されていません。別途インストールを行ってください。

アプリケーションを用意する

詳細画面のオリジナルボタンからジョブの実行を非同期で行うサンプルを紹介します。

はじめに"画面遷移 > 独自ボタンから外部コマンドを呼び出す"の手順でオリジナルボタンの設定を行ってください。

なおサンプルコードではモデル名を model1 としますので、開発者は ShowModel1_Original1.js というスクリプトを用意します。 スクリプトの内容は次のようにします。

function process() {

  // メッセージキューにジョブを登録する
  var registryService = p.appctx.getBean("JfcjobstatusRegistryService");
  var HashMapClass = Java.type("java.util.HashMap");
  var jobparamMap = new HashMapClass();
  jobparamMap.put("cmd", "cmd /c dir ..\\..\\export");
  registryService.sendJobMessage(null, null, "ProcessExec", jobparamMap, p);

  // 元の詳細画面へ戻す
  var pkey = p.request.getParameter("pkey");
  return "redirect:/showModel1.do?pkey="+pkey;
}
  • JfcjobstatusRegistryServiceクラスが提供するsendJobMessageメソッドでジョブメッセージの送信を行います。
  • ジョブメッセージ送信時、内部ではWagbyが提供するジョブ状態管理テーブル jfcjobstatus へ状態が設定されるようになっています。開発者は直接、この管理テーブルを操作することはありません。
  • sendJobMessageメソッドの第1引数と第2引数はそれぞれ RabbitMQ の "exchange" と "routingkey" に対応します。exchange を null としたとき、routing key はキュー名に対応します。exchange, routingkey ともに null を指定すると、デフォルトのキュー名である wagbyJobQueueが使われます。上のサンプルコードはそのようになっています。
  • デフォルトのキュー名以外を用いる場合は、"環境 > アプリケーション" で定義した "使用するキューの名前" "ジョブを受信するキューの名前" を指定してください。
  • 第3引数はジョブ名となります。ProcessExecは外部コマンドを実行するジョブです。
  • 第4引数はジョブパラメータとなります。上記マニュアルにある通り、ジョブパラメータ cmd にて、実行するコマンドを指定することができます。
  • 第5引数にはActionParameterを指定します。サンプルコードのように p を指定してください。

メッセージキューの設定

"環境 > アプリケーション > メッセージキュー" の設定を行います。"ダウンロード" の説明を参考に行ってください。

キュー名の未指定時(空白設定)は、標準ではダウンロード用と同じ "wagbyJobQueue" という名前のキューを利用します。

Wagby Developer Day 2018