狠狠撸

狠狠撸Share a Scribd company logo
Java における
    モジュラリティ元年



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




1
          QCon Tokyo 2010
谢辞

    ?   参加を認めてくれた平鍋さん始め
    ?   Change Visionのみんな
    ?   講演させてくださったInfoQ Japanの皆様
    ?   事前にレビューしてくださった
    ?   原田さん、安井さん、河村さん、
    ?   雄介さん、北條さん
    ?   ありがとうございました!
2
                QCon Tokyo 2010
自己绍介
アジェンダ

    ?   モジュラリティの重要性
    ?   Project Jigsaw と OSGi
    ?   モジュール設計の勘どころ



4
               QCon Tokyo 2010
アジェンダ

    ?   モジュラリティの重要性
    ?   Project Jigsaw と OSGi
    ?   モジュール設計の勘どころ



5
               QCon Tokyo 2010
InfoQ でも記事多数 !!

    ?   Neil Bartlett氏
         –   Introduction of OSGi
         –   Neil Bartlett on OSGi(インタビュー)
    ?   Alex Bletwitt氏
         – Modular Javaシリーズ
         – Bundle.updateシリーズ


6
                    QCon Tokyo 2010
日本では???


       未だ
      情報少ない
7
          QCon Tokyo 2010
なぜモジュール化が
    重要になってきたか?


8
       QCon Tokyo 2010
ソフトウェアは
複雑
   http://www.flickr.com/photos/15928286@N07/2168229708/
Q :自動車の場合?
    http://www.flickr.com/photos/cytech/4386280055/
A:1 億 LOC
   http://www.flickr.com/photos/cytech/4386280055/
1990




                  1200億
            (原文)http://users.jyu.fi/~koskinen/smcosts.htm
12                          http://www.flickr.com/photos/royalport/416330036/
                     QCon Tokyo 2010
2000




              2500億
        (原文)http://users.jyu.fi/~koskinen/smcosts.htm
13                        http://www.flickr.com/photos/listener42/3665881441/
                     QCon Tokyo 2010
7年毎に2倍
     (原文)http://users.jyu.fi/~koskinen/smcosts.htm




14
                    QCon Tokyo 2010
毎年11%↑
15
       QCon Tokyo 2010
2010




            5000億
                     http://www.flickr.com/photos/thelastminute/4371562997/
16
             QCon Tokyo 2010
2017




                              1兆
                 http://www.flickr.com/photos/15928286@N07/2168229708/
17
            QCon Tokyo 2010
大変
規模の拡大から
来る複雑性を軽
減する仕組みが
必要
構造化指向も
  オブジェクト指向も
複雑性を軽減させる仕組み


  http://www.flickr.com/photos/procsilas/39287750
  9/
見通しよく
整理する


 http://www.flickr.com/photos/cheltenham/410034118
 8/
システムの中に
     いくつかの境界を作り、
          分ける
       → モジュール化

22
         QCon Tokyo 2010
モジュラリティとは、
      モジュールを使って
     システムを構成すること

23
         QCon Tokyo 2010
モジュール化のレイヤ

        システム                    SOA

        APP                     ???

                                マイクロ
24
        OS    QCon Tokyo 2010
                                カーネル
モジュール化の利点 (1)
情報隠蔽の促進
http://www.flickr.com/photos/8011986@N02/2681415971/
モジュール化の利点 (2)
依存関係の整理
   http://www.flickr.com/photos/oddwick/1765661986/
モジュール化の利点 (3)
再利用を促進
  http://www.flickr.com/photos/comedynose/4012525634/
再利用の二つの轴



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



                   時間軸
                  ( 使いつづける )

28
                    QCon Tokyo 2010
モジュール化の利点のまとめ

     ?   情報隠蔽の促進
     ?   →実装を公開しないでもよい
     ?   依存関係を定義
     ?   →システムの動作に必須のものが分かる
     ?   再利用を促進
     ?   →実装量を削減と継続利用の促進


29
              QCon Tokyo 2010
Java だったら???
  http://www.flickr.com/photos/morberg/3146874095/
JAR で運用
http://www.flickr.com/photos/alexkerhead/3123914969/
蚕.闯础搁だけで
     モジュールシステムを構成
        できないの?


32
         QCon Tokyo 2010
础.闯础搁だけでは
     モジュールシステムとし
     て運用するのは厳しい

33
         QCon Tokyo 2010
Java のクラスロードモデル
        依存          拡張                   ブート
                  クラスローダ               クラスローダ
       JAR


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

             A               B         C


                                           G
             D
                             E     F

34
                 QCon Tokyo 2010
中身を展開
http://www.flickr.com/photos/shareski/3481154470/
ごちゃ
 ごちゃ
