第4回 GBean×DI徹底解剖Apacheの戦士Geronimoが持つ実力(2/2 ページ)

» 2007年03月27日 12時00分 公開
[中山清喬、杉田直哉,ITmedia]
前のページへ 1|2       

属性のインジェクション

 プランファイル中にattributeタグを記述しておくと、デプロイ時に値をGBeanに注入してくれます。例えば、リスト1の例ではGBeanクラスでgetName()/setName()を実装し、GBeanInfoにname属性として公開しているため、次のようなプランファイルを記述するとデプロイ時にsetName("ISE")が呼ばれ、値が注入されます。

<attribute name=”name”>ISE</attribute>


 前記はsetterインジェクションの例ですが、Geronimoカーネルはコンストラクタインジェクションもサポートしています。具体的には、まずGBeanInfoBuilder#setConstructorを使い、コンストラクタのメソッド名と各パラメータの論理名を定義します。次に、プランファイル内でattributeやreferenceタグで論理名と値を指定することで実現します。例えば、前記のプランファイル記述例の場合、GBeanのコンストラクタの第1パラメータ名がnameであると公開しておくと、GBean生成時に第1パラメータに「ISE」が渡ってくることになります。

依存するGBeanのインジェクション

 プランファイルのreferenceタグ*でほかのGBeanの名前を指定することで、そのGBeanへの参照を注入できます。例えば、GBeanAに対して次のようなプランファイル記述があると、デプロイ時に名前がMyGBeanNameであるGBeanが探され、GBeanA#setMyObj()を呼んでセットしてくれます。

<reference name=”myObj”>

  <name>MyGBeanName</name>

</reference>


GBeanInfoによる自動永続化

 属性や依存の注入はデプロイ時に行われますが、その情報がGeronimo再起動で失われないよう、開発者が状態保持のコードを書く必要はありません。実はGBeanInfoはDIだけでなく、内容の永続化でも利用されます。属性や依存などの内部状態は、Geronimo停止時に自動保存、起動時には自動復元*されます。

 なお、カーネルに自動永続化されたくないGBean属性がある場合は、GBeanInfoBuilder#addAttributeする際のpersistent引数(第3引数)をfalseとして指定してください。

GBeanのライフサイクル

 GBeanは図2に示すようなライフサイクルを持ちます。GBeanに対してGBeanLifecycleインタフェースを実装することで、ライフサイクルの変化に伴ってdoStart、doStop、doFailの各メソッドがカーネルから呼び出されるようになります。多くのGBeanでは、統合するミドルウェア本体の起動や停止などのためにGBeanLifecycleを実装することになるでしょう。

図2 図2 GBeanのライフサイクル

まとめ

 2回にわたってGeronimoの根幹をなすアーキテクチャを紹介しました。特にカーネルのDI機構は、周辺コンポーネントを抽象化したGBean同士を疎結合に保ったままで連携可能にしてくれる強力な仕組みです。Eclipseが優れたプラグインアーキテクチャによって「統合クライアント環境」の可能性を見せるように、Geronimoの「統合サービス環境」の可能性に期待したいと思います。

 次回からは統合の実例として、近年注目を集めるRubyのランタイム環境をGeronimo上に統合してみます。

コラム:プランファイルの内容は、デプロイ後どうなるのか

 プランファイルはデプロイ後に不要になります。内部で定義されていたグループ化情報とGBean設定情報はどうなるのでしょうか。

デプロイ時

 グループ化情報はコンフィギュレーションとして解釈されます。また、プランファイルに記述された外部設定情報は、DI機構によってGBeanにセットされ、コンフィグストアと呼ばれる領域に丸ごと直列化され保存されます。プランファイルが役割を終えるのは、GBean内部に情報が取り込まれるからです。

起動時

 カーネルは指定されたコンフィギュレーションをストアから読み出して起動します。それに伴い、コンフィギュレーション配下の全GBeanがストアから内容復元され起動します。起動完了によりコンフィギュレーションさえも役割を終え、稼働時は「GBeanだけの世界」になります。

図A 図A プラン/JARファイルが活用されるまで

このページで出てきた専門用語

POJO

Plain Old Java Object。特定のインタフェースやクラス派生を強制されない、単純なクラス。Geronimoでは、既存のあらゆるクラスも(空クラスでさえ)GBeanとしてデプロイ可能。

referenceタグ

referencesタグで正規表現ライクな指定を行い、複数の参照をセットすることも可能。

起動時には自動復元

/config-store以下にあるserファイルに、永続化されたGBeanInfoの姿を見ることができる。起動時、serファイルから丸ごとGBeanInfoが復元される。


本記事は、オープンソースマガジン2006年5月号「注目のJ2EEサーバー Apacheの戦士Geronimoが持つ実力」を再構成したものです。


著者紹介

日本アイ・ビー・エム システムズエンジニアリング株式会社

万仲龍樹・中山清喬・杉田直哉・津田嘉孝

日本アイ・ビー・エム システムズ・エンジニアリング株式会社(ISE)は、日本アイ・ビー・エムグループにおけるSE技術者の専門家集団として1992年7月に設立された。

発足以来、IBM製品を中心とした難易度の高い複雑なシステム構築や先進技術の適用場面において、卓越したITスキルによりお客様と開発現場を支援してきた。

近年は、仮想化技術・グリッドコンピューティング・Web 2.0・オープンソースソフトウェア等々の先進技術分野での支援も展開している。


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