成長できるエンタープライズシステムを目指して-osgiによるモジュール型アーキテクチャの実現-...

83
Developers Summit 2010 近藤寛喜 株式会社チェンジビジョン 開発部 19-C-3 成長できるエンタープライズシ 成長できるエンタープライズシ ステムを目指して ステムを目指して OSGi OSGi によるモジュール型アーキテクチャの実現 によるモジュール型アーキテクチャの実現

Upload: hiroki-kondo

Post on 12-Nov-2014

4.248 views

Category:

Documents


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

近藤寛喜株式会社チェンジビジョン開発部

19-C-3

成長できるエンタープライズシ成長できるエンタープライズシステムを目指してステムを目指してOSGiOSGiによるモジュール型アーキテクチャの実現によるモジュール型アーキテクチャの実現

Page 2: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
Page 3: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

自己紹介

Page 4: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

アジェンダアジェンダ

• システムを継続的に成長させるには?システムを継続的に成長させるには?• OSGiOSGiとは?とは?• BundleBundle設計の六個の勘どころ設計の六個の勘どころ• デモデモ• OSGiOSGiがもたらす未来がもたらす未来

Page 5: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

一一..システムを持続的にシステムを持続的に 成長させるには? 成長させるには?

Page 6: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

システムはそもそも複雑なものシステムはそもそも複雑なもの

http://www.flickr.com/photos/adc/411821495/

Page 7: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

複雑なシステムを複雑なシステムをわかりやすく構築するにはわかりやすく構築するには

どうしたらよいですか?どうしたらよいですか?

Page 8: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

複雑なシステムを構成するには複雑性を軽減する仕組みが必要

Page 9: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

オブジェクト指向も、構造化設計もオブジェクト指向も、構造化設計も複雑性を軽減させる仕組み複雑性を軽減させる仕組み

http://www.flickr.com/photos/procsilas/392877509/

Page 10: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

•例:例:EclipseEclipse

高い成長性を維持

Page 11: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

EclipseEclipseの成長の要因の一つは、の成長の要因の一つは、

モジュール型アーキテクチャモジュール型アーキテクチャにあるにある

Page 12: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

モジュール型アーキテクチャモジュール型アーキテクチャhttp://www.flickr.com/photos/37hz/1247083341/

Page 13: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

スモールイズビューティフルスモールイズビューティフル

http://www.flickr.com/photos/mdpettitt/2665598298/

Page 14: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

スモールイズビューティフルスモールイズビューティフル

• 柔軟な構成を取れる柔軟な構成を取れる• 保守しやすい保守しやすい• 理解が簡単理解が簡単• 再利用しやすい再利用しやすい• … … 等々等々

Page 15: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

普通の普通のJavaJavaだったら・・・だったら・・・http://www.flickr.com/photos/morberg/3146874095/

Page 16: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

Q.JARQ.JARででモジュールシステムを構成モジュールシステムを構成

できないの?できないの?

Page 17: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

A.A.できないことはないです。できないことはないです。でもモジュールとして維持するのがでもモジュールとして維持するのが

大変。大変。

Page 18: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

JavaJavaのクラスロードモデルのクラスロードモデルブート

クラスローダ

A B C

D E F

G

拡張クラスローダ

アプリケーションクラスローダ

JAR

依存

Page 19: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

つまり・・・つまり・・・

• JARJARをモジュールとして分離し、をモジュールとして分離し、再利用再利用• →→必要な必要なJARJARが無いが無い• →→ClassNotFoundExceptionClassNotFoundExceptionでクラッシュでクラッシュ

JARJARには暗黙的な依存関係が存在には暗黙的な依存関係が存在

Page 20: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

JARは依存するJARの情報を持っていません

Page 21: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

アプリケーションアプリケーションクラスローダの中クラスローダの中

http://www.flickr.com/photos/shareski/3481154470/

Page 22: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

APPクラスローダでは変更した時の影響範囲が分かりません

