非同期外部コマンド実行

最終更新日: 2020年3月14日
R8 | R9

準備

"環境 > アプリケーション" で、利用するメッセージキューを指定してください。[詳細...]

サンプル

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

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

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

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

function process() {
  // メッセージキューにジョブを登録する(デフォルトの接続先を使う)
  var registryService = p.appctx.getBean(Java.type("java.lang.Class").forName("jp.jasminesoft.jfc.job.JfcjobstatusRegistryService"));
  var jobparamMap = new java.util.HashMap();
  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" という名前のキューを利用します。

特定のメッセージングミドルウェアを指定する

Apache Active MQ Artemis と Rabbit MQ の両方を利用する設定を行った場合に、特定のメッセージングミドルウェアに送信させる場合は、対応するbeanを指定してください。

RabbitMQの場合は次のようになります。

p.appctx.getBean("JfcjobstatusRegistryServiceAmqpImpl")

ActiveMQの場合は次のようになります。

p.appctx.getBean("JfcjobstatusRegistryServiceJmsImpl")