DevLOVE 20100823 EnterpriseOSGi

1,515 views

Published on

2010/8/23 DevLOVE モジュール指向勉強会の資料です

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,515
On SlideShare
0
From Embeds
0
Number of Embeds
23
Actions
Shares
0
Downloads
9
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

DevLOVE 20100823 EnterpriseOSGi

  1. 1. DevLOVE: モジュール指向勉強会エンタープライズOSGi<br />2010/8/23<br />須江 信洋(@nobusue)<br />※この資料は2010/8/23時点での公開情報に基づいて記載されています。<br />また、資料の内容は個人としての見解を述べたものであり、<br />所属する企業・組織が内容を保証するものではありません。<br />
  2. 2. 自己紹介<br />氏名: 須江 信洋(すえ のぶひろ)<br />所属: 日本IBM ソフトウェア事業<br />仕事: JavaEE関連のプリセールス<br />お世話になっているコミュニティ<br />JJUG, JGGUG, JSUG<br />その他<br />http://twitter.com/nobusue<br />Groovyと猫が好きです<br />
  3. 3. menu<br />なぜ今OSGiか?<br />OSGi概要<br />エンタープライズOSGi<br />
  4. 4. なぜ今OSGi?<br />Answer:<br />Javaはモジュール指向プラットフォームじゃないから<br />
  5. 5. モジュール指向を実現するには<br />モジュール境界が定義できること<br />外部に公開するインターフェース<br />モジュールに閉じたリソース<br />物理的なパッケージングの仕様<br />モジュール間の依存性管理が可能であること<br />依存先モジュールの明示<br />モジュールのバージョン管理<br />依存関係の解決<br />モジュールのライフサイクル管理が可能であること<br />インストール/アンインストール<br />開始/停止<br />ライフサイクルイベントへの対応<br />
  6. 6. Javaの現状<br />モジュール境界が定義できること<br />クラスやメソッドの可視性だけでは制御が難しい<br />publicではクラスローダー全体に公開されてしまう<br />そもそも、Javaのクラスはモジュールとしては細かすぎ<br />JARはモジュールとしては不十分<br />単に複数のクラスやリソースをまとめる機能のみ<br />ロードされた後はクラスと同じ扱い<br />モジュール間の依存性管理が可能であること<br />静的な依存関係はコンパイルしてみないと分からない<br />実行時の依存関係は実行してみないと分からない<br />バージョン管理機能はない<br />モジュールのライフサイクル管理が可能であること<br />ロードしたクラスはアンロードできない<br />ライフサイクルという概念はない(ロードされたら直ちに有効となる)<br />
  7. 7. 7<br />OSGiの歴史<br />1999年:「Open Service Gateway Initiative」が設立<br />当初は家庭や小規模オフィス向けのゲートウェイ装置で動作するサービスプログラムの実行基盤<br />2003年:名称を「OSGi Alliance」に変更<br />対象を車載機器やモバイル端末、エンタープライズシステムに拡大<br />2003年:Eclipse 3.0が プラグイン管理システムとしてOSGi仕様を採用<br />Javaの世界での知名度が一気に向上<br />2010年:OSGi R4.2の一部としてEnterprise Specification公開<br />JavaEE環境でOSGiを活用するための拡張仕様<br />Spring Framework由来のDIコンテナ機能も標準化<br />
  8. 8. 8<br />OSGiの提供する機能<br />実行環境が依存関係を管理<br />同一モジュールの異なるバージョンが存在してもOK<br />JVMを起動したままモジュールの入れ替えが可能<br />Moduleレイヤー<br />依存関係の解決<br />複数バージョンの管理<br />Life Cycleレイヤー<br />モジュールの動的ロード<br />Serviceレイヤー<br />Securityレイヤー<br />
  9. 9. 9<br />OSGiにおけるモジュール「Bundle」<br />JarのマニフェストファイルにMetadataを記述<br />Manifest-Version: 1.0<br />Bundle-SymbolicName: com.ibm.jp.myapp<br />Bundle-Name: My Application Bundle<br />Bundle-Vendor: IBM Japan<br />Bundle-Version: 2.0.0<br />Import-Package:<br /> com.ibm.jp.mylib1.ui;version="[1.2.0,1.3.0)",<br /> com.ibm.jp.mylib1.util;version="[1.2.0,1.3.0)"<br />Export-Package:<br />com.ibm.jp.myapp;version="2.0.0"<br />Bundle-RequiredExecutionEnvironment: J2SE-1.5Bundle-Activator:com.ibm.jp.myapp.MyAppActivator<br />バンドルはOSGi Framework実装が管理する「Repository」に登録され<br />その管理下でロード・実行される<br />
  10. 10. 10<br />バージョン管理<br />Import<br />Export<br />com.foo.bar<br />com.foo.bar<br />1.4.5<br />[1.2.0, 1.4.0)<br />com.foo.bar<br />com.foo.bar<br />1.3.12<br />[1.4.0, 1.5.0)<br />
  11. 11. 11<br />ライフサイクル管理<br />packagecom.ibm.jp.myapp;importorg.osgi.framework.BundleActivator;importorg.osgi.framework.BundleContext;publicclassMyAppActivatorimplementsBundleActivator {publicvoid start(BundleContext context) throws Exception {System.out.println("Bundle is starting."); }publicvoid stop(BundleContext context) throws Exception {System.out.println("Bundle is stopping."); }}<br />
  12. 12. OSGi R4.2 Enterprise Spec<br />OSGi Alliance Enterprise Expert Group(EEG)によって定められたEnterprise向けの仕様<br />http://www.infoq.com/news/2010/03/osgi-enterprise-42-released<br />以下が規定されている<br />アプリケーションのアセンブリ・フォーマットの拡張<br />JavaEEコンテナ・サービスとの統合<br />宣言的なDI仕様(Blueprint)<br />
  13. 13. デプロイメント・モデル<br />OSGi Bundle(.jar)<br />OSGimetadata<br />OSGi Bundle(.jar)<br />OSGi Bundle(.jar)<br />Enterprise<br />Bundle App<br />(.eba)<br />Web App Bundle(.war)<br />BusinessLevelApplication<br />ContextPath<br />Enterprise<br />Bundle App(.eba)<br />VirtualHost<br />Enterprise<br />Bundle App(.eba)<br />
  14. 14. Bundleの入れ替え:WASの例<br />14<br />バージョンを指定して保存<br />⇒アプリケーション再起動で反映<br />
  15. 15. Blueprintと宣言的サービス<br />あるBundleが提供するサービスを、Client(他のBundle)から動的に参照<br />JNDIサービスにより、OSGiのサービスレジストリにJNDI経由でアクセス可能<br />[OSGI-INF/blueprint/xxx.xml]<br /><blueprint <br />xmlns:tx="http://www.ibm.com/appserver/schemas/8.0/blueprint/transactions"<br />xmlns:jpa="http://www.ibm.com/xmlns/ibm-blueprint-jpa/v1.0.0"><br /><bean id="blabberImpl" class="com.ibm.ws.eba.example.blabber.persistence.BlabberImpl"><br /><jpa:context property="entityManager" unitname="blabber" /><br /> <tx:transaction method="*" value="Required"/><br /></bean><br /><service id="blabberService" ref="blabberImpl" interface="com.ibm.ws.eba.example.blabber.persistence.spi.BlabberUserInterface" /><br /></blueprint><br />OSGi Bundle(.jar)<br />InitialContextic = new InitialContext();<br /> return (BlabberUserInterface) ic.lookup("osgi:service/" + BlabberUserInterface.class.getName());<br />Client<br />
  16. 16. OSGiの利点(1)<br />設計モデルと実行モデルの一致<br />実行モデル(Java)<br />flat classloader<br />B.jar<br />A.jar<br />設計モデル<br />B.jar<br />A.jar<br />C.jar<br />実行モデル(OSGi)<br />C.jar<br />classloader by bundle<br />B.jar<br />A.jar<br />C.jar<br />
  17. 17. OSGiの利点(2)<br />依存関係のトレーサビリティ<br />A.jar<br />モジュールを入れ替える際に影響のあるモジュールが機械的に特定できる<br />B.jar<br />C.jar<br />D.jar<br />E.jar<br />F.jar<br />G.jar<br />
  18. 18. 18<br />参考資料<br />OSGi R4.2 Specs<br />http://www.osgi.org/Download/Release4V42<br />Introduction to OSGi by Neil Bartlett<br />http://www.slideshare.net/njbartlett/introduction-to-osgi-tokyo-jug<br />"Enterprise OSGi in Action"(Manning)<br />http://www.manning.com/alves/<br />PDF(MEAP版)が購入可能<br />エンタープライズOSGi入門: 第1回 OSGi概要と実行環境の導入<br />http://www.ibm.com/developerworks/jp/websphere/library/was/was7_fep_osgi/1.html<br />

×