Upload
hiroki-kondo
View
3.608
Download
1
Embed Size (px)
DESCRIPTION
JSUG第7回「初冬の勉強会」で発表した資料です。
Citation preview
Spring Dynamic Modules
近藤 寛喜
自己紹介させてください
• お仕事– Eclipse RCPプログラマ
• EclipsePlugin開発勉強会(GoogleGroup)• OSGiについて書かせていただきました。
– 「今日のいいのかこんな記事」として取り上げられました。
• http://www.javainthebox.net/blog/2007/08/blog-post_05.html
• OSGiがJDKに入るかどうかを問題視
Spring Dynamic Modulesって?
• 以前はSpring-OSGi– プロジェクト名はOSGi Allianceからの承認待ち
• 導入したときのうれしさ– 動的にApplicationContextの保持するBeanを入
れ替えられる
– JARの依存性地獄から抜けられます
アジェンダ
• そもそもOSGiってなんなのさ
• Spring Dynamic Modulesの設定方法
• 簡単なデモ
ざんねんなおしらせ
• Spring Dynamic Modules は2.5リリースには含まれてません(現在RC1リリース)
• 動作は非常に良好と言いたかったんですが、うまく行きませんでした。Orz
• 環境の問題だと思われます。
• それでもデモしていいですか?
OSGiってなに?
• Open Service Gateway Initiativeの略
– 家電などの機器間でサービスを提供するためのインターフェース仕様を規定
• 現在R4.1が公開されています
• 仕様なので、実装はいくつかあります– 一部ではJava Operating Systemだと言う声も
OSGiってどこで使われてる?
• Eclipse Platform• 携帯電話/PDA(Nokia)• APサーバーでも
– Websphere– JBoss(JBoss-OSGi)
• 拡張性の高さ・容易さが求められる場面で使われています。
• ×Android – OSGiの動作報告アリ
• △ JDKに導入 – モジュール管理システムとして→Sunはどうしても自作
OSGiのうれしさ
• VMを停止せずに機能追加・削除・更新ができる
– 実行中にサービスを入れ替えられる
• 依存するライブラリを極力衝突させない仕組み
– 実装に依存しないクラスのロード• インストールされているコンポーネントで実行時に間に合わせる
– モジュールごとにクラスローダーの境界を設定できる• Public classでも他のコンポーネントからのロードを制限
– ロードするライブラリのマルチバージョンサポート• 同一パッケージで違うバージョンのロードを可能に
OSGiではBundleという単位でモジュールを扱います
コンソール上で機能追加
• install– Bundleをインストール
• start– Bundleを活性化
• stop– Bundleを停止
• uninstall– Bundleを削除
BundleX
BundleD-v2
BundleB
BundleM
BundleA
Systembundle
State (active)
BundleC
State (RESOLVE)
OSGiによるBundleの連携
どうやって設定するの?(1)
• 各Bundle(モジュール)のMETA-INF/MANIFEST.MF
どうやって設定するの?(2)
• サービスの登録・読み込み
OSGiのよくしたほうがいいところ
• モジュールをまたぐと基本別世界– モジュールをまたいだDI– モジュールをまたいだリソースのロード
• 約束事が多い
• この辺りをSpringFrameworkがサポート
Spring Dynamic Modulesのうれしさ
• OSGi環境に導入すると、ApplicationContextをサービスとして提供
– Springの持つAOP/Transaction等の機能を提供
• モジュールの状態によって自動的にBeanを登録・削除する
• XML設定でOSGiのお約束をSpring流に
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
Spring Dynamic Modules
• サポートしているプラットフォーム– 仕様上R4.0以降のプラットフォーム
– テストしているプラットフォーム• Eclipse Equinox• Apache Felix• Knopflerfish
• どんな感じに設定するか見てみます
Spring Dynamic Modulesを使うにはBundle編
• Bundleに下記の設定を追加
– OSGi Framework上のApplicationContextに追加
•META-INF/MANIFEST.MFに下記を追記するSpring-Context: filepath
タイムアウトなどの細かい設定が可能
•META-INF/spring/というフォルダを作成し、その下にxmlを配置する
Spring Dynamic Modulesを使うにはXML編
• サービスを登録する場合
• サービスを利用する場合
デモ
• ApplicationContextが提供するBeanの変更
– XMLの修正で動的に書き換わる例
– Bundleの起動・停止で入れ替わる例
• ApplicationContextへBeanを追加する例
– BundleのインストールでBeanを追加
• 残念/失敗しちゃいます
質問/Question
ご清聴ありがとうございました。
ライセンスについて
• JSUGマスコットアイコン(本スライド左下)が残されている場合に限り、本作品(またそれを
元にした派生作品)の複製・頒布・表示・上演を認めます。
• 非商用目的に限り、本作品(またそれを元にした派生作品)の複製・頒布・表示・上演を認めます。
• 本作品のライセンスを遵守する限り、派生作品を頒布することを許可します。
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に公開予定
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を選ぶ
Appendix A. Spring Dynamic Modulesを使うには(環境構築編 3)
5. Locationにspring-osgi-extensions/eclipseを指定 -> Reload ->画面のようにチェックを外しOK
Appendix A. Spring Dynamic Modulesを使うには(環境構築編 4)
6. 本日のサンプルワークスペースを現在のワークスペースとしてスイッチする
7. Open Run Dialog
8. 左記を選んで起動
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について書いた記事です。