http://www.flickr.com/photos/joiseyshowaa/2402764792/
Visibility と Accessibility
     参照性とアクセス可能性


              参照
 タイプ=
 interface+
              可能
 class

        参照可能とは、あるタイプが他のタイプを参照できるか?
        JARがVMに読み込まれた状態
37
                   QCon Tokyo 2010
Visibility と Accessibility
     参照性とアクセス可能性


              参照 利用 アクセス
                      
 タイプ=
 interface+
              可能 可能 可能
 class

      アクセス可能とは、モジュールの公開範囲を指す。

38
                QCon Tokyo 2010
アクセス可能範囲で整理
 http://www.flickr.com/photos/joiseyshowaa/2402764792/
モジュール化の欠点

     ?   開発コスト
          –   意識しない時の3倍
               ?   独立性の担保
               ?   依存関係の整理
     ?   規模が小さい時は×
         →例:設計したら1モジュール


         使うべき場所を
         見誤らないように                      宮本武蔵?五輪書より
40                                     武器や流派にこだわるな
                     QCon Tokyo 2010
既存システムの
モジュール化
  http://www.flickr.com/photos/tanaka_juuyoh/429440983
       1/
難しい
http://www.flickr.com/photos/tanaka_juuyoh/4294409831/
モジュール化は
早い時期から検討を
  http://www.flickr.com/photos/alaina_marie/4377282773
         /
アジェンダ

     ?   モジュラリティの重要性
     ?   Project Jigsaw と OSGi
     ?   モジュール設計の勘どころ



44
                QCon Tokyo 2010
Project Jigsaw を一言で



     ?   次世代Java標準の
     ?   モジュールシステム

45
             QCon Tokyo 2010
OSGi を一言で言うと



     モジュールシステムの
     デファクトスタンダード

46
            QCon Tokyo 2010
OSGi vs
Project Jigsaw
    http://www.flickr.com/photos/laurelfan/46009085/
協力
 http://www.flickr.com/photos/aidan_jones/1234618279/
EclipseCon 2010 にて

     Project JigsawとOSGiの相互運用
     →OSGiのモジュールがJigsawでも使える
     Oracleの Steve Harris氏とJeet Kaul 氏




49
                  QCon Tokyo 2010
Project Jigsaw


50
          QCon Tokyo 2010
Project Jigsaw とは

      問題:Javaプロセスの起動が遅い
      →起動時間?メモリフットプリントの改善したい

      ?   JDKクラスライブラリをモジュール化
      ?   Java SEもモジュールで分割
          –   起動時に必要なモジュール構成で
      ?   Java7の目玉の一つ!

51
                  QCon Tokyo 2010
Visibility と Accessibility
     参照性とアクセス性


                参照 利用 アクセス
                        
 タイプ=
 interface+
                可能 可能 可能
 class

      アクセス可能とは、モジュールが公開しているか?
      識別子public/protected/default/privateにmodule追加
      publicとmoduleはmodule外への公開/非公開の区分
52
                        QCon Tokyo 2010
メタデータに必要なもの

                       ?     名前
                       ?     依存関係
                             –   必要なもの
                             –   公開範囲
                       ?     バージョン




53
           QCon Tokyo 2010
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
複雑に絡みあう JDK




55                       http://www.flickr.com/photos/adc/411821495/
           QCon Tokyo 2010
大変
Pr oject Jigsaw
                        絶賛開発中
http://www.flickr.com/photos/tanaka_juuyoh/429440983
1/
OSGi


58
     QCon Tokyo 2010
OSGi とは

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


     ?   OSGi Allianceで標準化

     ?   Dynamic Module Systems for Java
     ?   Javaのための動的なモジュールシステム

59
                    QCon Tokyo 2010
増える利用例




60
          QCon Tokyo 2010
astah* の事例




            ? 既存機能のカスタマイズや拡張
        ?   モジュールによるプラグインシステム
61
                QCon Tokyo 2010
Linked in の事例




     ?   約2ヶ月かけて自社サービスをモジュール化
             複数バージョンのモジュールを利用
62       http://www.springsource.com/files/uploads/datasheets/Linkedin-Case-Study.pdf
                               QCon Tokyo 2010
OSGi の 3 大要素
モジュールシステム
サービス連携
動的 ( Dynamic )
      http://www.flickr.com/photos/yourdon/29217341
      52/
OSGi の 3 大要素
モジュールシステム
サービス連携
動的 (Dynamic)
     http://www.flickr.com/photos/yourdon/29217341
     52/
翱厂骋颈を使って
     モジュールシステムを構築すると、
     クラスローダの関係はこうなります。




65
           QCon Tokyo 2010