Page 23: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

再利用の二つの軸再利用の二つの軸

時間軸時間軸

空間軸空間軸((機能機能 ::ライブラリ等ライブラリ等 ))

Page 24: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

成長するシステムとは時間軸での再利用ができるシステムの事

Page 25: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

新しい要件に対応する度にシステムを全部更新をしますよね?

Page 26: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

規模が大きくなるにつれ、どうなっていきますか?

Page 27: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

システムを全部更新する=影響が分からないので全テスト

Page 28: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

ごちゃごちゃのシステムごちゃごちゃのシステム

http://www.flickr.com/photos/joiseyshowaa/2402764792/

Page 29: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

見通しよく整理する見通しよく整理する

http://www.flickr.com/photos/cheltenham/4100341188/

Page 30: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

システムを分割し、影響範囲を限定するため独立させたい

Page 31: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

依存情報があれば、依存情報からテスト範囲を限定できます

Page 32: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

どうやって?どうやって?

http://www.flickr.com/photos/oddwick/1765661986/

Page 33: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

•EclipseEclipseの例の例

プロジェクト間の独立性と依存関係の整理がキー

Page 34: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

まとめ:複雑なシステム→小さく・独立・組み合わせ

Page 35: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

モジュール型システムの問題モジュール型システムの問題

• 開発コスト開発コスト– 意識しない時の意識しない時の33倍倍

• 独立性の担保独立性の担保• 依存関係の整理依存関係の整理

• 規模が小さい時は規模が小さい時は××    →例    →例::設計したら設計したら11モジュールモジュール

宮本武蔵・五輪書より武器や流派にこだわるな

使うべき場所を見誤らないように

Page 36: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

二二.OSGi.OSGiとは?とは?

Page 37: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

OSGiOSGiとはとは

• Open Service Gateway initiativeOpen Service Gateway initiativeの略の略• 「オープンなサービスゲートウェイの推進」「オープンなサービスゲートウェイの推進」

• Dynamic Dynamic Module SystemsModule Systems for Java for Java

• JavaJavaのための動的なのための動的なモジュールシステムモジュールシステム

Page 38: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

OSGiOSGiとはとは

黒船来航

Page 39: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

増える増えるOSGiOSGiの利用例の利用例

• King of Java Application's infrastructureKing of Java Application's infrastructure

• By Neil BartlettBy Neil Bartlett

Page 40: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

どんなところで有効なの?どんなところで有効なの?

• 継続して成長させたいシステム継続して成長させたいシステム– ツールツール– WebWebサービスサービス– エンタープライズシステムエンタープライズシステム

• お客さん毎に違う機能セットを提供したいお客さん毎に違う機能セットを提供したい– パッケージのカスタムパッケージのカスタム

• プラグインシステムを提供したいプラグインシステムを提供したい

Page 41: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

OSGiOSGiのの33大要素大要素モジュールシステムモジュールシステムサービス連携サービス連携動的動的 ((DynamicDynamic))

http://www.flickr.com/photos/yourdon/2921734152/

Page 42: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

OSGiOSGiのの33大要素大要素モジュールシステムモジュールシステムサービス連携サービス連携動的動的 (Dynamic)(Dynamic)

http://www.flickr.com/photos/yourdon/2921734152/

Page 43: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

OSGiOSGiを使ってを使って

モジュールシステムを構築すると、モジュールシステムを構築すると、

クラスローダの関係はこうなります。クラスローダの関係はこうなります。

Page 44: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

OSGiOSGiのクラスロードモデルのクラスロードモデル

System

A B C

D E FJAR+メタデータ• Bundle(バンドル)

G

Page 45: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

利点利点

• 依存する依存するBundleBundleごと他のシステムへごと他のシステムへ– →→EclipseEclipseのプラグインのインストールのプラグインのインストール

