WebSphere Application ServerのOSGi対応について2009/12/23@OSGi勉強会日本IBM 須江 信洋※この資料は2009/12/22時点での公開情報に基づいて記載されています。また、資料の内容は個人としての見解を述べたものであり、所属する企業・組織が内容を保証するものではありません。
自己紹介氏名: 須江 信洋(すえ のぶひろ)所属: 日本IBM ソフトウェア事業WebSphereテクニカル・セールスしごと: WebSphereを売るお世話になっているコミュニティJJUG, JGGUG, JSUGその他http://twitter.com/nobusueガジェット好きです(Kindle買いました)
お品書きJava EE屋がOSGiに注目すべき理由主要APサーバーのOSGi化Javaのクラスローダーの限界WebSphereのOSGi対応 最新状況WAS7.0:  OSGi Open Alpha導入手順何が変わるの?Blueprint ServiceとApache Aries
主要APサーバーのOSGi対応状況WebSpherev6.1から内部はOSGiベースWebLogicv10.3から内部はOSGiベースGlassfishv3からOSGiベースJBossJBossOSGi 1.0.0Beta5 (2009/12/09)SpringSourcedm Server先進的OSGi対応が基本
Javaのクラスパスの課題実行環境におけるクラスの依存関係は、実行してみないと分らないコンパイル時にはクラスの依存関係が満たされていても、実行時にそれを担保するための仕組みがない依存性解決がフラットであるモジュール分割していても、クラスパスの定義は分割できない⇒階層型クラスローダーである程度解決?よくある問題あるJARが必要とするJARは、実行してみないと判別できない必要なJARを試行錯誤(いわゆるJAR hell)
階層型クラスローダーの課題同一クラスローダー内ではクラスがユニークでなければならない従来のAPサーバーでは、WAR/EAR/Globalなどのレベルでクラスローダーを階層化クラスローダーを分ければ、同じクラスの異なるバージョンの共存が可能だが・・よくある問題ロギング/XMLパーサー/バイトコード操作ライブラリなどのバッティング
そこでOSGiですよ依存モジュールの明確化実行時の依存性解決を担保実行前の事前検証が可能ネットワーク型の依存性解決モジュールに閉じたクラスパスの管理モジュールのバージョニングモジュールを組み合わせる際の、依存モジュールのバッティングを回避
WebSphere Application Server V7 OSGi ApplicationsWAS V6.1では、コンテナ側はOSGi化されていたが、ユーザーアプリケーションは従来の階層型だったWAS V7にOSGi Applicationsを適用することで、ユーザーアプリケーションもOSGiバンドルとしてデプロイ可能に
WAS V7 OSGi Applications現在、Open Alpha公開中https://www14.software.ibm.com/iwm/web/cc/earlyprograms/websphere/iwsasosgia/OSGi 4.2 Blueprint component model対応internal / external bundle repository対応JNDIとOSGi service registryの統合Open Alpha動作環境WAS V7.0 FixPack5Windows / RHEL / SLES (x86)
提供されるものOpen Alphaバイナリ(2009/11/20 ver)WAS v7用アドオンサンプルアプリケーション(2種)リリースノートGetting StartedOpen Alpha ドキュメンテーション48ページのかなり詳細なドキュメント
導入手順インストールOSGi-Applications-Open-Alpha.20091120.zipを<WAS_HOME>直下に展開<WAS_HOME>/feature_packs/aries/bin/complete_installation.[bat|sh]プロファイル拡張指定したWASプロファイルのOSGi Apps機能を有効にする<WAS_HOME>/feature_packs/aries/bin/augumentProfile.[bat|sh] <profile名>
管理コンソールの拡張プロファイルを拡張すると、以下の機能がコンソールに追加されるOSGibundleのデプロイとバージョン管理OSGibundle repositoryの構成
OSGi Appsのデプロイメント・モデルOSGi Bundle(.jar)OSGimetadataOSGi Bundle(.jar)OSGi Bundle(.jar)EnterpriseBundle App(.eba)Web App Bundle(.war)BusinessLevelApplicationContextPathEnterpriseBundle App(.eba)VirtualHostEnterpriseBundle App(.eba)
(参考)従来のデプロイメント・モデルEJB / SharedLib(.jar)OSGi Bundle(.jar)OSGi Bundle(.jar)EnterpriseApp(.ear)Web App (.war)BusinessLevelApplicationContextPathEnterpriseApp (.ear)VirtualHostEnterpriseApp  (.ear)
Blueprint component modelあるBundleが提供するサービスを、Client(他のBundle)から動的に参照[OSGI-INF/blueprint/xxx.xml]<blueprint xmlns:tx="http://www.ibm.com/appserver/schemas/8.0/blueprint/transactions"xmlns:jpa="http://www.ibm.com/xmlns/ibm-blueprint-jpa/v1.0.0"><bean id="blabberImpl" class="com.ibm.ws.eba.example.blabber.persistence.BlabberImpl"><jpa:context property="entityManager" unitname="blabber" />  <tx:transaction method="*" value="Required"/></bean><service id="blabberService" ref="blabberImpl" interface="com.ibm.ws.eba.example.blabber.persistence.spi.BlabberUserInterface" /></blueprint>OSGi Bundle(.jar)InitialContextic = new InitialContext(); return (BlabberUserInterface) ic.lookup("aries:services/" + BlabberUserInterface.class.getName());Client
Apache Aries現在、incubatorに提案中http://wiki.apache.org/incubator/AriesProposalWAS V7 OSGi AppsのベースOSGiベースのエンタープライズ・アプリケーションにおけるコンポーネント・フレームワークを目指すOSGi Alliance Enterprise Expert Group(EEG)によって定められた仕様の実装複数Bundleで構成されるアプリケーションのアセンブリ・フォーマットJavaEEコンテナ・サービスとの統合など
まとめ次世代JavaEEでは、OSGi必修になりそうNeilさんのセッションで勉強!!WAS V7のOSGiApplicationsぜひ試してみて下さい(そしてフィードバックを・・・)Apache Ariesはどうよ?今のところ、IBM/SAP/Progress?

OSGi Applications(Open Alpha) for WAS7.0