レベル: 上級 夷藤 勇人, ソフトウェア事業,
IBM
2007年 12月 05日 J2EE開発プロジェクトにおいて必要不可欠なJ2EEパッケージング戦略とはなにか?すべてのJ2EE開発者が正しいJ2EEパッケージング戦略をとれるように、詳細にその理論・方法を解説していきます。
はじめに
シリーズ「クラスローダーとJ2EEパッケージング戦略を理解する」、最終回となる第6回は、Q/A集をお届けします。
WAS V6.1からは、クラスローダーの仕組みが変わったと聞きましたが?
WebSphere Application Server バージョン6.1からはその内部アーキテクチャとして、OSGiが採用されました。
OSGiについては詳しく知る必要はありませんが、ユーザーの立場から見た場合の最も大きな恩恵は以下の通りです。
- WebSphere自身が使用しているライブラリ・クラスが、アプリケーションからは見えなくなった
一見地味な変更点ですが、アプリケーション開発者にとっては、こんなにうれしいことはありません。
バージョン6.0まではWebSphere自身が使用しているライブラリと、同じライブラリをアプリケーションが独自に用意して使用する場合は、クラスローダーのデリゲーション・モードを「Parent Last」にすることは必須でした。
バージョン6.1からはその必要性が大幅になくなるのです。
バージョン6.0以下を使用していてクラスローダーの問題で四苦八苦している場合は,
いっそのこと、6.1以上を使用することで、あっけなく解決するかもしれません。
WAS以外のアプリケーション・サーバーだと、もっと楽をできると聞きましたが?
例として、オープンソースのJava EEサーバー、Apache Geronimoを見てみましょう。Apache Geronimoには、「クラスを隠す」機能が備わっています。
たとえば、Apache Geronimo自身が使用している、「org.apache.commons.*」クラスを、特定のWebアプリケーションから隠したいとしましょう。この場合は、以下のような設定で実現可能です。
Geronimo独自のWebアプリケーション設定ファイル
<web-app ...>
<hidden-classes>
<filter>org.apache.commons</filter>
</hidden-classes>
|
この機能は非常にシンプルですが、実際のところ非常にうまく機能して、エレガントにクラス衝突の問題を回避できます。
Java EE 5になるとなにか変わりますか?
パッケージングの観点から、ひとつ便利な機能が追加されました。
EAR内の全てのモジュールで共通に使用したい「ユーティリティJava」の置き場所として、「ライブラリ・ディレクトリ」を指定できるようになりました。何も指定しない場合は、ライブラリ・ディレクトリとして「lib」が使用されます。
ライブラリ・ディレクトリに置いたJarファイルは自動的に認識されます。設定は不要です。
使用例は以下のようになります。
<EAR-Root>/lib/utility-bar.jar
<EAR-Root>/lib/utility-foo.jar
|
これは、Webアプリケーションにおける「<WAR-Root>/WEB-INF/lib」に相当するものです。
EAR全体でもようやく同等の機能が追加されたことになります。
コンフィグレーションよりコンベンションを重視するというJava EE 5の思想の一例といえるでしょう。
最後に
もともとのこのシリーズの執筆動機は、「クラスローダーの問題で悩んでいる開発者をなんとか助けたい。」というものでしたが、WebSphere Application Server バージョン6.1の登場や、またApache Geronimoのような後発ならではの便利なクラス・フィルタリング機能により、ようやくこの使命を終えることができそうです。
参考文献
著者について  | |  | 著者である夷藤氏は、現在IBMにおいて、WebSphere Application Serverの技術支援を担当しており、多くのJ2EEプロジェクトにおいてシステムデザインやアプリケーション開発の助言を行っています。また、業界標準パフォーマンス評価団体、
SPECにおけるJ2EEアプリケーション・サーバー評価システム、
SpecJAppServer2002の開発を行っていました。
SPEC (US)
SpecJAppServer2002 (US)
専門はJava/J2EEですが、彼の興味はサーバーサイドのみならずクライアントサイド・テクノロジー、Python、Eclipseなどへと多岐に渡っており、雑誌「Eclipseパーフェクトマニュアル」でのテストファースト・プログラミングに関する記事執筆や、Eclipse
- RCPやJava/J2EEに関する講演活動などでもおなじみです。
Eclipse - RCP
Java/J2EE |
記事の評価
|