Your SlideShare is downloading. ×
0
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

ホット・トピック・セミナー「Metro」

2,458

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,458
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
15
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Metro の御紹介 <ul><li>川口耕介 </li></ul><ul><li>Sun Microsystems, Inc. </li></ul>
  • 2. アジェンダ <ul><li>Metro とは? </li></ul><ul><li>主な機能 </li></ul><ul><li>デザイン </li></ul><ul><li>コミュニティ </li></ul><ul><li>ロードマップ </li></ul>
  • 3. <ul><li>Metro とは? </li></ul>
  • 4. Metro とは? <ul><li>GlassFish の一翼を担う SOAP ウェブ・サービス・フレームワーク </li></ul><ul><li>主に JAX-WS RI + WSIT </li></ul><ul><ul><li>JAX-WS が基盤部分と API </li></ul></ul><ul><ul><li>WSIT が付加機能と .NET 相互運用性 </li></ul></ul><ul><li>高性能・高い拡張性 </li></ul><ul><li>再利用性の高い部品プロジェクトから構築 </li></ul><ul><ul><li>個別に利用可能 </li></ul></ul>
  • 5. Metro の中身 XML 処理 セキュリティ Metro – GlassFish Web Services Stack metro.dev.java.net JAXB JAXP SAAJ コア部分 トラン ザクション WS-RM 拡張機能 SOAP SMTP Spring JSON HTTP . . . . . .
  • 6. パイプライン処理 <ul><li>クライアント </li></ul><ul><li>サーバ </li></ul>HTTP Security WS-A Reliability TX Stub Invoker Z Y X W TubeHead Message Message invoke 01010001... 11001010... return Message Message invoke return
  • 7. もしくは…
  • 8. <ul><li>Metro の機能 </li></ul>
  • 9. JAX-WS 2.1 API <ul><li>Metro プログラミングモデルの柱 </li></ul><ul><ul><li>WS を インターフェース越しのメソッド呼出として扱う </li></ul></ul><ul><li>WSDL を隠蔽 </li></ul><ul><li>POJO プログラミング </li></ul><ul><li>デスクリプタなし </li></ul><ul><li>プロトコル・トランスポートに非依存 </li></ul>
  • 10. JAXB 2.1 API <ul><li>XML スキーマを Java ビーンにマッピング </li></ul><ul><li>XML 入出力を簡単に </li></ul><ul><li>XML Schema 1.0 の全てをサポート </li></ul><ul><li>高性能 </li></ul><ul><li>面白い拡張が色々 </li></ul>
  • 11. 付加機能部分 : WSIT <ul><li>End-to-end セキュリティ </li></ul><ul><ul><li>トランスポートのセキュリティ </li></ul></ul><ul><ul><li>メッセージのセキュリティ </li></ul></ul><ul><ul><li>暗号・署名等の関連規格 </li></ul></ul><ul><ul><li>アイデンティティの連携の関連規格 (WS-Trust) </li></ul></ul><ul><li>リライアビリティ </li></ul><ul><ul><li>マルチホップ環境での再送・順序制御 </li></ul></ul><ul><li>分散トランザクション </li></ul><ul><ul><li>EJB/RMI のような事を WS 上で </li></ul></ul><ul><ul><li>.NET も含めて </li></ul></ul>
  • 12. 標準のサポート <ul><li>しかも、極力自動的に </li></ul><ul><ul><li>バイナリデータ取扱の効率化 (MTOM) </li></ul></ul><ul><ul><li>複数の SOAP バージョン </li></ul></ul><ul><ul><li>バイナリフォーマット (FastInfoset) </li></ul></ul>
  • 13. 拡張コンポーネント <ul><li>様々なトランスポート </li></ul><ul><ul><li>HTTP, HTTPS </li></ul></ul><ul><ul><li>SMTP </li></ul></ul><ul><ul><li>TCP/IP 上に直接 </li></ul></ul><ul><ul><li>JMS </li></ul></ul><ul><ul><li>In-VM </li></ul></ul><ul><li>様々なデプロイメント </li></ul><ul><ul><li>全自動方式 ( 又の名を JSR-109) </li></ul></ul><ul><ul><li>Servlet 方式 </li></ul></ul><ul><ul><li>Spring 方式 </li></ul></ul>
  • 14. 先進的な機能 <ul><li>Stateful ウェブ・サービス </li></ul><ul><li>非同期処理 </li></ul><ul><li>複数のサービスインスタンスを活用 </li></ul><ul><ul><li>HTTP セッション毎 </li></ul></ul><ul><ul><li>スレッド毎 </li></ul></ul>
  • 15. 相互運用性 <ul><li>業界標準を色々サポート </li></ul><ul><ul><li>SOAP 1.1/1.2, WSDL 1.1, WS-Addressing, MTOM, </li></ul></ul><ul><ul><li>WS-I Basic Profile 1.x, SOAP Attachment Profile </li></ul></ul><ul><ul><li>WS-ReliableMessaging, WS-SecureConversation, WS-Trust, WS-Security, WS-Policy, WS-AtomicTransaction, … </li></ul></ul><ul><li>Microsoft と共同で .NET 相互運用性を検証 </li></ul><ul><ul><li>テスト、テスト、テスト… </li></ul></ul><ul><ul><li>定例ミーティング </li></ul></ul><ul><ul><li>「 plugfest 」イベント </li></ul></ul><ul><ul><li>きちんと動く事を地道に検証しました </li></ul></ul>
  • 16. Metro / .NET 相互運用性 Client Endpoint Client Endpoint Metro .NET 3.0
  • 17. 動作環境 <ul><li>GlassFish v2, v3 には最初から入ってます </li></ul><ul><li>他の多くのコンテナにも </li></ul><ul><ul><li>JBoss WS 2.1.0 </li></ul></ul><ul><ul><li>BEA WebLogic 10 </li></ul></ul><ul><ul><li>TmaxSoft JEUS </li></ul></ul><ul><li>任意のサーブレットコンテナで </li></ul><ul><ul><li>但し一部機能制限あり </li></ul></ul><ul><li>コンテナがなくても OK </li></ul><ul><ul><li>JavaSE6 light-weight HTTP server </li></ul></ul>
  • 18. ツール <ul><li>NetBeans 組み込みのツール群 </li></ul><ul><li>コマンドラインツール </li></ul><ul><li>Ant タスク </li></ul><ul><li>Maven プラグイン </li></ul><ul><li>Eclipse 用のツールも進行中 </li></ul>
  • 19.  
  • 20. 実際にやってみる <ul><li>一番単純なウェブサービス </li></ul><ul><ul><li>Java -> XML -> Java </li></ul></ul><ul><li>発展形 </li></ul><ul><ul><li>HTTPS 上で通信してセキュリティ </li></ul></ul><ul><ul><li>WSDL を先に書いてプロトコルを合意 </li></ul></ul><ul><ul><li>他の言語で書いたサービスを使う </li></ul></ul>
  • 21. 実際にやってみる <ul><li>信頼性のあるウェブサービス </li></ul><ul><ul><li>WS-ReliableMessaging </li></ul></ul><ul><li>Metro の直接のユーザーが使うことはあまりない </li></ul>
  • 22. 実際にやってみる <ul><li>FastInfoset </li></ul>
  • 23. パフォーマンス <ul><li>Axis2 1.1.1 と比較して、 30%-100% 高速 </li></ul>詳細: http://weblogs.java.net/blog/kohsuke/archive/2007/02/jaxws_ri_21_ben.html
  • 24. <ul><li>コミュニティ </li></ul>
  • 25. コミュニティ <ul><li>Java.net 上で「見える」開発 </li></ul><ul><ul><li>ソースコード , ML, デザインディスカッション </li></ul></ul><ul><ul><li>Hudson による継続的インテグレーション </li></ul></ul><ul><li>オープンソース </li></ul><ul><ul><li>CDDL と GPLv2 のデュアルライセンス </li></ul></ul><ul><li>コミッタになるのも簡単です </li></ul><ul><ul><li>SCA にサインするだけ </li></ul></ul><ul><li>ユーザー・コミュニティ主導の機能開発 </li></ul><ul><ul><li>Spring や JSON サポートなど </li></ul></ul>
  • 26. Metro 世界制覇計画 <ul><li>Sun 以外のアプリケーションサーバでも使われています </li></ul><ul><ul><li>BEA WebLogic Server 10 </li></ul></ul><ul><ul><li>JBoss WS 2.1.0 </li></ul></ul><ul><ul><li>IBM JDK6 </li></ul></ul><ul><ul><li>Salesforce.com APEX8.0 toolkit </li></ul></ul>
  • 27. 将来の展望 <ul><li>高可用性 </li></ul><ul><ul><li>Stateful web service </li></ul></ul><ul><ul><li>クラスタによるフェイルオーバーなど </li></ul></ul><ul><li>JMX による管理性の向上 </li></ul><ul><li>Jersey の取り込み </li></ul><ul><li>ポリシー機能の強化 </li></ul>
  • 28. Reference <ul><li>Metro </li></ul><ul><ul><li>metro.dev.java.net </li></ul></ul><ul><ul><li>[email_address] </li></ul></ul><ul><ul><li>https://forums.java.net/jive/forum.jspa?forumID=46 </li></ul></ul><ul><ul><li>http://feeds.feedburner.com/MetroBlogs </li></ul></ul><ul><li>GlassFish (glassfish.java.net)‏ </li></ul><ul><li>The Aquarium (blogs.sun.com/theaquarium)‏ </li></ul>
  • 29. Jersey の御紹介 <ul><li>川口耕介 </li></ul><ul><li>Sun Microsystems, Inc. </li></ul>
  • 30. お品書き <ul><li>REST 入門 </li></ul><ul><li>Java に REST API が必要な訳 </li></ul><ul><li>API について </li></ul><ul><li>デモ </li></ul>
  • 31. REST vs. SOAP : SOAP まとめ <ul><li>HTTP 上に別なプロトコル (SOAP) を載せる </li></ul><ul><li>XML だけに絞ってデータモデルをリッチに </li></ul><ul><li>1からやり直すチャンスだった </li></ul><ul><li>高度なアドオンプロトコルが色々出来たがレイヤリングが複雑 </li></ul><ul><ul><li>人間が目で見てもわからない </li></ul></ul><ul><li>XML 縛りが思ったよりメリットなし </li></ul><ul><li>フレームワークを作るのが大変 </li></ul>
  • 32. REST vs. SOAP: REST <ul><li>あれ? HTTP しか使ってないよ </li></ul><ul><ul><li>新しい物を発明しないでもできる? </li></ul></ul><ul><li>ウェブサイトを作るようにウェブサービスを作る </li></ul><ul><li>昔からある仕様で使えそうなのを組み合わせる </li></ul><ul><ul><li>誰も使ってなかった HTTP の仕様の一部とか </li></ul></ul><ul><ul><li>小さなフレームワークで済むようになった </li></ul></ul><ul><ul><li>良く言えば経済的、悪く言えば継ぎ接ぎ </li></ul></ul><ul><li>インターフェースが厳密ではない </li></ul><ul><ul><li>相互運用とか煩いことは言わない </li></ul></ul>
  • 33. ウェブサイトを作るように <ul><li>HTTP URL の階層構造を素直に使う </li></ul><ul><ul><li>http://d.hatena.ne.jp/kkawa/20081012/p2 </li></ul></ul><ul><ul><li>排除される例 : </li></ul></ul><ul><ul><ul><li>http://www.amazon.com/gp/-/x/15322209_a/:qri/ </li></ul></ul></ul><ul><ul><ul><li>ウェブフレームワークの中には意外にこれが多い </li></ul></ul></ul>
  • 34. 例 <ul><li>音楽サイト </li></ul><ul><ul><li>/music/artists </li></ul></ul><ul><ul><ul><li>/music/artists/{id} </li></ul></ul></ul><ul><ul><ul><li>/music/recordings </li></ul></ul></ul><ul><ul><ul><li>/music/recordings/{id} </li></ul></ul></ul><ul><ul><ul><li>/music/artists/{id}/recordings </li></ul></ul></ul><ul><ul><ul><li>/music/genre/{id} </li></ul></ul></ul><ul><ul><ul><li>/music/format/{id} </li></ul></ul></ul><ul><li>XML と JSON をサポートしよう </li></ul>
  • 35. テストに出る REST <ul><li>RE presentational S tate T ransfer </li></ul><ul><li>リソース </li></ul><ul><ul><li>URI で識別される、物 </li></ul></ul><ul><ul><li>「表現」によって具体化される </li></ul></ul><ul><li>メソッド </li></ul><ul><ul><li>リソースによらず共通。 HTTP メソッド </li></ul></ul><ul><ul><li>「表現」をやりとりする </li></ul></ul><ul><li>表現 </li></ul><ul><ul><li>リソースの状態を表す HTML,XML,JSON,… </li></ul></ul><ul><ul><li>多数のフォーマットが有り得る </li></ul></ul>
  • 36. お品書き <ul><li>REST 入門 </li></ul><ul><li>Java に REST API が必要な訳 </li></ul><ul><li>API について </li></ul><ul><li>デモ </li></ul>
  • 37. サーブレットでアーティストクラスを書く public class Artist extends HttpServlet { public enum SupportedOutputFormat {XML, JSON}; protected void doGet(HttpServletRequest request, HttpServletResponse response)‏ throws ServletException, IOException { String accept = request.getHeader(&quot;accept&quot;).toLowerCase(); String acceptableTypes[] = accept.split(&quot;,&quot;); SupportedOutputFormat outputType = null; for (String acceptableType: acceptableTypes) { if (acceptableType.contains(&quot;*/*&quot;) || acceptableType.contains(&quot;application/*&quot;) || acceptableType.contains(&quot;application/xml&quot;)) { outputType=SupportedOutputFormat.XML; break; } else if (acceptableType.contains(&quot;application/json&quot;)) { outputType=SupportedOutputFormat.JSON; break; } } if (outputType==null)‏ response.sendError(415); String path = request.getPathInfo(); String pathSegments[] = path.split(&quot;/&quot;); String artist = pathSegments[1]; if (pathSegments.length < 2 && pathSegments.length > 3)‏ response.sendError(404); else if (pathSegments.length == 3 && pathSegments[2].equals(&quot;recordings&quot;)) { if (outputType == SupportedOutputFormat.XML)‏ writeRecordingsForArtistAsXml(response, artist); else writeRecordingsForArtistAsJson(response, artist); } else { if (outputType == SupportedOutputFormat.XML)‏ writeArtistAsXml(response, artist); else writeArtistAsJson(response, artist); } } private void writeRecordingsForArtistAsXml(HttpServletResponse response, String artist) { ... } private void writeRecordingsForArtistAsJson(HttpServletResponse response, String artist) { ... } private void writeArtistAsXml(HttpServletResponse response, String artist) { ... } private void writeArtistAsJson(HttpServletResponse response, String artist) { ... } }
  • 38. これはちょっと… <ul><li>JSF 等は HTTP を独自にモデリングするので REST に向いてない </li></ul><ul><ul><li>でも 21 世紀にサーブレットを書くのは嫌だ </li></ul></ul><ul><li>もう少し抽象度の高い API が欲しい </li></ul><ul><ul><li>REST のイディオムを簡単に </li></ul></ul><ul><ul><li>コードはできるだけ少なく </li></ul></ul><ul><ul><li>Java5 の機能もどんどん使って </li></ul></ul><ul><li>念のため HTTP も直接叩けるように </li></ul><ul><ul><li>部品の組み合わせ方は今も模索中なので </li></ul></ul>
  • 39. お品書き <ul><li>REST 入門 </li></ul><ul><li>Java に REST API が必要な訳 </li></ul><ul><li>API について </li></ul><ul><li>デモ </li></ul>
  • 40. POJO @UriTemplate(&quot;/artists/{id}&quot;)‏ public class Artist { @ProduceMime(&quot;application/xml&quot;)‏ @HttpMethod InputStream getXml( @UriParam(&quot;id&quot;) String artist) { ... } ... }
  • 41. メソッドの戻り値 <ul><li>HttpResponse </li></ul><ul><ul><li>HTTP プロトコルのイディオムに相当 </li></ul></ul><ul><ul><li>30x リダイレクト、 201 リソース生成など </li></ul></ul><ul><li>Representation<T> </li></ul><ul><ul><li>「表現」 (T) と付随する HTTP ヘッダ </li></ul></ul><ul><li>裸の T </li></ul><ul><ul><li>必須の HTTP ヘッダが T から自動で定まる場合 </li></ul></ul><ul><ul><li>SPI によって拡張可能 </li></ul></ul><ul><ul><li>XML や JSON 、画像など </li></ul></ul>
  • 42. メソッドのパラメータ <ul><li>アノーテーションを使ってパラメータを注入 </li></ul><ul><ul><li>@UriParam, @QueryParam, @MatrixParam, @HeaderParam </li></ul></ul><ul><ul><li>切り出しと型変換の手間が省ける </li></ul></ul><ul><li>Entity<T> もしくは裸の T </li></ul><ul><ul><li>リクエストボディに相当 </li></ul></ul>@HttpMethod public Recording updateRecording( @UriParam(&quot;id&quot;) String id, Recording updatedRecording)‏
  • 43. お品書き <ul><li>REST 入門 </li></ul><ul><li>Java に REST API が必要な訳 </li></ul><ul><li>API について </li></ul><ul><li>デモ </li></ul>
  • 44. 参考情報 <ul><li>JSR-311 </li></ul><ul><ul><li>https://jsr311.dev.java.net </li></ul></ul><ul><li>Jersey </li></ul><ul><ul><li>https://jersey.dev.java.net </li></ul></ul><ul><ul><li>[email_address] </li></ul></ul><ul><li>Blogs </li></ul><ul><ul><li>http://blogs.sun.com/sandoz </li></ul></ul><ul><ul><li>http://weblogs.java.net/blog/mhadley/ </li></ul></ul><ul><ul><li>http://blogs.sun.com/japod </li></ul></ul>
  • 45. BACK UP SLIDES <ul><li>Nothing to see beyond here </li></ul>
  • 46. <ul><li>アーキテクチャ </li></ul>
  • 47. 効率のよい SOAP Message の内部表現 Message Packet Messages Headers AttachmentSet Payload Attachment Factories HeaderList Header

×