OSGi のクラスロードモデル
                                System       G




                  A                 B        C


 JAR+メタデータ
 ? Bundle(バンドル)   D                 E    F



66
                      QCon Tokyo 2010
クラスローダにより区分け
   http://www.flickr.com/photos/joiseyshowaa/240276479
          2/
バージョンの异なる
     JAR への依存
     ?   java -cp a.jar;b.jar;c.jar;a_v2.jar
     ?   (通常フラットなクラスパスの場合)

          app                Ext            Boot




            a          b                c      a2



68
     先に見つけた JAR で解決   QCon Tokyo 2010
バージョンの异なる
     Bundle への依存
      ?   OSGi環境下の場合
     System           app                 Ext       Boot



                  a                      a2


              b                                 c

     宣言された Bundle で解決
69
                            QCon Tokyo 2010
Bundle =   JAR               + メタデータ




70
                QCon Tokyo 2010
闯础搁として
      使える
71          http://www.flickr.com/photos/suewaters/2011571473/
       QCon Tokyo 2010
欠点

     ?   独自のクラスロード構造
          –   ContextClassLoaderを頼ったライブラリの
              利用が困難
     ?   対処法:
     ?   →クラスローダの入れ替え                     System       G
     ?   →ライブラリ側で順次対応
                                      A     B          C
     ?   →OSGi実装での拡張
                                      D     E      F
72
                    QCon Tokyo 2010
メタデータに必要なもの

                       ?     名前
                       ?     依存関係
                             –   必要なもの
                             –   公開範囲
                       ?     バージョン




73
           QCon Tokyo 2010
OSGi のメタデータの書き方

     META-INF/MANIFEST.MFに記述
      シンボル名:Bundle-SymbolicName
      バージョン:Bundle-Version
      依存関係
       必要なパッケージ:Import-Package
       公開パッケージ:Export-Package
     ? ローカルクラスパス:Bundle-ClassPath
74
                QCon Tokyo 2010
Visibility と Accessibility
     参照性とアクセス性


              参照 利用 アクセス
                      
 タイプ=
 interface+
              可能 可能 可能
 class

      アクセス可能とは、モジュールが公開しているか?

      MANIFEST.MFでアクセス可能範囲を宣言
75
                 QCon Tokyo 2010
OSGi の 3 大要素
モジュールシステム
サービス連携
動的 (Dynamic)
          http://www.flickr.com/photos/yourdon/2921734152/
Declarative Service
      ?   Consumer(要求側)とProvider(供給側)
      ?   Consumerは、必要なIFを宣言
      ?   Providerは供給できるIFと、実装を宣言




                 POJO 
77
                   QCon Tokyo 2010
DI コンテナ→ OSGi コンテナ




         サービスはDIパターンが非常に有効
                →テスト容易性の向上
          インタフェースと実装を明確に分離

                    http://www.flickr.com/photos/danielspils/58586596/
78
             QCon Tokyo 2010
Whiteboard-model




79
             QCon Tokyo 2010
Extender パターン




     ?   Declarative Seriviceには内部互換性
80
                   QCon Tokyo 2010
Declarative Service
     実装
      ?   Equinox DS
      ?   Felix DS
      ?   iPOJO
      ?   Google Guice peaberry
      ?   Blueprint Service系
           –   Eclipse Gemini(Spring DM)
           –   Apache Aries

81
                       QCon Tokyo 2010
OSGi の 3 大要素
モジュールシステム
サービス連携
動的 (Dynamic)

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

     VM稼働中にBundleの構成を変更
     →install,update,uninstall,start,stop,refresh
     実行中のBundleの状態が見える




                        http://www.flickr.com/photos/clearlyambiguous/165316414/
83
                        QCon Tokyo 2010
OSGi の実装
  http://www.flickr.com/photos/yourdon/29217341
  52/
OSGi の実装

     ?   オープンソースプロジェクトが4種類




      スタンスが異なる
85
               QCon Tokyo 2010
Equinox

     ? よみ:いくいのっくす
     ? 開発元:Eclipse Foundation
     ? Eclipseの基盤
     OSGi Core Spec R4.2 の参照実装

     ?   実践主義(仕様へフィードバック)
     ?   アプリケーションの基盤向け
86
                QCon Tokyo 2010
Equinox の特徴

     ?       Eclipse-BuddyPolicy
         –   境界を制御する宣言
         –   例:スクリプト言語、log4j
     ?       Bundle-ActivationPolicy
         –   Bundleが必要になるまでロードせず。
         –   →起動時間の改善



87
                     QCon Tokyo 2010
Eclipse-BuddyPolicy
                                System       Script
                                             Engine



                  A                 B         C


 JAR+メタデータ
                                  E
 ? Bundle(バンドル)   D                      F
                                 Model


88
                      QCon Tokyo 2010
