GlassFishで Java Batch について勉強会で話してきた

ブログを書くまでが勉強会。GlassFish勉強会 2013#01に行ってきたのでメモ。
当日の資料や様子は、@yamadamnさんが作ってくれたまとめにあると思います。

HeapStatsでGlassFish4障害解析 @sugarlife さん

  • HeapStatsは低オーバーヘッドが売り (Specjvm2008で約5%以下)
  • デモからは、GCの動きだけではなく、クラス統計情報が一緒に取れるのが売りと紹介。
  • 稼働中のJVMに動的にアタッチすることもできる。
思ったこと
  • GCログとクラス統計情報が一緒に取れるのは嬉しいと思いました。今までだと、
    • まず、GCログからメモリリークであることを認知する
    • 次にヒープダンプを解析しようとするが、テスト環境で再現しないので、ヒープダンプが手に入らない
  • こんな流れで、解析が進みにくい状況を、HeapStatsであれば解決してくれそうでした。
  • まずはインストールしてみたいと思います。

JSFJAX-RSで作るThin Server Architecture @making さん

  • どうやってThin Server Archtectureを実現するかのお話。
  • Thin Server Archtectureを実現したいけど、あんまりJavaScriptは書きたくない
  • JSFのManaged BeanからJAX-RS2.0で標準化されたREST Client API使って、JAX-RSで作成したAPIにアクセス
  • メリットは、クライアント(モバイル、外部公開するREST API)などが変化しても、サーバサイドが振り回されないこと
思ったこと
  • 私はJavaScript上手にうまく書けないので、JavaScriptを書かずにタグだけで表現可能な綺麗なコンポーネントがあるJSFはやはり魅力的です。
  • JAX-RSのクライアントAPIはとても便利そう。
    • 例えば、古いアプリケーションではSwing - (Socket) - ServerSocket のように、クライアントとサーバサイドをSocketで繋いで自分でプロトコルを考えているものが、このREST Clientを使うと比較的簡単にHTTPに置き換えれそうでした。

Java EE 7 overview @btnrouge さん

  • Java EE 7 の変更点に関するoverview。
  • EE 7 に新しく入る仕様は、WebSocket、Batch、JSON-P、Concurrency Utilities EE の4つ。
  • 何故アップデートされた?にはJACCなどの認証周り、JavaMailなど。
  • GlassFish4のアーキテクチャは3から大きく変わっていない。
思ったこと
  • Micro Updateのスライドで教えて頂いた内容は全て初耳だったので、貴重な情報でした。
  • GlassFish4にNetBeans以外のIDEが対応してるのも意外でした。
    • 今までのEclipse一辺倒から、Java EEの世界でもだいぶ状況が動いてきていることを感じました。
    • NetBeansを最近使い始めてますが、EclipseよりJava EE との相性は良いと思います。

Batch Applications for the Java Platform (JSR352) @n_agetsu

  • 私の話。聴いてくださったみなさま、ありがとうございました。

セッションの補足
  • GlassFish4のBatch管理コンソール

GlassFish勉強会なのに、振り返るとすっかりGlassFishのネタが漏れていました。
バッチにおいて、GlassFishの管理コンソールにも機能追加が行われています。

f:id:n_agetsuma:20130616233249p:plain

例えば、上の画像のように、バッチの成功、失敗、起動時刻、終了時刻の一覧がGlassFish4の管理コンソールで見れたり、

f:id:n_agetsuma:20130616233328p:plain

各ジョブごとに、読み込んだレコード数やコミット数まで管理コンソールから確認可能です。
これらの機能は、Batchがアプリケーションサーバの仕様として入ったことのメリットだと思います。今後のJava EE 実装サーバでは、もしかしたらジョブネットのようなものが、グラフィカルに表示されるものも出てくるかもしれません。

  • ご質問いただいた、XML以外でジョブを定義する方法

今回リリースされたJava EE 7に含まれる範囲にはありませんが、今後の改善として以下のようなAPIが提案されています。XMLを使わなくても、CDIの@Producesと連携してジョブを定義する便利な機能です。

@Produces
public Job buildJob() {
    return JobBuilder
        .newJob("myJob")
        .addStep("sendStatements")
        .addChunk()
        .reader(AcountReader.class)
        .processor(AccountProcessor.class)
        .writer(EmailWriter.class)
        .itemCount(10);
}

確かにjBatch1.0ではXMLの量が多かったり、APIがタイプセーフではない(Object型)弱点もありますが、まだまだ標準化されたばかりです。EJBもかつてはXMLが多く使いにくかったですが、現在では@Statelessだけで大抵はうまく使えるくらい簡単になってきています。

今後のバージョンアップでjBatchがもっと進化することを楽しみにしています。

最後に

今回、セッションをするご機会を頂いた @btnrouge さんに大変感謝しています。また、私がDsub出力を緊張して触ってしまったがために映らなくなったのに、すぐに駆け寄ってくれた @yoshioterada さんに大変感謝しています。同じ会社の方が来てくださって、ホームっぽい雰囲気を作ってくださったことも嬉しかったです。みなさま本当にありがとうございました。