• 依存の宣言がない依存の宣言がないBundleBundle同士は分離同士は分離• →→BundleBundle内の変更が他に影響しにくい内の変更が他に影響しにくい

• →→BundleBundleごとにごとに独立できる独立できる

Page 46: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

Bundle = Bundle = JARJAR + + メタデータメタデータ

今まで通りの環境でも使える今まで通りの環境でも使える

Page 47: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

欠点欠点

• 独自のクラスロード構造独自のクラスロード構造– Class.forName()Class.forName()が使えないが使えない– →→クラスローダが異なるクラスは読めないクラスローダが異なるクラスは読めない– リソースが読めないリソースが読めない– →→クラスローダがクラスローダが((同上同上))

• 対処法対処法::• →→クラスローダの入れ替えクラスローダの入れ替え

System

A B C

D E F

G

Page 48: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

OSGiOSGiのメタデータののメタデータの書き方一例書き方一例

META-INF/MANIFEST.MFMETA-INF/MANIFEST.MFに記述に記述 シンボル名 シンボル名:Bundle-SymbolicName:Bundle-SymbolicName

 バージョン バージョン:Bundle-Version:Bundle-Version

 依存関係 依存関係

  必要なパッケージ  必要なパッケージ:Import-Package:Import-Package

  公開パッケージ  公開パッケージ:Export-Package:Export-Package

Page 49: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

OSGiOSGiメタデータのメタデータの一例一例

Page 50: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

メタデータがあるので・・・メタデータがあるので・・・

• パッケージによる公開・非公開の制御パッケージによる公開・非公開の制御• JARJARに必要なパッケージの宣言に必要なパッケージの宣言• →→パッケージを公開しているパッケージを公開しているJARJAR必要必要• →→依存関係を定義依存関係を定義できるできる

Page 51: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

依存の定義方法依存の定義方法

• パッケージによる依存定義パッケージによる依存定義– Import-PackageImport-Package

• BundleBundleによる依存定義による依存定義– Require-BundleRequire-Bundle

• それぞれ依存するバージョンを範囲で指それぞれ依存するバージョンを範囲で指定定

Page 52: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

バージョンバージョン (1)(1)定義方法定義方法

• MavenMavenとはちょっと違うバージョン定義とはちょっと違うバージョン定義• メジャーメジャー..マイナーマイナー..パッチパッチ..識別子識別子

–例例:1.2.0.beta1:1.2.0.beta1

• 識別子には文字列が使える識別子には文字列が使える–ただし、識別子がついている方が上位として認識ただし、識別子がついている方が上位として認識–例:例:1.2.01.2.0よりも、よりも、1.2.0.beta11.2.0.beta1の方が上位の方が上位

• 定義されていない場合は定義されていない場合は0.0.00.0.0

Page 53: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

バージョンバージョン (2)(2)範囲指定範囲指定

• 「開区間」、「閉区間」、「暗黙」の「開区間」、「閉区間」、「暗黙」の33種種

• [1.0.0, 2.0.0] → 1.0.0 ≦[1.0.0, 2.0.0] → 1.0.0 ≦バージョンバージョン≦≦2.0.02.0.0

• [1.0.0, 2.0.0) → 1.0.0 ≦[1.0.0, 2.0.0) → 1.0.0 ≦バージョン<バージョン<2.0.02.0.0

• バージョン “バージョン “1.*” 1.*” を指すを指す• 1 → [1.0.0, ∞)1 → [1.0.0, ∞)• 未指定 → 未指定 → [0.0.0, ∞)[0.0.0, ∞)

Page 54: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

バージョンの異なるバージョンの異なるJARJARへの依存への依存

• java -cp a.jar b.jar c.jar a_v2.jarjava -cp a.jar b.jar c.jar a_v2.jar• ((通常フラットなクラスパスの場合通常フラットなクラスパスの場合))

先に宣言された先に宣言されたJARJARで解決で解決

app

a

Ext Boot

b c a2

Page 55: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

