26
Spring Dynamic Modules 近藤 寛喜

Spring Dynamic Modules

Embed Size (px)

DESCRIPTION

JSUG第7回「初冬の勉強会」で発表した資料です。

Citation preview

Page 1: Spring Dynamic Modules

Spring Dynamic Modules

近藤 寛喜

Page 2: Spring Dynamic Modules

自己紹介させてください

• お仕事– Eclipse RCPプログラマ

• EclipsePlugin開発勉強会(GoogleGroup)• OSGiについて書かせていただきました。

– 「今日のいいのかこんな記事」として取り上げられました。

• http://www.javainthebox.net/blog/2007/08/blog-post_05.html

• OSGiがJDKに入るかどうかを問題視

Page 3: Spring Dynamic Modules

Spring Dynamic Modulesって?

• 以前はSpring-OSGi– プロジェクト名はOSGi Allianceからの承認待ち

• 導入したときのうれしさ– 動的にApplicationContextの保持するBeanを入

れ替えられる

– JARの依存性地獄から抜けられます

Page 4: Spring Dynamic Modules

アジェンダ

• そもそもOSGiってなんなのさ

• Spring Dynamic Modulesの設定方法

• 簡単なデモ

Page 5: Spring Dynamic Modules

ざんねんなおしらせ

• Spring Dynamic Modules は2.5リリースには含まれてません(現在RC1リリース)

• 動作は非常に良好と言いたかったんですが、うまく行きませんでした。Orz

• 環境の問題だと思われます。

• それでもデモしていいですか?

Page 6: Spring Dynamic Modules

OSGiってなに?

• Open Service Gateway Initiativeの略

– 家電などの機器間でサービスを提供するためのインターフェース仕様を規定

• 現在R4.1が公開されています

• 仕様なので、実装はいくつかあります– 一部ではJava Operating Systemだと言う声も

Page 7: Spring Dynamic Modules

OSGiってどこで使われてる?

• Eclipse Platform• 携帯電話/PDA(Nokia)• APサーバーでも

– Websphere– JBoss(JBoss-OSGi)

• 拡張性の高さ・容易さが求められる場面で使われています。

• ×Android – OSGiの動作報告アリ

• △ JDKに導入 – モジュール管理システムとして→Sunはどうしても自作

Page 8: Spring Dynamic Modules

OSGiのうれしさ

• VMを停止せずに機能追加・削除・更新ができる

– 実行中にサービスを入れ替えられる

• 依存するライブラリを極力衝突させない仕組み

– 実装に依存しないクラスのロード• インストールされているコンポーネントで実行時に間に合わせる

– モジュールごとにクラスローダーの境界を設定できる• Public classでも他のコンポーネントからのロードを制限

– ロードするライブラリのマルチバージョンサポート• 同一パッケージで違うバージョンのロードを可能に

OSGiではBundleという単位でモジュールを扱います

Page 9: Spring Dynamic Modules

コンソール上で機能追加

• install– Bundleをインストール

• start– Bundleを活性化

• stop– Bundleを停止

• uninstall– Bundleを削除

BundleX

BundleD-v2

BundleB

BundleM

BundleA

Systembundle

State (active)

BundleC

State (RESOLVE)

OSGiによるBundleの連携

Page 10: Spring Dynamic Modules

どうやって設定するの?(1)

• 各Bundle(モジュール)のMETA-INF/MANIFEST.MF

Page 11: Spring Dynamic Modules

どうやって設定するの?(2)

• サービスの登録・読み込み

Page 12: Spring Dynamic Modules

OSGiのよくしたほうがいいところ

• モジュールをまたぐと基本別世界– モジュールをまたいだDI– モジュールをまたいだリソースのロード

• 約束事が多い

• この辺りをSpringFrameworkがサポート

Page 13: Spring Dynamic Modules

Spring Dynamic Modulesのうれしさ

• OSGi環境に導入すると、ApplicationContextをサービスとして提供

– Springの持つAOP/Transaction等の機能を提供

