TOP
>
調査レポート
> リポジトリ機能とOpenLDAP
オープンソースをこう使った! 〜 運用管理ツールHinemosの秘密
第4回:EJBにて実装した各運用機能について
著者:
NTTデータ 宮本 洋輔
2006/9/14
前のページ
1
2
3
4
次のページ
ジョブ管理機能を例にした実装方式の説明
各機能の中で、もっともEJBを効果的に利用し、複雑な処理を実現しているジョブ管理機能を例にしてHinemosでのEJBやJ2EE APIの使い方を説明して行きます。
以降で3つの処理、ジョブの登録処理、ジョブの自動実行(ジョブ開始部)、ジョブの自動実行(結果処理部)について説明していきますが、内容はジョブ管理機能に特化したものではなく、各機能での利用方法に共通するものです。
ジョブの登録処理
ジョブの登録処理を例にしてマネージャの1つの役割であるクライアントに応答する処理を説明します。
前回の説明の中で、クライアントとマネージャ(JBoss)との通信にRMIを利用すると書きました。マネージャでは、クライアントから次のようにリモートメソッドが呼び出されることを契機として登録処理を行います。
クライアントでのSessionBeanメソッド呼び出し例
(画像をクリックすると別ウィンドウに拡大図を表示します)
SessionBeanは、クライアントからの要求と受付け、ジョブ情報のEntityBeanを生成していきます。EntityBeanが生成されるとデータベースにも対応するレコードが生成され、永続化がなされます(図3)。
図3:ジョブ定義の登録処理の流れ
ジョブの自動実行(ジョブ開始部)
ジョブの自動実行(ジョブ開始部)では、ジョブ実行と監視などの定期実行される処理について説明します。またノードと非同期にてやり取りするためにJMSを使う部分についても説明します。
ジョブの自動実行開始は、Quartzから一定周期や指定日時になったときにメソッドが呼び出され開始します。Quartzから呼び出されるメソッドはSessionBeanであり、ジョブ情報から実行セッション情報を生成し、先行条件が時刻のみである実行可能なジョブを開始していきます。
ノードとのやり取りには、JMSメッセージを利用しています。ジョブ実行はSessionBeanからRMIなどで直接バッチ処理プロセスを起動さることも可能ですが、ジョブが終了するまでSessionBeanは待機することとなりリソースの無駄が発生して大量ジョブの同時実行が困難になります。これを避けるためにSessionBeanはジョブの実行指示をJMSに登録することでジョブ開始部分の処理を終了します。
ノード上のジョブエージェントは、JMSクライアントとして実装されており、Topicにより送信されたメッセージを受信すると、該当ジョブを実行します(図4)。
図4:初期実行可能ジョブの開始の流れ
前のページ
1
2
3
4
次のページ
著者プロフィール
株式会社NTTデータ 宮本 洋輔
基盤システム事業本部 オープンソース開発センタ
2003年、株式会社NTTデータに入社。入社以来セキュリティや運用管理などのシステム管理OSSに関する研究開発に従事。現在はHinemosの開発とコミュニティ作りに活動している。
INDEX
第4回:EJBにて実装した各運用機能について
はじめに
Hinemosの処理とEJB
ジョブ管理機能を例にした実装方式の説明
ジョブの自動実行(結果処理部)