バージョンの異なるバージョンの異なるBundleBundleへの依存への依存

• OSGiOSGi環境下の場合環境下の場合

宣言された宣言されたBundleBundleで解決で解決

app

a

Ext Boot

b c

a2

System

Page 56: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

OSGiOSGiのの33大要素大要素モジュールシステムモジュールシステム動的動的 (Dynamic)(Dynamic)サービス連携サービス連携

http://www.flickr.com/photos/yourdon/2921734152/

Page 57: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

Declartive ServiceDeclartive Service((サービスの宣言サービスの宣言 ::利用側利用側 ))

• 一部抜粋一部抜粋

Page 58: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

Declartive ServiceDeclartive Service((サービスの宣言:提供側サービスの宣言:提供側 ))

• 一部抜粋一部抜粋

Page 59: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

Declartive ServiceDeclartive Service((サービスの宣言サービスの宣言 ))

• Consumer(Consumer(要求側要求側))ととProvider(Provider(供給側供給側))• ConsumerConsumerは、必要なは、必要なIFIFを宣言を宣言• ProviderProviderは供給できるは供給できるIFIFと、実装を宣言と、実装を宣言

• 特別な特別なIFIF、アノテーションは不要、アノテーションは不要

Page 60: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

Declarative ServiceDeclarative Service((サービスの宣言サービスの宣言 ))

• 実装間で相互運用可実装間で相互運用可– Declarative Service(XML/Annotation)Declarative Service(XML/Annotation)– Blueprint Service(Spring DM/Aries)Blueprint Service(Spring DM/Aries)– Google Guice PeaberryGoogle Guice Peaberry– iPOJOiPOJO

Page 61: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

OSGiOSGiのの33大要素大要素モジュールシステムモジュールシステムサービス連携サービス連携動的動的 (Dynamic)(Dynamic)

http://www.flickr.com/photos/yourdon/2921734152/

Page 62: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

DynamicDynamic

• 稼働中に稼働中にBundleBundleの構成を変更できるの構成を変更できる• →→install,update,uninstall,start,stop,refreshinstall,update,uninstall,start,stop,refresh• 必要になった必要になったBundleBundleを更新を更新

• →→こんな事ができるのは、こんな事ができるのは、BundleBundleごとにごとに独立独立してるからこそ。してるからこそ。

Page 63: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

四四.Bundle.Bundle設計の六つの勘どころ設計の六つの勘どころ

Page 64: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

BundleBundle設計の勘どころ設計の勘どころ一一 ..大きくしすぎない大きくしすぎない

• 大きくなったら分割を検討大きくなったら分割を検討• →→複数の役目を担当?複数の役目を担当?• →→新機能のためにライブラリ追加新機能のためにライブラリ追加??• これらは大きくなる兆候です。これらは大きくなる兆候です。

Page 65: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

BundleBundle設計の勘どころ設計の勘どころ二二 ..登録サービスを限定登録サービスを限定

• 複数のサービスを登録複数のサービスを登録• →→BundleBundleが複数の責務を担っているが複数の責務を担っている• BundleBundleが大きくなる兆候が大きくなる兆候• BundleBundleを小さくするためにを小さくするために• →→登録サービスは限定する登録サービスは限定する

Page 66: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

BundleBundle設計の勘どころ設計の勘どころ三三 ..役割を明確に役割を明確に

• 33種別の種別のBundle(by Bundle(by うじょさんうじょさん))

• API Bundle → API Bundle → インタフェースのみインタフェースのみ• Library Bundle → Library Bundle → これまでのこれまでのJARJAR

• Service Bundle → Service Bundle → サービス登録サービス登録//利用利用

• その他その他– Mock Bundle → API BundleMock Bundle → API Bundleを空実装を空実装

Page 67: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

BundleBundle設計の勘どころ設計の勘どころ四四 ..公開パッケージを限定する公開パッケージを限定する

