Kohei Nozaki's blog 

CLIからリモートEJB経由でジョブを操作してみる


Posted on Monday Feb 10, 2014 at 06:44PM in Technology


JAX-RSなどを使ってREST APIを作る方が良いのだろうと思われるが、大変なのでリモートEJB経由でやってみる。さらにコマンドラインから叩きたいので、シェルスクリプトから蹴れるように少し作り込んでみる

WildFly - リモートEJB呼び出しを使ってみる を併せて読むと多少参考になるかも

環境

  • WildFly8.0.0.CR1
  • Oracle JDK7u51
  • OS X 10.9.1

準備

プロジェクトを作る

下の3つを作る。ソースはGitHubに置いた

  1. JSR352APIのSerializableなJavaBeansを含むプロジェクト(jbatchif)
  2. リモートEJBとバッチの実装を含むプロジェクト(jbatch)
  3. クライアント側プロジェクト(jbatchcli)

JSR352APIのSerializableなJavaBeansを含むプロジェクト(jbatchif)

SimpleJobInstanceImpl.java, SimpleJobExecutionImpl.java, SimpleStepExecutionImpl.java, SimpleMetricImpl.java

JobInstance, JobExecution, StepExecution, MetricインタフェースのSerializableな実装。WildFlyのJSR352実装のこれらのクラスをそのまま使うとNotSerializableExceptionが出てしまうのでしかたなく作った(org.jberet.runtime.metric.StepMetricsが非Serializableらしい)。リモートEJB側とクライアント側の両方で使うので切り出しておく。フィールドとアクセサしかないただのJavaBeans。

リモートEJBとバッチの実装を含むプロジェクト(jbatch)

MyJobOperatorImpl.java

こいつをリモートEJB経由で呼び出す。throws宣言が若干気になるけど面倒なのでそのままにしておく

TestBatchlet.java, job001.xml

動かしてみる で使ったのと同じ

クライアント側プロジェクト(jbatchcli)

Main.java

メインクラス。引数でリモートEJBのJNDI名、ジョブ名、ジョブパラメータを受け取る。細かい処理はprocessorパッケージの下のクラスにやらせる。Commons CLIとか使って作り込んだ方がいいんだろうけど、現状ではかなり適当。

config.sh

シェルスクリプトの環境依存っぽいところを外だししてある

jbatch.sh

javaコマンドをたたくところ

jndi.properties

リモートEJBのlookupに必要な設定をする。ここを適当に書き換えればWildFly以外のAPサーバでもいけるはず

logging.properties

JBossのEJB呼び出し用ライブラリがデバッグ的な文言をINFOレベルで出力してくるのでログレベル上げて出ないようにしとく

デプロイする

CLIから叩く前にjbatchプロジェクトをデプロイする

CLIから叩いてみる

ジョブ一覧を表示してみる

kyle-no-MacBook:resources kyle$ ./jbatch.sh list-job-names
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
jobNames: [job001]
kyle-no-MacBook:resources kyle$ 

jbatchランタイムに認識されたジョブXMLの一覧的なのが出る。job001しかないので1つだけだけど。

ジョブを起動してみる

kyle-no-MacBook:resources kyle$ ./jbatch.sh start job001
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
executionId: 63
kyle-no-MacBook:resources kyle$ 

普通に動いている。WildFly側にもログが出てる。こんな感じ

まだジョブXML一覧と起動のところしか作ってない。停止とか再実行とかexecutionIdから情報見るとかはそのうち作り込む。

何故かなかなかjavaプロセスが終了しないことがあるのが気になる。1分位待ってると終わるんだけど。

参考文献

  1. David Blevins' Blog: @ApplicationException is evil… sort of



No one has commented yet.

Leave a Comment

HTML Syntax: NOT allowed