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