• 他の他のBundleBundle開発中の、間違えを防ぐ開発中の、間違えを防ぐ– 不要な依存を増やしやすい。不要な依存を増やしやすい。– 依存が増える→独立性が悪化依存が増える→独立性が悪化– 変更による影響を及ぼしやすくする。変更による影響を及ぼしやすくする。

非公開パッケージ名の規約として、パッケージ名を”*.internal.*”と明示

Page 68: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

BundleBundle設計の勘どころ設計の勘どころ五五 .Bundle=.Bundle=独立したシステム独立したシステム

• 隣の芝生は青い隣の芝生は青い• システムまたげばシステムまたげばDRYDRYは通用せずは通用せず

– 非公開クラスを利用非公開クラスを利用– →→コピーを検討コピーを検討– →→別途別途BundleBundleにするにする– 良い垣根は良いお隣さんを育む良い垣根は良いお隣さんを育む– By Jeff McafferBy Jeff Mcaffer

Page 69: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

BundleBundle設計の勘どころ設計の勘どころ六六 .Bundle.Bundleをまたいだ継承、をまたいだ継承、静的参照は静的参照は××

• 期待した通りに動作しない事が多いです。期待した通りに動作しない事が多いです。• →→デモ作成でハマりました。デモ作成でハマりました。• →→思い返すといい思い出がありません。思い返すといい思い出がありません。

– →→publicpublicなのに、参照できず落ちるなのに、参照できず落ちる• →→やろうと思えばやれるやろうと思えばやれる==バッドノウハウバッドノウハウ

Page 70: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

BundleBundle設計の勘どころ設計の勘どころまとめまとめ

• 一一..大きくしすぎない大きくしすぎない• 二二..登録サービスを限定登録サービスを限定• 三三..種別毎に分割する種別毎に分割する• 四四..公開パッケージを限定公開パッケージを限定• 五五.Bundle=.Bundle=独立したシステム独立したシステム• 六六..不要な継承、静的参照はしない不要な継承、静的参照はしない

小さい

独立

Page 71: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

まとめ:複雑なシステム→小さく・独立・組み合わせ

Page 72: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

四四..デモデモ

Page 73: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

動的に切り替えます。Bundleが独立している事を実感してください。(開発環境:Spring DM(1.2.1)+Maven)http://github.com/kompiro/osgi-demo-bookstore.git

こんぴろ書店こんぴろ書店 ((デブサミ支店デブサミ支店 ))

• 書籍登録書籍登録• 書籍検索書籍検索• それぞれ別々のそれぞれ別々のBundleBundleで開発で開発

Page 74: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

System

books

booksmock

web.admin

web

初期構成初期構成

books.domain

依存

サービス提供

Page 75: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

System

booksbooksmock

web.admin

web

一一 .mock.mockからから implimplにに

books.domain

依存

サービス提供

booksimpl

books2

Page 76: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

System

booksbooksmock

web.admin

web

二二 .mock.mockとと implimplを共存を共存((システムの一部が旧バージョンシステムの一部が旧バージョン ))

books.domain

依存

サービス提供

booksimpl

books2

Page 77: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

五五.OSGi.OSGiがもたらす未来がもたらす未来

Page 78: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

Polyglot(Polyglot(多言語多言語 )OSGi)OSGi

System

A B C

JRuby Scala Groovy

G

Page 79: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

必要なサービスを必要な時に必要なサービスを必要な時に

システムが能動的に取得システムが能動的に取得

Page 80: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

参考文献参考文献

Page 81: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

本日盛り込まなかった内容本日盛り込まなかった内容

• 標準化標準化• スクリプト言語との対応スクリプト言語との対応• 実装毎の細かな差異実装毎の細かな差異• 具体的なテスト方法具体的なテスト方法(UnitTest(UnitTest等等))

Page 82: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-

Developers Summit 2010

まとめ:複雑なシステム→小さく・独立・組み合わせ

Page 83: 成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-