Felix

     ? よみ:ふぇりっくす
     ? 開発元:Apache Foundation
     OSGi Service Spec R4を実装



     ?   仕様への互換性を重視
     ?   既存アプリケーションへの組み込みを視野

89
                 QCon Tokyo 2010
Felix の特徴

     ?   既存のアプリとFelix内のBundleで連携




90
                QCon Tokyo 2010
knopflerfish

     ?   よみ:ノプラフィッシュ
     ?   開発元:makewave
     ?   OSGi R3を実装済み R4を実装中

     商用サポートあり



91
                QCon Tokyo 2010
Concierge OSGi

     ?   よみ:コンシェルジュ
     ?   開発元:Sourceforge.netのプロジェクト
     ?   OSGi R3を実装

     ?   組込向けに特化
         –   ファイルフットプリント等


92
                  QCon Tokyo 2010
Pax Runner




     ?   Equinox,Felix,knopflerfish,Conciergeの
     ?   切り替えをサポート
93
                    QCon Tokyo 2010
OSGi の導入効果
     http://www.flickr.com/photos/yourdon/2921734152/
翱厂骋颈はすべてのメンバーでのソリュー
         ション作成を強力に支援。
     その力のいくらかはシステムエンジニ
     アリングを越えて拡大し、ソーシャルエ
       ンジニアリングに及んでいます。



            Equinoxのリード開発者
            Jeff McAffer氏の言葉
95
              QCon Tokyo 2010
ソーシャルエンジニアリングとは
     チーム開発が変わっていく事



     プラットフォームチーム             アプリ開発チーム

      ?   開発チーム毎にBundleを担当
      ?   プロセスや実装を独自に改善
                            http://www.flickr.com/photos/jragon/299011871/

96
                   QCon Tokyo 2010
ソーシャルエンジニアリングとは
     チーム開発が変わっていく事



     プラットフォームチーム             アプリ開発チーム

      ?   プラットフォームチームの提供IFで
      ?   アプリケーションを開発
                            http://www.flickr.com/photos/jragon/299011871/

97
                   QCon Tokyo 2010
ソーシャルエンジニアリングとは
     チーム開発が変わっていく事



     プラットフォームチーム             アプリ開発チーム

      ?   アプリチームは提供IFを拡張して
          開発を進める事もできる
                            http://www.flickr.com/photos/jragon/299011871/

98
                   QCon Tokyo 2010
ソーシャルエンジニアリングとは
     チーム開発が変わっていく事



     プラットフォームチーム             アプリ開発チーム

      ?   提供IFの拡張はプラットフォームに
          フィードバック
                            http://www.flickr.com/photos/jragon/299011871/

99
                   QCon Tokyo 2010
インテグレーションの手违いを
      撲滅


      PFチーム    アプリAチーム              アプリBチーム




              インテグレーション環境
       集めたバイナリの間違いを実行時に確認できる。
                          http://www.flickr.com/photos/jragon/299011871/

100
                 QCon Tokyo 2010
Polyglot( 多言語 )OSGi
                               System        G




                 A                 B         C


      JVM上の言語も
      モジュール対応    JRuby          Scala   Groovy
      進行中


101
                     QCon Tokyo 2010
Bundle のテスト
   http://www.flickr.com/photos/yourdon/29217341
   52/
単体テストと统合テスト
                                System       G




                  A                 B        C


 JAR+メタデータ
 ? Bundle(バンドル)   D                 E    F



103
                      QCon Tokyo 2010
Mock Service の注入




                 Mock Serviceをコンテナに注入
                          動作の大まかな確認
                  Mockito (http://mockito.org/)
          http://www.flickr.com/photos/takuma104/43113749
104
          34/         QCon Tokyo 2010
Pax Exam




      ?   統合テスト用のツール
      ?   Bundleの構成やOSGiコンテナの変更
105
                 QCon Tokyo 2010
アジェンダ

      ?   モジュラリティの重要性
      ?   Project Jigsaw と OSGi
      ?   モジュール設計の勘どころ



106
                 QCon Tokyo 2010
闯补惫补におけるモジュラリティ元年
良い垣根は良い隣人を育む
   by Jef f McAf fer
 http://www.flickr.com/photos/tambako/3451214734/
依存関係を小さく
http://www.flickr.com/photos/tambako/3451214734/
まとめ:
      複雑なシステム
      →小さく?独
      立?組み合わせ
110
         QCon Tokyo 2010
参考文献




111
             QCon Tokyo 2010
何か质问は
      ございますか?
112
        QCon Tokyo 2010
质问は
      Kompiro@
      gmail.com
113
        まで
         QCon Tokyo 2010

More Related Content

闯补惫补におけるモジュラリティ元年