• モジュールの状態によって自動的にBeanを登録・削除する

• XML設定でOSGiのお約束をSpring流に

Page 14: Spring Dynamic Modules

SpringDynamicModulesを使うと?

• install– Bundleをインストール

• start– Bundleを活性化

• stop– Bundleを停止

• uninstall– Bundleを削除

BundleX

Springextender

BundleB

BundleM

BundleA

Systembundle

State (active)

BundleC

Bean

State (RESOLVE)

Spring Dynamic Modules 導入後のOSGi

Page 15: Spring Dynamic Modules

Spring Dynamic Modules

• サポートしているプラットフォーム– 仕様上R4.0以降のプラットフォーム

– テストしているプラットフォーム• Eclipse Equinox• Apache Felix• Knopflerfish

• どんな感じに設定するか見てみます

Page 16: Spring Dynamic Modules

Spring Dynamic Modulesを使うにはBundle編

• Bundleに下記の設定を追加

– OSGi Framework上のApplicationContextに追加

•META-INF/MANIFEST.MFに下記を追記するSpring-Context: filepath

タイムアウトなどの細かい設定が可能

•META-INF/spring/というフォルダを作成し、その下にxmlを配置する

Page 17: Spring Dynamic Modules

Spring Dynamic Modulesを使うにはXML編

• サービスを登録する場合

• サービスを利用する場合

Page 18: Spring Dynamic Modules

デモ

• ApplicationContextが提供するBeanの変更

– XMLの修正で動的に書き換わる例

– Bundleの起動・停止で入れ替わる例

• ApplicationContextへBeanを追加する例

– BundleのインストールでBeanを追加

• 残念/失敗しちゃいます

Page 19: Spring Dynamic Modules

質問/Question

Page 20: Spring Dynamic Modules

ご清聴ありがとうございました。

Page 21: Spring Dynamic Modules

ライセンスについて

• JSUGマスコットアイコン(本スライド左下)が残されている場合に限り、本作品(またそれを

元にした派生作品)の複製・頒布・表示・上演を認めます。

• 非商用目的に限り、本作品(またそれを元にした派生作品)の複製・頒布・表示・上演を認めます。

• 本作品のライセンスを遵守する限り、派生作品を頒布することを許可します。

Page 22: Spring Dynamic Modules

Appendix A. Spring Dynamic Modulesを使うには(環境構築編 1)

• 用意するもの– Eclipse 3.3.1.1 for Plugin/RCP Developper– spring-osgi-1.0-rc1-with-dependencies– 本日のサンプルワークスペース

• spring-osgi-workspace.zipとしてJSUGのGoogleGroupに公開予定

Page 23: Spring Dynamic Modules

Appendix A. Spring Dynamic Modulesを使うには(環境構築編 2)

1. 次の構造でフォルダを作成

2. spring-osgi-extensions/eclipse/pluginsの下にSpringDynamicModules/のdist、lib以下のものをコピーする

3. Eclipseを起動し、Window->Prefrencesを開く

4. Plug-in Development -> Target Platformを選ぶ

Page 24: Spring Dynamic Modules

Appendix A. Spring Dynamic Modulesを使うには(環境構築編 3)

5. Locationにspring-osgi-extensions/eclipseを指定 -> Reload ->画面のようにチェックを外しOK

Page 25: Spring Dynamic Modules

Appendix A. Spring Dynamic Modulesを使うには(環境構築編 4)

6. 本日のサンプルワークスペースを現在のワークスペースとしてスイッチする

7. Open Run Dialog

8. 左記を選んで起動

Page 26: Spring Dynamic Modules

Appendix B. 文献

• Spring Dynamic Modules Document– http://static.springframework.org/osgi/docs/current/ref

erence/html/– 設定方法が一通りかかれています

• OSGi Tutorial– http://www.aqute.biz/OSGi/Tutorial– OSGiの使い方が一通りかかれています

• 先取りJava7(自著)– http://www.thinkit.co.jp/free/article/0708/9/2/– OSGiについて書いた記事です。