最終回 Ruby on Geronimoを試す【後編】Apacheの戦士Geronimoが持つ実力(1/2 ページ)

J2EEアプリケーションサーバ「Apache Geronimo」の魅力に迫ってきた本連載もいよいよ今回で最終回となる。今回は、RoGの実現を通して、GBeanの原理をより深く理解してほしい。

» 2007年03月29日 09時00分 公開
[津田嘉孝,ITmedia]

RoGを動かす

 本連載の第3回第4回で解説した知識が補強できたところで実際に手を動かし、挙動を確かめてみましょう。環境構築に関しては本連載の第1回第2回のほか、サンプルファイルに添付したreadme.txtを参考にしてください。

 準備ができたら、geronimo-startup.batを使ってGeronimoを起動してください。DLLを利用しているので、このバッチを利用します。そして、サンプルをrubyGBean.plan、helloGBean.plan、sample.entarprize.earの順にデプロイします。

RoGの実行確認

 http://localhost:8080/sample.web/HelloServletにアクセスし、テキストボックスに「山田たろ〜」と入力してみましょう。「Result: Hello!! 山田たろ〜」となれば、アクセス成功です(図1)

図1 図1 HelloServlet

サンプルの動作原理を触って理解しよう

 図2に示したように2つのコンフィギュアとEARとは依存関係があります。「configure/helloGBean」をstopするとどうなるか、またsample.enterprize/sample.enterprizeをstartしようとするとどうなるか、試してみましょう(図3)。依存関係に従って動作していることがお分かりいただけるかと思います。さらに余力があれば、開発環境を構築し*、geronimo-applicatino.xml/geronimo-web.xmlからparentIDを削除して、再度sample.enterprize.earをデプロイしてみましょう。その挙動の違いも分かると思います(図4)

図2 図2 クラスローダーの関係
円盤はクラスローダー、球はオブジェクト、グレーの実線はクラスの参照経路、点線の矢印はコラボレーション関係、黒の実線は依存関係を表す。そして、1と2の経路では得られるHelloクラスは別のものである。そのため、1の経路でロードしなければ、ClassCastExceptionが発生する。つまり、sample/helloGBeanをparentIDに指定する必要がある。
図3 図3 依存関係の検証
図4 図4 parentIDを削除する実験。500エラーが発生し、ClassCastExceptionが起きている

 この挙動の違いが現れるのは、コンフィギュアとクラスローダー*が対応しているためです。この仕組みによってGBean同士の実装が互いに影響しないようになります。特にアプリケーション間で共通に使用するJARのバージョンに違いがある場合などでその真価を発揮します。ちなみにconfigure/rubyGBeanを登録する際にJARファイルの登録はしませんでした。その訳はgeronimo-startup.batで\repositoryディレクトリ配下にJARファイルをコピー*していたことにあります。このようなrepositoryにあるJARファイルを利用したGBeanの登録も可能です。この部分は、同じApacheプロジェクトであるMaven*プロジェクトの成果を享受しています。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