2005 JavaOneSM Conference | Session BOF16-08

630 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
630
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • 資料はダウンロード可能にします。アプリケーションも。
  • 挙手: Web2.0 について知っている方・わからない方 SOA については駆け足なります。あとで資料を見て確認してください。
  • 過去の問題 モジュール式設計 -> COBOL など。保守が大変 オブジェクト指向 -> C++ など。複雑 コンポーネント・ベース -> EJB など。すべてに対応できない。
  • Netscape と Google 。どちらもインターネットの寵児だけど、ビジネスモデルがまったく違う。 ロングテール。少ししか売れない本がたくさんの種類売れる。 Amazon では、外部の研究者による推定では上位 100,000 を除く売上が全体の 30-40 %を占める。 20:80 で知られているパレートの法則を覆す
  • 被リンク数が多い、つまりみんなからリンクされているサイトは良いサイトであるというという前提。 SEO 、 SEM の発展。 Forksonomy :Folks( 民族 ) と Taxsonomy( 分類学 ) Blog: テクノラティと予測市場
  • ユーザーが共同開発者のように扱われるなる。 はてなのはてなアイデア
  • Yahoo ! 社の副社長を務め、バイラルマーケティングの提唱者として知られる
  • さて、主題です。 これを象徴する良い言葉があります。
  • 依存レスな世界というのは製品ベンダーに不利ではない。依存レスとは選択肢可能。高品質、高性能を求めるユーザーには商用製品は十分に価値がある。ただし、多様なニーズがある中で従来のような製品ラインナップでシェアを伸ばすのは難しい(オープンソースに流れがちになる)。そこで、こうした多様な市場に対応するようなロングテールな製品をつくっていく必要があるはず
  • Web2.0 的なところ。めーぐる自身は観光情報を保持しない。今後の発展性:ここに行く人は、こんなところも行っています、観光名所ユーザーレビュー、 Servilet Exchange SOA なところ。プラットフォームが管理しているめーぐるマップはプロセス。プロセス全体での予約や支払いを管理。 Servilet
  • Web2.0 的なところ。めーぐる自身は観光情報を保持しない。今後の発展性:ここに行く人は、こんなところも行っています、観光名所ユーザーレビュー、 Servilet Exchange SOA なところ。プラットフォームが管理しているめーぐるマップはプロセス。プロセス全体での予約や支払いを管理。 Servilet
  • Web2.0 的なところ。めーぐる自身は観光情報を保持しない。今後の発展性:ここに行く人は、こんなところも行っています、観光名所ユーザーレビュー、 Servilet Exchange SOA なところ。プラットフォームが管理しているめーぐるマップはプロセス。プロセス全体での予約や支払いを管理。 Servilet
  • PXE( ピクシー)でもいい。
  • DiSP
  • 2005 JavaOneSM Conference | Session BOF16-08

    1. 1. SOA as Web2.0 ? SOA+DI で POJO をリミックス 鈴木 雄介 アークランプ http://www.arclamp.jp/ 北條 育男  ( 株) エーティエル システムズ http://www.atl-systems.co.jp / 稲村 創 (株) EC-One http://www.ec-one.com / @JavaOne2005 Tokyo BOF16-08
    2. 2. SOA についてみんなで考えよう <ul><ul><li>SOA と Web2.0 の現状を知り、開発者視点の SOA がどうあるべきかについて考えてみる </li></ul></ul><ul><ul><li>さらに、今使える技術で作ってみる </li></ul></ul><ul><ul><li>[ 明日からでも SOA してみる ] </li></ul></ul>開発者視点の SOA とは?
    3. 3. Agenda With Section Highlights <ul><li>SOA とは? Web2.0 とは? </li></ul><ul><li>SOA as Web2.0 ? </li></ul><ul><li>開発者視点の SOA を実現する技術とは? </li></ul><ul><li>作ってみました </li></ul>
    4. 4. SOA とは? 1/5 <ul><li>歴史と背景 </li></ul><ul><ul><li>サービス指向アーキテクチャ( Service Oriented Architecture ) </li></ul></ul><ul><ul><li>コンセプトは 10 年以上の歴史がある </li></ul></ul><ul><ul><li>過去のソフトウェア開発の問題を SOA ですべてを解決できる(はず) </li></ul></ul><ul><li>SOA とは、依存レスなサービスを組み合わせてアプリケーションを構築する </li></ul><ul><ul><li>サービスは、プラットフォームに依存しない標準的でオープンな手法で呼び出せる </li></ul></ul>
    5. 5. SOA とは? 2/5 <ul><li>基本的な構造 </li></ul><ul><ul><li>① プロバイダがディレクトリサービスに登録を行う </li></ul></ul><ul><ul><li>② コンシューマがディレクトリサービスに問い合わせてサービスプロバイダを発見する </li></ul></ul><ul><ul><li>③ コンシューマがプロバイダのサービスを利用する </li></ul></ul>サービス・プロバイダ サービス・コンシューマ ディレクトリ・サービス ① ② ③
    6. 6. SOA とは? 3/5 <ul><li>Web サービス </li></ul><ul><ul><li>SOA を実現するための1つの標準化された手法 </li></ul></ul><ul><ul><ul><li>UDDI  ディレクトリサービス </li></ul></ul></ul><ul><ul><ul><li>WSDL   API 規約 </li></ul></ul></ul><ul><ul><ul><li>SOAP  呼び出し </li></ul></ul></ul><ul><ul><ul><li>… </li></ul></ul></ul><ul><ul><li>相互運用性を確保するために HTTP を利用するのが一般的 </li></ul></ul>
    7. 7. SOA とは? 4/5 <ul><li>ビジネスプロセス </li></ul><ul><ul><li>サービス同士の連携を管理する </li></ul></ul><ul><ul><li>長期ビジネスプロセスも管理 </li></ul></ul><ul><li>BPEL ( Business Process Execution Language for Web Services ) </li></ul><ul><ul><li>プロセス定義を標準化した言語の1種 </li></ul></ul><ul><ul><li>EAI 、 BPM の延長 </li></ul></ul><ul><ul><li>モデラーや BPEL エンジンが必要 </li></ul></ul>
    8. 8. SOA とは? 5/5 <ul><li>ESB ( Enterprise Service Bus ) </li></ul><ul><ul><li>サービスがメッセージをやり取りするための伝送経路 </li></ul></ul><ul><ul><li>SOA 版の Message Broker </li></ul></ul><ul><ul><li>ESB エンジンが必要 </li></ul></ul><ul><li>JBI ( Java Business Integration ) </li></ul><ul><ul><li>ESB の標準化を狙ったもの </li></ul></ul>ESB
    9. 9. SOA とは? まとめ <ul><li>SOA </li></ul><ul><ul><li>依存レスなサービスを組み合わせてアプリケーションを構築する </li></ul></ul><ul><li>現在の主流 </li></ul><ul><ul><li>EAI ( Enterprise Application Integration )の延長線上( Web サービスなどで標準化) </li></ul></ul><ul><ul><li>BPEL/ESB 製品を用意する </li></ul></ul>
    10. 10. Web2.0 とは? <ul><li>Web2.0 のグル Tim O’Reilly 曰く </li></ul><ul><li>http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html </li></ul><ul><li>http://japan.cnet.com/column/web20/story/0,2000054679,20090039,00.htm  (日本語訳) </li></ul>
    11. 11. Tim’s Web2.0 1/4 <ul><li>The Web As Platform </li></ul><ul><ul><li>never sold or packaged, but delivered as a service </li></ul></ul><ul><ul><li>the long tail </li></ul></ul><ul><li>ともかく広がりがある </li></ul>
    12. 12. Tim’s Web2.0 2/4 <ul><li>the Wisdom of Crowds </li></ul><ul><ul><li>Google's breakthrough in search … PageRank </li></ul></ul><ul><ul><li>Amazon sells … as Barnesandnoble.com … But Amazon has … user reviews … </li></ul></ul><ul><ul><li>Wikipedia </li></ul></ul><ul><ul><li>Forksonomy ( del.icio.us 、 Flickr ) </li></ul></ul><ul><ul><li>Blog </li></ul></ul><ul><li>みんなの知恵が集まる </li></ul>
    13. 13. Tim’s Web2.0 3/4 <ul><li>Data is the Next “Intel Inside” </li></ul><ul><ul><li>maps.yahoo.com, maps.msn.com, or maps.google.com, and you'll see the line &quot;Maps copyright NavTeq, TeleAtlas,&quot; </li></ul></ul><ul><ul><li>the winner … first … aggregated data into a system service. </li></ul></ul><ul><li>いろいろ使えるデータが重要  </li></ul>
    14. 14. Tim’s Web2.0 4/4 <ul><li>Users must be treated as co-developers </li></ul><ul><li>Design for &quot;hackability&quot; and remixability </li></ul><ul><li>ユーザーがいろいろできる </li></ul>
    15. 15. Web2.0 とは? まとめ <ul><li>マーケティングのグル Seth Godin 曰く… </li></ul><ul><ul><li>Attitude, not technology </li></ul></ul><ul><ul><li>Web 2.0 isn't new, but it's now. </li></ul></ul><ul><li>Web2.0 とは、今、感じるものなんだ </li></ul><ul><li>http://sethgodin.typepad.com/seths_blog/2005/10/tim_o_on_web_20.html </li></ul>
    16. 16. SOA と Web2.0 <ul><li>SOA </li></ul><ul><ul><li>依存レスなサービスを組み合わせるアイデアはイイ ! </li></ul></ul><ul><ul><li>でも、 EAI って言われるとあんまり関係ないなぁ </li></ul></ul><ul><li>Web2.0 </li></ul><ul><ul><li>Web2.0 的って、すごくイイ! </li></ul></ul><ul><ul><li>楽しそうに盛り上がっているけど、 Java は関係ないし、仕事で使わないなぁ </li></ul></ul><ul><li>SOA と Web2.0 なんて、比べるも何も違うもの? </li></ul>
    17. 17. さて、ここからが本題です
    18. 18. SOA as Web2.0 ? SOA と Web2.0 は 実はよく似ているのでは?
    19. 19. JavaOne 2005 SF : Sun General Session <ul><ul><li>The information age </li></ul></ul><ul><ul><li>is history. </li></ul></ul><ul><ul><li>Long live </li></ul></ul><ul><ul><li>the Participation Age . </li></ul></ul><ul><li>18 分 45 秒ぐらいから。 Jonathan Schwartz が Blog も Wikipedia も Google も語ります </li></ul><ul><li>http://wcdata.sun.com/webcast/archives/VIP-1981/ </li></ul>
    20. 20. BEA World 2005 <ul><li>標準規格やさまざまな「オープンな」コンポーネントで構成される SOA 環境も 、こうした Sun の視点から見ると「 Participation Infrastructure 」(参加のためのインフラ)と位置づけられ 、だれもが「コンテントプロバイダー」として情報を発信し、ネットワークで共有するためのツールとされる。 </li></ul><ul><ul><ul><li>http://www.itmedia.co.jp/enterprise/articles/0509/29/news027.html </li></ul></ul></ul>
    21. 21. つまり本来の SOA とは 企業アプリで Web2.0 を 実現することなのでは?
    22. 22. SOA as Web2.0 <ul><li>Web2.0 の思想は企業アプリでも重要 </li></ul><ul><ul><li>過去には、 BI 、 HRM 、 KM 、 EIP などと呼ばれていたもの </li></ul></ul><ul><ul><li>エンドユーザーコンピューティングともいえる </li></ul></ul><ul><li>SOA の理想は企業アプリで有効 </li></ul><ul><ul><li>依存レスなサービスを組み合わせてアプリを構築する </li></ul></ul><ul><ul><li>保守が容易で、組み替え可能で… </li></ul></ul><ul><li>その両者を組み合わせたものが開発者視点の SOA では </li></ul><ul><li>では、それを実現する技術は? </li></ul>
    23. 23. なぜ SOA と Web2.0 が 違ってしまっているのかを 考えてみる
    24. 24. なぜ SOA と Web2.0 は違うのか? 1/3 <ul><li>企業を確認 </li></ul><ul><ul><li>SOA 企業 </li></ul></ul><ul><ul><li>Web2.0 企業 </li></ul></ul>
    25. 25. なぜ SOA と Web2.0 は違うのか? 2/3 <ul><li>SOA 企業と Web2.0 企業では ビジネスモデルが違う </li></ul><ul><li>SOA 企業 </li></ul><ul><ul><li>パッケージを買ってもらう </li></ul></ul><ul><ul><li>厚利少売 </li></ul></ul><ul><li>Web2.0 企業 </li></ul><ul><ul><li>サービスをロングテールで提供 </li></ul></ul><ul><ul><li>薄利多売 </li></ul></ul>
    26. 26. なぜ SOA と Web2.0 は違うのか? 3/3 <ul><li>SOA 企業は SOA を商品先導型で扱った </li></ul><ul><ul><li>「 SOA 的なシステムには、 SOA 製品を」 </li></ul></ul><ul><ul><li>EAI が中心なのは売上が大きいから </li></ul></ul><ul><li>そのため矛盾が生じてしまった(いる) </li></ul><ul><ul><li>「 SOA で非依存な世界を実現できます。だから、この製品に依存してください」 </li></ul></ul><ul><li>結果、” SOA 企業が定義した SOA” は、実体がつかみにくく、盛り上がりにかけてしまったのではないだろうか? </li></ul>
    27. 27. では、この状況を変える SOA as Web2.0 実現の 具体的な技術は?
    28. 28. SOA as Web2.0 への技術 <ul><li>重要なのはロングテールを実現できること </li></ul><ul><ul><li>プロダクトの選択肢が広い(商用製品からオープンソース) </li></ul></ul><ul><ul><li>適用アプリケーションが広い(小さなアプリケーションから EAI ) </li></ul></ul><ul><li>今、使われている技術だけでは難しい </li></ul><ul><ul><li>SOA : BPEL 、 ESB 、 SOAP… </li></ul></ul><ul><ul><li>Web2.0 : Ajax 、 XML 、 REST… </li></ul></ul>
    29. 29. Dependency Injection <ul><li>DI は「アプリケーションレベルの SOA 」である </li></ul><ul><ul><li>SOA とは、依存レスなサービスを組み合わせてアプリケーションを構築すること </li></ul></ul><ul><ul><li>DI とは、依存レスなコンポーネント( POJO )を組み合わせてアプリケーションを構築すること </li></ul></ul><ul><li>大げさではなく、 DI を使っていれば、 SOA の理想を実現しているといえる </li></ul>
    30. 30. DI のスケーラビリティ <ul><li>依存先のサービスがどこにいるか関係ない </li></ul><ul><ul><li>同 VM 内か </li></ul></ul><ul><ul><li>BPEL/ESB/SOAP 経由か </li></ul></ul><ul><li>Web サービスにもシームレスに結合可能 </li></ul><ul><ul><li>逆に言えば DI を用いないで結合するのはたいへん </li></ul></ul>ESB/BPEL DI コンテナ
    31. 31. で、作ってみました。 DI を使った SOA as Web2.0 なサービス
    32. 32. マイ観光マップサービス「 Meegle (めーぐる)」 <ul><li>Meegle は、 </li></ul><ul><ul><li>自分で観光プランを決めたい観光客のために、 </li></ul></ul><ul><ul><li>自分にあったサービスから観光マップを組み立てる </li></ul></ul><ul><ul><li>観光支援サイトです </li></ul></ul>※“ みーぐる”じゃないよ
    33. 33. DEMO
    34. 34. <ul><li>観光客が自分達の情報を公開すると、それにあったサービスが提供されます。あとは、気に入ったサービス結んで、観光名所をめぐる地図(通称:めーぐるマップ)を作成するだけです </li></ul><ul><li>サービスの予約やキャンセルはめーぐるマップを通じてまとめて行われるため自分だけの観光マップを簡単に作ることが出来ます </li></ul><ul><li>※ レビュー機能やレコメンデーション機能が付加可能か </li></ul>Meegle 概要( for 観光客)
    35. 35. <ul><li>サービスプロバイダを Meegle にデプロイすることで、適切な観光客にアプローチ可能です </li></ul><ul><ul><li>観光名所がユーザーに合わせたサービスを動的に提供するためのエージェント </li></ul></ul><ul><li>サービスプロバイダには様々なデプロイパターンを用意されているため、規模や予算に合わせて使い分け可能です </li></ul>Meegle 概要( for 観光名所)
    36. 36. サービスプロバイダ <ul><li>観光名所がユーザーに合ったサービスを動的に提供するためのエージェント </li></ul><ul><li>Meegle はサービスプロバイダの実行プラットフォーム </li></ul><ul><ul><li>DI によってデプロイパターンを増やすことで、参加を多様に </li></ul></ul>サービス 観光名所 ユーザー ユーザー サービス サービス サービス 観光名所 観光名所 サービス プロバイダ サービス プロバイダ サービス プロバイダ
    37. 37. Meegle アーキテクチャ( UI ) 地図の取得 サービスの取得 予約 Ajax   (Asynchronous JavaScript + XML ) XML
    38. 38. Meegle アーキテクチャ(サーバ) <ul><li>JBI/DI 上に構築 </li></ul><ul><li>ServiceMix  ( http://servicemix.org/ ) </li></ul><ul><ul><li>オープンソースの JBI コンテナ </li></ul></ul><ul><ul><li>SpringFramework で構築 </li></ul></ul><ul><ul><ul><li>独自拡張で設定ファイル( servicemix.xml )に対応 </li></ul></ul></ul><ul><ul><li>アーキテクチャ概略 </li></ul></ul><ul><ul><ul><li>JBI の BC/SE は、 Spring にコンポーネント( bean )として登録 </li></ul></ul></ul><ul><ul><ul><li>コンポーネント間のメッセージング処理( NMR )を ServiceMix が実装 </li></ul></ul></ul><ul><ul><ul><li>※ WSDL への依存はオプション( JBI の仕様からは外れる?) </li></ul></ul></ul>
    39. 39. servicemix.xml <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <beans xmlns:saw2=&quot;http://jot2005/soaasweb20/&quot;> <container id=&quot;jbi&quot;> <components> <component id=&quot;httpBinding&quot; service=“saw2:httpBinding“    class=&quot;org.servicemix.components.http.HttpInOutBinding“     destinationService=&quot;saw2:asyncForwarder&quot;/> <component id=&quot;simpleSP&quot; service=&quot;saw2:simpleSP“ destinationService=&quot;saw2:responseRouter“ parent=&quot;serviceEngineParent&quot;> <property name=&quot;meegleSP&quot;> <bean class=&quot;meegle.service.impl.simple.SimpleSP&quot; /> </property> </component>
    40. 40. Meegle アーキテクチャ( JBI/DI ) httpBinding(HTTP の BindingComponent) asyncForwarder( 非同期メッセージへの切り替えるためのダミー SE) requestRouter/responseRouter ( XPath のルーティングエンジン) findAggregator/reserveAggregator (サービス取得や予約の取りまとめ) ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ デプロイされた サービスプロバイダ XML XML ⑫ BindingServlet( サーブレット ) ⑬ すべての SP から返信があったら 同期メッセージ 非同期メッセージ
    41. 41. サービスプロバイダ <ul><li>meegle.sp.MeegleSP を実装 </li></ul><ul><ul><li>ServiceMix にデプロイするには専用インターフェースを実装する必要があるので、 Meegle でアダプタを用意してラップ </li></ul></ul><ul><ul><li>org.servicemix.MessageExchangeListener </li></ul></ul><ul><ul><ul><li>#onMessageExchange( javax.jbi.messaging.MessageExchange ) </li></ul></ul></ul><ul><li>デプロイパターンによる参加の多様性を確保 </li></ul><ul><ul><li>シンプルサービス プロバイダ </li></ul></ul><ul><ul><li>RDB サービス プロバイダ </li></ul></ul><ul><ul><li>設定サービス プロバイダ </li></ul></ul><ul><ul><li>外部サービス プロバイダ </li></ul></ul><ul><ul><li>DI サービス プロバイダ </li></ul></ul>
    42. 42. meegle.sp.MeegleSP public interface MeegleSP { /** サービスのロード */ MeegleService[] getServices(Map condition); /** 予約 */ ResultInfo reserve(ReserveInfo reserveServices); /** 予約キャンセル */ ResultInfo cancel(ReserveInfo cancelInfo); }
    43. 43. シンプル サービスプロバイダ <ul><li>作成したサービスプロバイダを、そのままデプロイ </li></ul><ul><li>シンプルで基本的な作り </li></ul>
    44. 44. シンプル サービスプロバイダ <component id=&quot;simpleSP&quot; service=&quot;saw2:simpleSP&quot; destinationService=&quot;saw2:responseRouter&quot; parent=&quot;serviceProvidorParent&quot;> <property name=&quot;meegleSP&quot;> <bean class=&quot;meegle.sp.impl.simple.SimpleSP&quot; /> </property> </component> Public class SimpleSP implements MeegleSP { public MeegleService[] getServices(Map condition) { if ( “family”,equals(condition.get(“group”)) { // 家族向けサービス } else { // その他
    45. 45. RDB サービスプロバイダ <ul><li>POJO サービスプロバイダとほぼ同じ </li></ul><ul><li>ただし、 Meegle が提供するリソース(今回は DataSource )をインジェクトする </li></ul><ul><li>Meegle 上のリソースを利用することで追加コストをもらうビジネスモデルも可能か </li></ul><ul><ul><li>メール配送 </li></ul></ul><ul><ul><li>決済サービス </li></ul></ul><ul><ul><li>などなど </li></ul></ul>
    46. 46. RDB サービスプロバイダ <component id=&quot;rdbSP&quot; service=&quot;saw2:rdbSP&quot; destinationService=&quot;saw2:responseRouter&quot; parent=&quot;serviceProvidorParent&quot;> <property name=&quot;meegleSP&quot;> <bean class=&quot;meegle.sp.impl.rdb.RdbSP&quot; >    <property name=&quot;serviceHolderDao&quot;>    <bean class=“….ServiceHolderDaoJdbc&quot;>    <property name=&quot;dataSource&quot; ref=&quot;dataSource&quot; />    </bean>    </property>    </bean> <bean id=&quot;dataSource&quot; class=“...DriverManagerDataSource&quot;> <property name=&quot;driverClassName“ value=&quot;${jdbc.driverClassName}&quot;/> …
    47. 47. 設定サービスプロバイダ <ul><li>設定条件のクラスを提供し、簡単な設定のみでデプロイ </li></ul><ul><li>動的に文言を切り替えることはできないが、料金を安くできる可能性が高い </li></ul><ul><ul><li>今回は人数によるフィルタリングを実装 </li></ul></ul><ul><ul><li>キーワードマッチなどなど </li></ul></ul>
    48. 48. 設定サービスプロバイダ <component id=&quot;filterSP&quot; service=&quot;saw2:filterSP&quot; destinationService=&quot;saw2:responseRouter&quot; parent=&quot;serviceProvidorParent&quot;> <property name=&quot;meegleSP&quot;> <bean class=&quot;meegle.sp.impl.filter.FilterSP&quot; > <property name=&quot;filters&quot;> <list> <bean class=“…MeegleServiceFilterImp&quot;> <property name=&quot;minLimit&quot; value=&quot;8&quot;/> <property name=&quot;maxLimit&quot; value=&quot;30&quot;/> <property name=&quot;service&quot;> <bean class=&quot;meegle.service.MeegleService&quot;> <property name=&quot;id&quot; value=&quot;filter1&quot;/> <property name=&quot;lat&quot; value=&quot;35.6782&quot;/> <property name=&quot;lng&quot; value=&quot;139.7149&quot;/> <property name=&quot;imgSrc&quot; value=&quot;img1.jpg&quot;/> <property name=&quot;title&quot; value=&quot; 国立競技場 (F)&quot;/>
    49. 49. 外部 Web サービスプロバイダ <ul><li>外部接続 SP を提供し、実際の処理は外部のサーバで実施 </li></ul><ul><li>本格的な企業 / 自治体連携の場合に有効 </li></ul><ul><li>今回は ServiceMix のアウトバンド用 BC を利用して、 REST で別インスタンスの JBI に接続 </li></ul><ul><ul><li>接続形式は自由 </li></ul></ul>
    50. 50. 外部 Web サービスプロバイダ <component id=&quot;exService&quot; service=&quot;saw2:exService&quot; class=&quot;meegle.servicemix.se.ExHttp&quot; destinationService=&quot;saw2:findAggregator&quot;> <property name=&quot;outBoundName&quot; value=&quot; exServiceOutBound &quot; /> <component id=&quot; exServiceOutBound &quot; service=&quot;saw2:exServiceOutBound&quot; class=&quot;org.servicemix.components.http.HttpInvoker&quot;> <property name=&quot;url&quot; value=&quot;http://localhost:8912&quot;/> </component> ① XML XML XML XML ② ③ ④ 別サーバ
    51. 51. DI サービスプロバイダ <ul><li>デプロイするサービスの粒度を変更自在にするためのテクニック </li></ul><ul><li>MeegleSP の実装を、複数のクラスを Remix して実現 </li></ul><ul><li>DI のコンポーネントを組み込み DI コンテナで設定 </li></ul>
    52. 52. <ul><li>DI コンテナとして基本的な動きをおさらい </li></ul>DI サービスプロバイダ ServiMix/Spring interface MeegleSP class DiSP impelemtns MeegleSP mailResource 2.Inject 設定 1. 生成 この中を見ると…
    53. 53. DI サービスプロバイダ mailResource 2.Inject 動的コンテナ 3. 動的コンテナに登録 mailResource 組み込みコンテナ サービス検索 予約 / キャンセル 4. 組み込みコンテナ を生成 ( 動的コンテナを 親コンテナに指定) 6. 親コンテナの mailResource を lookup して bean に Inject 7. サービス 検索処理 Call 8. サービス検索 bean を lookup して処理を実施 設定 5.Bean を生成
    54. 54. DI サービス / 動的コンテナ //HashMap を利用した Spring のコンテナ実装 Public class DynaAppCtx implements ApplicationContext { Map beans = new HashMap(); // 動的にするためにコンポーネントを追加するためのメソッド public void register(String name, Object bean) { beans.put(name, bean); } //ApplicationContext を実装 public Object getBean(String name) throws BeansException { return beans.get(name); } …
    55. 55. DI サービス /DiSP Public class DiSp impelements MeegleSE, InitializeBean { DynaAppCtx pCtx = new DynaAppCtx(); ApplicationContext ctx; // JBI/Spring の mailResource が Inject されてくる public void setMailResource(MailResource mailResource) { // そのまま動的 DI に登録 pCtx.register(“mailResource”, mailResource); } // 初期化終了後に組み込み DI コンテナの起動 public void afterPropertiesSet() { ctx = new ClassPathXmlApplicationContext( new String[] {“appCtx.xml”}, pCtx); } … (次のページへ)
    56. 56. DI サービス /DiSP Public class DiSp impelements MeegleSE, InitializeBean { DynaAppCtx pCtx = new DynaAppCtx(); ApplicationContext ctx; … //MeegleSE の実装メソッド public MeegleService[] getServices(Map condition) { MyServiceLocator sl = ctx.resolveComponent(“serviceLocator”); return sl.process(condition); }
    57. 57. Summary <ul><li>SOA と Web2.0 </li></ul><ul><ul><li>SOA は依存レスなサービスの組み合わせ </li></ul></ul><ul><ul><li>Web2.0 的であれば Web2.0 </li></ul></ul><ul><li>開発者視点の SOA とは、企業システムで Web2.0 的を実現すること </li></ul><ul><li>まずはアプリケーションで SOA を実現する </li></ul><ul><ul><li>DI をうまく使うと、自然にサービスを組み合わせたような、ロングテールなアプリケーションができる </li></ul></ul><ul><ul><li>しかも、 Web サービスに拡張も可能 </li></ul></ul>
    58. 58. Q&A

    ×