Upload
hiroki-kondo
View
2.029
Download
1
Embed Size (px)
Citation preview
業務システムで使うSpring Dynamic Modules
-Springとモジュールの行方 by OSGi-
Japan Spring User Group
こんぴろ
自己紹介
今日のお話の対象者
• Modularityって、なんでうれしいのかいまいちよくわからない。
• Spring DMって出てきたけど、どう使うのかよく分からない。
という方です。込み入った話は懇親会で☆
まずは
Spring Dynamic Modulesを導入すると何がうれしいの?
Spring Dynamic Modulesを導入すると何がうれしいの?
へのSpringの導入レポートよりhttp://www.springsource.com/files/uploads/datasheets/Linkedin-Case-Study.pdf
Springを使って開発
Spring Dynamic Modulesを導入すると何がうれしいの?
• Increased Productivity(生産性の向上)
• Superior User Experience(優れたUX)
• Improved Application Quality(品質の改善)
• Focus on Business Logic(ビジネスロジックに注力)
• Easier Migration to OSGi(OSGiへの移行が簡単)
へのSpringの導入レポートより
http://www.springsource.com/files/uploads/datasheets/Linkedin-Case-Study.pdf
Spring Dynamic Modulesを導入すると何がうれしいの?
• Increased Productivity(生産性の向上)
• Superior User Experience(優れたUX)
• Improved Application Quality(品質の改善)
• Focus on Business Logic(ビジネスロジックに注力)
• Easier Migration to OSGi(OSGiへの移行が簡単)
Springの利点
SpringDM
の利点
へのSpringの導入レポートより
http://www.springsource.com/files/uploads/datasheets/Linkedin-Case-Study.pdf
Spring Dynamic Modulesって何?
• OSGi用のSpringFramework
• OSGiに載せてモジュール化を促進
• 移行のためにはOSGiの知識が必要
→でもSpring DMを使えば学習コストを削減
→さらにPOJOを保てるのでテストしやすい
→とLinkedInのレポートに書かれてました。
Spring Dynamic Modulesって何?
• OSGi用のSpringFramework
• OSGiに載せてモジュール化を促進
• 移行のためにはOSGiの知識が必要
→でもSpring DMを使えば学習コストを削減
→さらにPOJOを保てるのでテストしやすい
→とLinkedInのレポートに書かれてました。
Spring Dynamic Modulesって何?
• OSGi用のSpringFramework
• OSGiに載せてモジュール化を促進
• 移行のためにはOSGiの知識が必要
→でもSpring DMを使えば学習コストを削減
→さらにPOJOを保てるのでテストしやすい
→とLinkedInのレポートに書かれてました
なぜModulesをDynamicに
なのか?
本日のポイント
• Modulesとは?
–ライブラリは Modulesの一つです
–ソフトウェアをModulesにすると…
– 構成を理解しやすく、保守しやすい
– 分業しやすい
–Dynamicとは?
– Modules間を動的に接続すること
– ModulesをDynamicにすると…
サービスをModulesから動的に注入できます
2009年04月
Qcon Tokyoにて
Qcon Tokyoにて
Spring dm Serverは未来への投資By Rod Johnson氏
注:dmはDynamic Modulesの略
2009年08月
JSUG勉強会にて
JSUG勉強会にて
「Modularityを考える-複雑系のアーキテクチャ」
by熊澤公平先生
氏(熊沢先生)
曰く
モジュール化は
大変な仕事ネジですら400年かかった
簡単にはできるわけがない
大変な仕事ネジですら400年かかった
簡単にはできるわけがない
それじゃ
自分達の開発の現場で
モジュール化は使えないのか?
否
自分達の現場で使う
モジュール
それがRod氏の言う
未来への投資
だと思います。
熊沢さんも
モジュール化に対し大きく3点
指摘していました。
現場でモジュール化を活用するなら、そのうち2つが大事
子(熊沢先生)
曰く
モジュール化は
大変な仕事1.モジュールとして機能する
2.モジュールとして認められる(標準化)
大変な仕事1.モジュールとして機能する
2.モジュールとして認められる(標準化)
大変な仕事1.モジュールとして機能する
2.モジュールとして認められる(標準化)
また、
モジュールを作るならばモジュール間でイノベーションの差が
激しいところで分割する
モジュールを作るならばイノベーションの差が
激しいところで分割する
モジュール化についての私見
• モジュールとして機能する単位で• モジュールはイノベーションの差が激しいところで分割する
• モジュールの標準化を目指さない→(最初はプロジェクトに閉じる)
これならモジュール化が進められると僕は思ったのです。
それじゃ、
そもそも
モジュール化ってなんだっけ?
モジュール化とは?
オブジェクト指向をもう一歩進め、抽象的に物事を扱えるようにしたものです。(私見)
歴史をひもとくと理解できます。
ソフトウェアの抽象化の歴史(1)
• ソフトウェアは何でできているか?– 極論すると0と1の2値で表現されます。
ソフトウェアの抽象化の歴史(2)
• ソフトウェアは何でできているか?– 極論すると0と1の2値で表現されます。– メモリに書き込む段階で2値表現は扱い辛いので
16進値(01FF等)で扱われます。
ソフトウェアの抽象化の歴史(3)
• ソフトウェアは何でできているか?– 極論すると0と1の2値で表現されます。– メモリに書き込む段階で2値表現は扱い辛いので16進値(01FF等)で扱われます。
– CPUの命令セットは16進値に対応し、より人が扱いやすいアセンブラ(機械語)で扱われます。
ソフトウェアの抽象化の歴史(4)
• ソフトウェアは何でできているか?– 極論すると0と1の2値で表現されます。– メモリに書き込む段階で2値表現は扱い辛いので16進値(01FF等)で扱われます。– CPUの命令セットは16進値に対応し、より人が扱いやすいアセンブラ(機械語)で扱われます。
– アセンブラのまとまった処理やアドレスに対し、ラベルをつけ、関数や変数として扱う高級言語が登場。
– パッケージやクラス(オブジェクト指向)は、概念を認識しやすくするために登場したものです。
ソフトウェアの抽象化の歴史(5)
• ソフトウェアは何でできているか?
ソフトウェアの抽象化とは、より大きなまとまりに対して人が認識するために名前をつける。
Q.抽象化が必要な理由は何ですか?
• A.ソフトウェアで扱う概念や構造がどんどん大きくなっているから
By Phillip Capper
XML地獄という言葉がありました…。
XMLを適切な単位で分割できない…。
でも今はそれももう過去の話です。By karmablue
Q.なぜ分割できるとうれしいの?
A.人が認識できる大きさや量には限りがあります。システムをモジュールに分割することでモジュール→パッケージ→クラス…と言うように探索しやすくしているのです。
オブジェクト指向の次の一歩
• システムを適当な大きさで分割して名前付け
→それがモジュール化
Left.tower gate wall Right.tower
例えば機能単位でまとめて再利用
• 機能を抽出し、配布
• 機能要件が同じ場合に利用
→これっていわゆるライブラリ?
By Auntie P
そうです。ライブラリは
モジュールの一種です。
ライブラリの利点
• ライブラリは開発を分離できる
→ライブラリが公開するIFの変更に気をつければ開発速度を上げられる
• ライブラリは責任が明確
→物理的な境界があるので障害の切分けが楽
• ライブラリごとにバージョンを管理
→障害のライフサイクルをバージョンで管理
ライブラリの利点は
そのままモジュールの利点です。
モジュールの利点
• モジュールごとに開発を分離できる
→モジュールが公開するIFの変更に気をつければ開発速度を上げられる
• モジュールごとの責任が明確
→物理的な境界があるので障害の切分けが楽
• モジュールごとにバージョンを管理
→障害のライフサイクルも管理
実はSpringはModulesに分割済みこれってライブラリでしょ?
•Spring-aop
•Spring-aspects
•Spring-beans
•Spring-context
•Spring-core
•…
•Spring-ORM
•Spring-MVCJAR:プロジェクトが1:1
FAQ.ModulesとComponentどう違うんですか?
A.大抵の場合、どちらもシステムを分割した構成要素とという、概念を指しています。
言語仕様とかで定義された用語でなければ…
Q.なんでModulesをDynamicにする必要があるの?
• ライブラリの組み合わせでは新しいサービスを追加できない。
• 瓶を並べるだけじゃ機能の注入は難しい
• A.Modulesの追加でサービスを追加したい
Modulesの追加でサービスを追加とは?
例えば
追加するだけでサービスを増やせる
ModulesをDynamicにするとは?-SpringDMではどうなっているの?-
OSGiの場合、ModuleをBundleと呼びます
Spring DM対応のBundleにするには
1. プロジェクトを適切な機能で分割
2. 依存関係をMANIFEST.MFに記述
×クラスパスでの解決
○Import-packageでの解決
3. application-context.xmlを分割
4. 分割したXMLをMETA-INFに配置
1. 名前での明示(springで始まる か *.xml)
2. ヘッダーにSpring-Contextと明示
MANIFEST.MFの例
Q.DynamicなModuleを組み合わせると何ができるの?
A.モジュールの組み合わせで新製品開発
夢のようですが、現実★です。
ゆえに
DynamicなModuleの構成は、
アプリケーションのSOAと
言われることもあります。
OSGiの補足
• モダンな商用APサーバは大抵OSGiをサポートしてます。
• Oracle WebLogic
• Remoteのモジュールを読み込むr-OSGiと言う仕様もあります。
• RMI等とは違って特殊な例外を使わない、POJOスタイルを保てます。
まとめ
Modulesとは?
• ライブラリは Modules の一つ
• ソフトウェアをModulesに分割すると…
–構成を理解しやすい
–保守しやすい
–分業しやすい
–機能追加しやすい
Dynamicとは?
• モジュール間を動的に接続
• 起動している間のモジュールの追加/削除も
• 新しいサービスを追加できる
• サービスの更新もお手の物
• モジュールを組み合わせて新しいシステム
今日話さなかったこと
• Spring DMの仕様詳細• http://static.springsource.org/osgi/docs/1.2.0/reference/html/
• ソフトウェアモジュールの標準化
• 仕様→実装(JSR等)、実装→仕様(Spring→blueprint spec)
• モジュールを統合したテスト手法
質問はございますか?
Does anyone have questions?
ご清聴ありがとうございました
ライセンスについて
• JSUGマスコットアイコン(本スライド左下)が残されている場合に限り、本作品(またそれを元にした派生作品)の複製・頒布・表示・上演を認めます。
• 非商用目的に限り、本作品(またそれを元にした派生作品)の複製・頒布・表示・上演を認めます。
• 本作品のライセンスを遵守する限り、派生作品を頒布することを許可します。
Qcon Tokyoでの写真は櫻庭祐一さんによるものです。