Tomcat、Jetty、ActiveMQ、OpenEJBなど、至難と思われたさまざまなオープンソースミドルウェアの柔軟な統合を実現したGeronimo。今回は、その統合を強力に支えるGeronimo特有の柔軟なアーキテクチャを紹介。統合用部品GBeanの疎結合連携を実現するDIカーネル機構などを通して、Geronimoが秘めた本当のポテンシャルを体験しよう。
各方面で紹介されはじめたGeronimoですが、特徴としてその内部アーキテクチャが挙げられることも多いようです。ここからはGeronimoのポテンシャルを最大限に引き出すべく、その内部を探っていきます。
Geronimoは、図1にあるような「カーネル」と「周辺コンポーネント」によるマイクロカーネルアーキテクチャ*を採用しています。カーネルはコンポーネント管理に専念する一方、EJBを動作させたりMQ*電文を交換したりという具体的機能は各周辺コンポーネントが担当します。わたしたちがよく知るJ2EEサーバとしてのディストリビューションは、カーネルの周囲にTomcatなどを組み合わせた一統合例に過ぎず、ほかの製品や独自プログラムを統合した「My Geronimo」も実現可能なのです。
このようなアーキテクチャ構成のキーとなるのは、GBeanとデプロイメントプランです。
Geronimoの世界の外にあるミドルウェアやコンポーネントのGeronimoへの統合は、その橋渡し役となるGBeanクラスを開発/デプロイすることで実現します。Tomcatなどのミドルウェアはもちろん、その上にデプロイされたアプリケーションなども内部的には1つのGBeanとして存在します。
開発者は、ほかのGBeanに対する依存関係や通常外部定義するような各種設定値をハードコードする必要はありません。それらは後述のプランによってデプロイ時に指定します。
GBeanを実際にデプロイする際には、デプロイメントプラン(以後、プラン)と呼ばれる情報が必要となり、通常プランファイルと呼ばれるXMLの形を取ります(リスト1)。プランには以下の2つの重要な役割があります。
<configuration configId="deployment/echoserver"
xmlns="http://geronimo.apache.org/xml/ns/deployment">
<gbean name="MyGBean" class="com.ibm.jp.ise.MyGBean">
<attribute name="depth">32</attribute>
<attribute name="targetName">DefaultTarget</attribute>
</gbean>
<gbean>
:
:
1つ以上のGBeanの論理的なグループがコンフィギュレーション*です。起動停止やデプロイなどはすべてこの単位で行われます。プランでは、このコンフィギュレーションを定義し、どのGBeanをグループに属させるかを記述します。
GBeanの外出し設定情報を、プランファイル内部で記述できます。単なる設定情報だけでなく、ほかのGBeanへの依存情報なども指定できます。
なお、プランファイルのスキーマ*は1つではありません。ミドルウェア統合には汎用型プラン形式を、J2EEアプリケーションの場合はgeronimo-web.xmlなどの特化した形式を利用します。
いかなるコンポーネントも、Geronimoに統合するには次の3ステップが必要となります。
前記3手順すべてを実施する必要があります。GBeanクラスを開発し、プランファイルは汎用型スキーマに従って記述します(手順は後述)。最後にミドルウェアのコードやGBeanを含むJARと、プランファイルを指定してデプロイを実施します。
java -jar deployer.jar deploy mw.jar mw.plan
WARやEARも、GBeanとしてデプロイされますが、GBean開発の手順は省略できます*。J2EE用スキーマに従い記述したプランファイルをデプロイ時に指定することも可能ですが、省略するとEARやWAR内部に含まれるものが自動的に利用されます。
コンフィギュレーションを起動したい場合、次のようなコマンドを与えます(複数指定可能)。
java -jar server.jar myconfig-id1 myconfig-id2……
各コンフィギュレーションは、グループ配下のすべてのGBeanを起動します(停止時も同様)。
GBeanに活用されているDI(Dependency Injection)の仕組みを解説します。
小さくシンプルで安定したカーネルが、機能豊富で交換可能な部品をつなぎ合わせることで高い柔軟性を保つアーキテクチャ。
Message Queueing。連携するアプリケーション間でデータ交換をする際、キューを使って非同期にデータ交換を行う方式。
コンフィギュレーションはクラスローダーの単位にもなる。またプランファイル内のparentId属性を用いて親子関係を構築できる。
Geronimo公式サイトにXML Schemasとして掲載されている。よく用いるのは汎用型プランとJ2EE関連プランだろう。
ソースを見たところ、ディストリビューションに含まれるTomcatModuleBuilderやJettyModuleBuilderが、デプロイ時にGBeanとなるモジュールクラスをビルドするようである。
本記事は、オープンソースマガジン2006年5月号「注目のJ2EEサーバー Apacheの戦士Geronimoが持つ実力」を再構成したものです。
日本アイ・ビー・エム システムズエンジニアリング株式会社
万仲龍樹・中山清喬・杉田直哉・津田嘉孝
日本アイ・ビー・エム システムズ・エンジニアリング株式会社(ISE)は、日本アイ・ビー・エムグループにおけるSE技術者の専門家集団として1992年7月に設立された。
発足以来、IBM製品を中心とした難易度の高い複雑なシステム構築や先進技術の適用場面において、卓越したITスキルによりお客様と開発現場を支援してきた。
近年は、仮想化技術・グリッドコンピューティング・Web 2.0・オープンソースソフトウェア等々の先進技術分野での支援も展開している。
Copyright © ITmedia, Inc. All Rights Reserved.