More Related Content Similar to Javaにおけるモジュラリティ元年 (20) More from Hiroki Kondo (20) Javaにおけるモジュラリティ元年1. Java における
モジュラリティ元年
近藤寛喜
株式会社チェンジビジョン
開発部
1
QCon Tokyo 2010
2. 謝辞
• 参加を認めてくれた平鍋さん始め
• Change Visionのみんな
• 講演させてくださったInfoQ Japanの皆様
• 事前にレビューしてくださった
• 原田さん、安井さん、河村さん、
• 雄介さん、北條さん
• ありがとうございました!
2
QCon Tokyo 2010
4. アジェンダ
• モジュラリティの重要性
• Project Jigsaw と OSGi
• モジュール設計の勘どころ
4
QCon Tokyo 2010
5. アジェンダ
• モジュラリティの重要性
• Project Jigsaw と OSGi
• モジュール設計の勘どころ
5
QCon Tokyo 2010
6. InfoQ でも記事多数 !!
• Neil Bartlett氏
– Introduction of OSGi
– Neil Bartlett on OSGi(インタビュー)
• Alex Bletwitt氏
– Modular Javaシリーズ
– Bundle.updateシリーズ
6
QCon Tokyo 2010
7. 日本では・・・
未だ
情報少ない
7
QCon Tokyo 2010
9. ソフトウェアは
複雑
http://www.flickr.com/photos/15928286@N07/2168229708/
10. Q :自動車の場合?
http://www.flickr.com/photos/cytech/4386280055/
11. A:1 億 LOC
http://www.flickr.com/photos/cytech/4386280055/
12. 1990
1200億
(原文)http://users.jyu.fi/~koskinen/smcosts.htm
12 http://www.flickr.com/photos/royalport/416330036/
QCon Tokyo 2010
13. 2000
2500億
(原文)http://users.jyu.fi/~koskinen/smcosts.htm
13 http://www.flickr.com/photos/listener42/3665881441/
QCon Tokyo 2010
14. 7年毎に2倍
(原文)http://users.jyu.fi/~koskinen/smcosts.htm
14
QCon Tokyo 2010
16. 2010
5000億
http://www.flickr.com/photos/thelastminute/4371562997/
16
QCon Tokyo 2010
17. 2017
1兆
http://www.flickr.com/photos/15928286@N07/2168229708/
17
QCon Tokyo 2010
22. システムの中に
いくつかの境界を作り、
分ける
→ モジュール化
22
QCon Tokyo 2010
23. モジュラリティとは、
モジュールを使って
システムを構成すること
23
QCon Tokyo 2010
24. モジュール化のレイヤ
システム SOA
APP ???
マイクロ
24
OS QCon Tokyo 2010
カーネル
28. 再利用の二つの軸
機能軸
( 機能 : ライブラリ等 )
時間軸
( 使いつづける )
28
QCon Tokyo 2010
29. モジュール化の利点のまとめ
• 情報隠蔽の促進
• →実装を公開しないでもよい
• 依存関係を定義
• →システムの動作に必須のものが分かる
• 再利用を促進
• →実装量を削減と継続利用の促進
29
QCon Tokyo 2010
30. Java だったら・・・
http://www.flickr.com/photos/morberg/3146874095/
32. Q.JARだけで
モジュールシステムを構成
できないの?
32
QCon Tokyo 2010
33. A.JARだけでは
モジュールシステムとし
て運用するのは厳しい
33
QCon Tokyo 2010
34. Java のクラスロードモデル
依存 拡張 ブート
クラスローダ クラスローダ
JAR
アプリケーションクラスローダ
A B C
G
D
E F
34
QCon Tokyo 2010
37. Visibility と Accessibility
参照性とアクセス可能性
参照
タイプ=
interface+
可能
class
参照可能とは、あるタイプが他のタイプを参照できるか?
JARがVMに読み込まれた状態
37
QCon Tokyo 2010
40. モジュール化の欠点
• 開発コスト
– 意識しない時の3倍
• 独立性の担保
• 依存関係の整理
• 規模が小さい時は×
→例:設計したら1モジュール
使うべき場所を
見誤らないように 宮本武蔵・五輪書より
40 武器や流派にこだわるな
QCon Tokyo 2010
44. アジェンダ
• モジュラリティの重要性
• Project Jigsaw と OSGi
• モジュール設計の勘どころ
44
QCon Tokyo 2010
49. EclipseCon 2010 にて
Project JigsawとOSGiの相互運用
→OSGiのモジュールがJigsawでも使える
Oracleの Steve Harris氏とJeet Kaul 氏
49
QCon Tokyo 2010
51. Project Jigsaw とは
問題:Javaプロセスの起動が遅い
→起動時間・メモリフットプリントの改善したい
• JDKクラスライブラリをモジュール化
• Java SEもモジュールで分割
– 起動時に必要なモジュール構成で
• Java7の目玉の一つ!
51
QCon Tokyo 2010
52. Visibility と Accessibility
参照性とアクセス性
参照 利用 アクセス
タイプ=
interface+
可能 可能 可能
class
アクセス可能とは、モジュールが公開しているか?
識別子public/protected/default/privateにmodule追加
publicとmoduleはmodule外への公開/非公開の区分
52
QCon Tokyo 2010
53. メタデータに必要なもの
• 名前
• 依存関係
– 必要なもの
– 公開範囲
• バージョン
53
QCon Tokyo 2010
54. Java 言語拡張
メタデータ
module M1 @ 1.0 {
• requires M2 @ 2.0, M3 @ 3.0;
• provides M4 @ 4.0, M5 @ 5.0;
• permits M6;
• class com.foo.bar;
• }
module-info.java JSR294
54
QCon Tokyo 2010
55. 複雑に絡みあう JDK
55 http://www.flickr.com/photos/adc/411821495/
QCon Tokyo 2010
57. Pr oject Jigsaw
絶賛開発中
http://www.flickr.com/photos/tanaka_juuyoh/429440983
1/
59. OSGi とは
• Open Service Gateway initiativeの略
• 直訳「オープンなサービスゲートウェイの推進」
• OSGi Allianceで標準化
• Dynamic Module Systems for Java
• Javaのための動的なモジュールシステム
59
QCon Tokyo 2010
61. astah* の事例
• 既存機能のカスタマイズや拡張
• モジュールによるプラグインシステム
61
QCon Tokyo 2010
62. Linked in の事例
• 約2ヶ月かけて自社サービスをモジュール化
複数バージョンのモジュールを利用
62 http://www.springsource.com/files/uploads/datasheets/Linkedin-Case-Study.pdf
QCon Tokyo 2010
63. OSGi の 3 大要素
モジュールシステム
サービス連携
動的 ( Dynamic )
http://www.flickr.com/photos/yourdon/29217341
52/
64. OSGi の 3 大要素
モジュールシステム
サービス連携
動的 (Dynamic)
http://www.flickr.com/photos/yourdon/29217341
52/
65. OSGiを使って
モジュールシステムを構築すると、
クラスローダの関係はこうなります。
65
QCon Tokyo 2010
66. OSGi のクラスロードモデル
System G
A B C
JAR+メタデータ
• Bundle(バンドル) D E F
66
QCon Tokyo 2010
67. クラスローダにより区分け
http://www.flickr.com/photos/joiseyshowaa/240276479
2/
68. バージョンの異なる
JAR への依存
• java -cp a.jar;b.jar;c.jar;a_v2.jar
• (通常フラットなクラスパスの場合)
app Ext Boot
a b c a2
68
先に見つけた JAR で解決 QCon Tokyo 2010
69. バージョンの異なる
Bundle への依存
• OSGi環境下の場合
System app Ext Boot
a a2
b c
宣言された Bundle で解決
69
QCon Tokyo 2010
70. Bundle = JAR + メタデータ
70
QCon Tokyo 2010
71. JARとして
使える
71 http://www.flickr.com/photos/suewaters/2011571473/
QCon Tokyo 2010
72. 欠点
• 独自のクラスロード構造
– ContextClassLoaderを頼ったライブラリの
利用が困難
• 対処法:
• →クラスローダの入れ替え System G
• →ライブラリ側で順次対応
A B C
• →OSGi実装での拡張
D E F
72
QCon Tokyo 2010
73. メタデータに必要なもの
• 名前
• 依存関係
– 必要なもの
– 公開範囲
• バージョン
73
QCon Tokyo 2010
74. OSGi のメタデータの書き方
META-INF/MANIFEST.MFに記述
シンボル名:Bundle-SymbolicName
バージョン:Bundle-Version
依存関係
必要なパッケージ:Import-Package
公開パッケージ:Export-Package
• ローカルクラスパス:Bundle-ClassPath
74
QCon Tokyo 2010
75. Visibility と Accessibility
参照性とアクセス性
参照 利用 アクセス
タイプ=
interface+
可能 可能 可能
class
アクセス可能とは、モジュールが公開しているか?
MANIFEST.MFでアクセス可能範囲を宣言
75
QCon Tokyo 2010
76. OSGi の 3 大要素
モジュールシステム
サービス連携
動的 (Dynamic)
http://www.flickr.com/photos/yourdon/2921734152/
77. Declarative Service
• Consumer(要求側)とProvider(供給側)
• Consumerは、必要なIFを宣言
• Providerは供給できるIFと、実装を宣言
POJO
77
QCon Tokyo 2010
78. DI コンテナ→ OSGi コンテナ
サービスはDIパターンが非常に有効
→テスト容易性の向上
インタフェースと実装を明確に分離
http://www.flickr.com/photos/danielspils/58586596/
78
QCon Tokyo 2010
80. Extender パターン
• Declarative Seriviceには内部互換性
80
QCon Tokyo 2010
81. Declarative Service
実装
• Equinox DS
• Felix DS
• iPOJO
• Google Guice peaberry
• Blueprint Service系
– Eclipse Gemini(Spring DM)
– Apache Aries
81
QCon Tokyo 2010
82. OSGi の 3 大要素
モジュールシステム
サービス連携
動的 (Dynamic)
http://www.flickr.com/photos/yourdon/2921734152/
83. Dynamic
VM稼働中にBundleの構成を変更
→install,update,uninstall,start,stop,refresh
実行中のBundleの状態が見える
http://www.flickr.com/photos/clearlyambiguous/165316414/
83
QCon Tokyo 2010
84. OSGi の実装
http://www.flickr.com/photos/yourdon/29217341
52/
85. OSGi の実装
• オープンソースプロジェクトが4種類
スタンスが異なる
85
QCon Tokyo 2010
86. Equinox
• よみ:いくいのっくす
• 開発元:Eclipse Foundation
• Eclipseの基盤
OSGi Core Spec R4.2 の参照実装
• 実践主義(仕様へフィードバック)
• アプリケーションの基盤向け
86
QCon Tokyo 2010
87. Equinox の特徴
• Eclipse-BuddyPolicy
– 境界を制御する宣言
– 例:スクリプト言語、log4j
• Bundle-ActivationPolicy
– Bundleが必要になるまでロードせず。
– →起動時間の改善
87
QCon Tokyo 2010
88. Eclipse-BuddyPolicy
System Script
Engine
A B C
JAR+メタデータ
E
• Bundle(バンドル) D F
Model
88
QCon Tokyo 2010
89. Felix
• よみ:ふぇりっくす
• 開発元:Apache Foundation
OSGi Service Spec R4を実装
• 仕様への互換性を重視
• 既存アプリケーションへの組み込みを視野
89
QCon Tokyo 2010
90. Felix の特徴
• 既存のアプリとFelix内のBundleで連携
90
QCon Tokyo 2010
91. knopflerfish
• よみ:ノプラフィッシュ
• 開発元:makewave
• OSGi R3を実装済み R4を実装中
商用サポートあり
91
QCon Tokyo 2010
92. Concierge OSGi
• よみ:コンシェルジュ
• 開発元:Sourceforge.netのプロジェクト
• OSGi R3を実装
• 組込向けに特化
– ファイルフットプリント等
92
QCon Tokyo 2010
93. Pax Runner
• Equinox,Felix,knopflerfish,Conciergeの
• 切り替えをサポート
93
QCon Tokyo 2010
94. OSGi の導入効果
http://www.flickr.com/photos/yourdon/2921734152/
95. OSGiはすべてのメンバーでのソリュー
ション作成を強力に支援。
その力のいくらかはシステムエンジニ
アリングを越えて拡大し、ソーシャルエ
ンジニアリングに及んでいます。
Equinoxのリード開発者
Jeff McAffer氏の言葉
95
QCon Tokyo 2010
96. ソーシャルエンジニアリングとは
チーム開発が変わっていく事
プラットフォームチーム アプリ開発チーム
• 開発チーム毎にBundleを担当
• プロセスや実装を独自に改善
http://www.flickr.com/photos/jragon/299011871/
96
QCon Tokyo 2010
97. ソーシャルエンジニアリングとは
チーム開発が変わっていく事
プラットフォームチーム アプリ開発チーム
• プラットフォームチームの提供IFで
• アプリケーションを開発
http://www.flickr.com/photos/jragon/299011871/
97
QCon Tokyo 2010
98. ソーシャルエンジニアリングとは
チーム開発が変わっていく事
プラットフォームチーム アプリ開発チーム
• アプリチームは提供IFを拡張して
開発を進める事もできる
http://www.flickr.com/photos/jragon/299011871/
98
QCon Tokyo 2010
99. ソーシャルエンジニアリングとは
チーム開発が変わっていく事
プラットフォームチーム アプリ開発チーム
• 提供IFの拡張はプラットフォームに
フィードバック
http://www.flickr.com/photos/jragon/299011871/
99
QCon Tokyo 2010
100. インテグレーションの手違いを
撲滅
PFチーム アプリAチーム アプリBチーム
インテグレーション環境
集めたバイナリの間違いを実行時に確認できる。
http://www.flickr.com/photos/jragon/299011871/
100
QCon Tokyo 2010
101. Polyglot( 多言語 )OSGi
System G
A B C
JVM上の言語も
モジュール対応 JRuby Scala Groovy
進行中
101
QCon Tokyo 2010
102. Bundle のテスト
http://www.flickr.com/photos/yourdon/29217341
52/
103. 単体テストと統合テスト
System G
A B C
JAR+メタデータ
• Bundle(バンドル) D E F
103
QCon Tokyo 2010
104. Mock Service の注入
Mock Serviceをコンテナに注入
動作の大まかな確認
Mockito (http://mockito.org/)
http://www.flickr.com/photos/takuma104/43113749
104
34/ QCon Tokyo 2010
105. Pax Exam
• 統合テスト用のツール
• Bundleの構成やOSGiコンテナの変更
105
QCon Tokyo 2010
106. アジェンダ
• モジュラリティの重要性
• Project Jigsaw と OSGi
• モジュール設計の勘どころ
106
QCon Tokyo 2010
108. 良い垣根は良い隣人を育む
by Jef f McAf fer
http://www.flickr.com/photos/tambako/3451214734/
110. まとめ:
複雑なシステム
→小さく・独
立・組み合わせ
110
QCon Tokyo 2010
112. 何か質問は
ございますか?
112
QCon Tokyo 2010
113. 質問は
Kompiro@
gmail.com
113
まで
QCon Tokyo 2010