これで解決、Web サービス相互運用性
Windows と Java岡崎 隆之
サン・マイクロシステムズ株式会社
ソフトウエア・ビジネス統括本部
http://blogs.sun.com/okazakiセッション概要
Web サービスを相互運用する際の考慮すべき点とその解決方法(Project Tango) をご紹介します。

Copyright © 2006 Sun Microsystems K.K.

2

Web サービスを利用した相互運用を考える

Copyright © 2006 Sun Microsystems K.K.

3

システム A

システム Bシステム A とシステム B を連携したい
Copyright © 2006 Sun Microsystems K.K.

4

システム A

システム B

TCP/IP

ネットワークケーブルを繋ぎ
TCP/IP で通信
Copyright © 2006 Sun Microsystems K.K.

5

システム A

システム BHTTP
TCP/IP

データの転送方式としてHTTP を利用する
Copyright © 2006 Sun Microsystems K.K.

6

システム A

システム B

SOAP や RESTHTTPTCP/IP

アプリケーション間の連携をWeb サービスによって行う
Copyright © 2006 Sun Microsystems K.K.

7

システム A

システム B

SOAP や REST
満たせないビジネス要件
HTTP

TCP/IP•トランザクション•セキュリティ•信頼性メッセージング•相互運用性Copyright © 2006 Sun Microsystems K.K.

8

システム A

システム B

独自フレームワーク
SOAP や RESTHTTP
TCP/IP
典型的には・・・

独自フレームワークによって問題を解決
Copyright © 2006 Sun Microsystems K.K.

9

独自

フレーーク
ワ
ム
レーT
フRES
独自
Pや
SOA
P
HTT/ IP
TCP

SOA

Pや

HTT

ムワ
ーRES

TCP

P

T/IP

独自フレームワーク

独自フレームワーク

SOAP や REST

SOAP や REST

HTTP

HTTP

TCP/IP

TCP/IP

独自フレーSOA

PやHTTP

TCP/ IPムワ

RESTーククク
ワー
ムーTフレ
自RES
独PやSOAPHTT/IP
TCP

コストがかかる
相互運用性保証に時間もかかる
Copyright © 2006 Sun Microsystems K.K.

10

Project Tango
Web Service Interoperability Technologies (WSIT)
https://wsit.dev.java.net
Copyright © 2006 Sun Microsystems K.K.

11

システム A

システム B

JAX-WS

Project Tango(WSIT)HTTP
TCP/IP

注 ) JAX-WS:
Java から Web サービスを利用するための API 仕様
Copyright © 2006 Sun Microsystems K.K.

12

システム A

システム B

JAX-WS

Project Tango(WSIT)

JAX-WS,HTTP SOAP, WSDL, WSAtomicTransaction, WSTCP/IP
Coordination,WSSecureConversation, WSReliableMessaging, WSTrust, MTOM/XOP, WSSecurity, WS-Policy, ....
Copyright © 2006 Sun Microsystems K.K.

13

システム A

システム B

JAX-WS

Project Tango(WSIT)HTTP
TCP/IP
Project Tango は、大雑把に言うと・・

標準仕様を組み合わせたランタイムライブラリです
Copyright © 2006 Sun Microsystems K.K.

14

システム A

システム B

JAX-WS

Project Tango(WSIT)

標準仕様を利用した実装
HTTP
•SOAP
TCP/IP•トランザクション
Project Tango は、大雑把に言うと・・•セキュリティ
標準仕様を組み合わせた•信頼性メッセージング
ランタイムライブラリです•相互運用性 検証済み
Copyright © 2006 Sun Microsystems K.K.

15

システム A

システム B

JAX-WS

Project Tango(WSIT)HTTP
TCP/IP
Project Tango は、新しいＡＰＩではありません
ライブラリと設定を追加するだけ
Copyright © 2006 Sun Microsystems K.K.

16

Java アプリ

.NET アプリ

Windows Communication
Foundation (WCF)

Project Tango (WSIT)
Project Tango は、.NET フレームワーク (WCF) と相互接続検証を行っています
Copyright © 2006 Sun Microsystems K.K.

17

• Project Tango (WSIT) の仕組み
> セキュリティ> 信頼性メッセージング> トランザクション> ツールサポート• Project Tango (WSIT) を使う• Project Tango 今後の動向• まとめ・参考資料
Copyright © 2006 Sun Microsystems K.K.

18

Project Tango のスタック
JAX-WS ツール、 NetBeans や Sun Java Studio によるサポート
セキュリティ

高信頼性(WS-SecureConv.
WS-Trust, XWSS)(WS-Reliable
Messaging)

トランザクション(WS-AtomicTransaction
WS-Coordination)

SOAP ベースのメッセージング(WSA, MTOM)

メタデータ(WSDL,MEXPolicy)

JAXB ベースの XML データバインディング (XSD, XPATH)
HTTP

TCP
Copyright © 2006 Sun Microsystems K.K.

SMTP19トランスポート・プロトコル
JAX-WS ツール、 NetBeans や Sun Java Studio によるサポート
セキュリティ
(WS-SecureConv.
WS-Trust, XWSS)

高信頼性

トランザクション
Project
Tango(WSIT) は
メタデータ(WS-Reliable(WS-AtomicTransaction

WS-Coordination)
HTTP や SMTPなどの (WSDL,MEX
主要な普及したトランスポートMessaging)

SOAP ベースのメッセージング
Policy)プロトコルを利用します(WSA,MTOM)JAXB ベースの XML データバインディング (XSD, XPATH)
HTTP

TCP
Copyright © 2006 Sun Microsystems K.K.

SMTP20データ・バインディング
JAX-WS ツール、 NetBeans や Sun Java Studio によるサポート
高信頼性
XML/Java間のデータ
トランザクション
メタデータ(WS-SecureConv.
(WS-Reliable(WS-AtomicTransaction
バインディングには
WS-Coordination)
WS-Trust, XWSS)
Messaging)(WSDL,JAXB 2.x を利用しますMEX
SOAP ベースのメッセージング
Policy)(WSA, MTOM)
セキュリティJAXB ベースの XML データバインディング (XSD, XPATH)
HTTP

TCP
Copyright © 2006 Sun Microsystems K.K.

SMTP21

メッセージング
JAX-WS ツール、 NetBeans や Sun Java Studio によるサポート
セキュリティ
(WS-SecureConv.
WS-Trust, XWSS)

メッセージングには SOAP を高信頼性 利用します
トランザクション(WS-Reliable
Messaging)(WS-AtomicTransaction
WS-Coordination)

SOAP ベースのメッセージング(WSA, MTOM)

メタデータ(WSDL,MEX
Policy)JAXB ベースの XML データバインディング (XSD, XPATH)
HTTP

TCP
Copyright © 2006 Sun Microsystems K.K.

SMTP
22

メタデータ
JAX-WS ツール、 NetBeans や Sun Java Studio によるサポート
セキュリティ

高信頼性(WS-SecureConv.
WS-Trust, XWSS)(WS-Reliable
Messaging)

トランザクション(WS-AtomicTransaction
WS-Coordination)

SOAP ベースのメッセージング(WSA, MTOM)WSDL や WS-Policy
等を利用してメタデータ(WSDL,MEXPolicy)

メタデータを交換します

JAXB ベースの XML データバインディング (XSD, XPATH)
HTTP

TCP
Copyright © 2006 Sun Microsystems K.K.

SMTP
23

ビジネス要件の解決
JAX-WS ツール、 NetBeans や Sun Java Studio によるサポート
セキュリティ

高信頼性(WS-SecureConv.
WS-Trust, XWSS)(WS-ReliableMessaging)

トランザクション(WS-AtomicTransaction
WS-Coordination)

SOAP ベースのメッセージング(WSA, MTOM)

メタデータ(WSDL,MEX
Policy)各種ビジネス要件を満たすため
JAXB ベースの XML データバインディング (XSD, XPATH)

様々な Web サービス仕様を利用します

HTTP

TCP
Copyright © 2006 Sun Microsystems K.K.

SMTP
24

ツールによるサポート
JAX-WS ツール、 NetBeans や Sun Java Studio によるサポート
セキュリティ

高信頼性

トランザクション

メタデータ(WSDL,生産性を向上させるため MEX
SOAP ベースのメッセージング
Policy)様々なツールによるサポートを提供します(WSA, MTOM)(WS-SecureConv.
WS-Trust, XWSS)(WS-Reliable
Messaging)(WS-AtomicTransaction
WS-Coordination)

JAXB ベースの XML データバインディング (XSD, XPATH)HTTPTCPCopyright © 2006 Sun Microsystems K.K.

SMTP
25

• Project Tango (WSIT) の仕組み
> セキュリティ> 信頼性メッセージング> トランザクション> ツールサポート• Project Tango (WSIT) を使う• Project Tango 今後の動向• まとめ・参考資料
Copyright © 2006 Sun Microsystems K.K.

26

セキュリティ• WS-Security> メッセージの完全性、機密性、単一メッセージの認証による保護品質の提供• WS-SecureConversation> 複数のメッセージをやり取りする際の安全なセキュリティ・コンテキスト・トークン• WS-SecurityPolicy> Web サービスのセキュリティ・ポリシを定義• WS-Trust> クライアント側とサーバ側のセキュリティトークンの要求、発行および信頼関係の管理
Copyright © 2006 Sun Microsystems K.K.

27

WS-Security: 完全性や機密性• 完全性> メッセージが転送中に改ざんされていないことを保証• 機密性> 目的の受信先のみにメッセージが転送されることを保証• 送信元の認証> メッセージの送信元を識別する

Copyright © 2006 Sun Microsystems K.K.

28

WS-SecureConversation• セキュリティ・コンテキスト・トークンを利用して、SecureConversation のセッションを作成・管理し、セッション内におけるメッセージ交換の保護

クライアントサーバ
ブートストラップ
セッションマネジャ
SecureConversation で保護された
アプリケーションメッセージ

Copyright © 2006 Sun Microsystems K.K.

29

WS-SecurityPolicy: ポリシー
• Web サービスごとのセキュリティ・ポリシの定義と、ポリシー情報の交換> 例：個人情報を取り扱う Web サービスはセキュリティ強度の高い認証・通信方式を利用する
クライアント(1) WSDL の要求

サーバ(2) WSDL とポリシの返信(3) セキュアな送信(4) セキュアな返信

Copyright © 2006 Sun Microsystems K.K.

30

WS-Trust : 信頼関係の管理• クライアント・サーバ間の信頼関係の管理• セキュリティ・トークンの要求、発行クライアント

サーバ

信頼

セキュリティ・トークン・サービス (STS)Copyright © 2006 Sun Microsystems K.K.

アイデンティテイ
データベース31

• Project Tango (WSIT) の仕組み
> セキュリティ> 信頼性メッセージング> トランザクション> ツールサポート• Project Tango (WSIT) を使う• Project Tango 今後の動向• まとめ・参考資料
Copyright © 2006 Sun Microsystems K.K.

32

信頼性メッセージング• WS-ReliableMessaging> 送信中に失われたメッセージの再送処理
送信中に消失自動的に再送> 順番どおりにメッセージが送信されることを保証> 少なくとも 1 回送信、多くとも 1 回送信などの保証
Copyright © 2006 Sun Microsystems K.K.

33

• Project Tango (WSIT) の仕組み
> セキュリティ> 信頼性メッセージング> トランザクション> ツールサポート• Project Tango (WSIT) を使う• Project Tango 今後の動向• まとめ・参考資料
Copyright © 2006 Sun Microsystems K.K.

34

トランザクション• トランザクション化された Web サービスのサポート> アトミック性 (Atomicity) 、一貫性 (Consistency) 、独立性 (Isolation) 、永続性 (Durability) の保証• WS-Coordination> 分散アプリケーションの動作を調整し、分散トランザクションの結果が矛盾なく一致するようにする• WS-AtomicTransaction> ACID トランザクションを Web サービスに適用する• アプリケーションサーバのトランザクション・マネー

ジャを利用• トランザクション利用のために新しい API を覚える必要はありません
Copyright © 2006 Sun Microsystems K.K.

35

アノテーションによる指定
トランザクションをサポートする Web サービスの実装@javax.jws.WebService@javax.ejb.Stateless@javax.ejb.TransactionManagement(CONTAINER)[1]
public class Bank {}@javax.jws.WebMethod@javax.ejb.TransactionAttribute(REQUIRED)[1][2]void transferFunds(...) throws ... ;[1] ステートレス EJB のデフォルト、ここでは明示的に宣言しています[2] 実装上の制限により One Way メッセージではトランザクションは利用できません
Copyright © 2006 Sun Microsystems K.K.

36

Transacted Web サービスの定義<wsdl:definitions><!-- WS-AT ポリシ・アサーションの定義 --><wsp:Policy wsu:Id="TransactedPolicy1" ><wsat:ATAssertion wsp:Optional="true”/><wsat:ATAlwaysCapability/></wsp:Policy><wsdl:binding name="Bank" type="tns:BankPortType" ><!-- ポリシーによってトランザクションサポートに --><wsdl:operation name="transferFunds" ><wsp:PolicyReference URI="#TransactedPolicy1"...
</wsdl:operation></wsdl:binding></wsdl:definitions>

Copyright © 2006 Sun Microsystems K.K.

37

クライアント側のトランザクション
import javax.annotation.Resource;
public class ATMClient {@javax.jws.WebServiceRef
static BankService service;
public void selectedTransferFunds() {@Resource javax.transaction.UserTransaction ut;}}

Bank bank = service.getBank();
ut.begin();bank.transferFunds( ... );ut.end();JTA(Java Transaction API) の UserTransaction を使ってトランザクション境界をコントロール
Copyright © 2006 Sun Microsystems K.K.

38

分散トランザクション (1).NET クライアント主導の分散トランザクションの解決.NETClient1: TxnCreate
3: TxnCommit

2a: Invoke

JavaWeb Svc.NETWeb Svc
4b: MSDTC
Protocol<<root>>MS Coordinator

2b: Register
2c: WS-Coor
Protocol4a: WS-AT
ProtocolCopyright © 2006 Sun Microsystems K.K.

4b: XA
Protocol<<subordinate>>
Java Coordinator39

分散トランザクション (2)Java EE/WSIT クライアント主導の分散トランザクションの解決
1: TxnBegin

Javaクライアント

3: TxnCommit
2a: Invoke.NET
Web サービスJava
Web サービス
4b: XA
Protocol<<root>>Java Coordinator

2b: Register
2c: WS-Coor
Protocol4a: WS-AT
ProtocolCopyright © 2006 Sun Microsystems K.K.

4b: MSDTC
Protocol<<subordinate>>
MS Coordinator40• Project Tango (WSIT) の仕組み
> セキュリティ> 信頼性メッセージング> トランザクション> ツールサポート• Project Tango (WSIT) を使う• Project Tango 今後の動向• まとめ・参考資料
Copyright © 2006 Sun Microsystems K.K.

41

WSIT を利用する開発形態
Java EE アプリ

NetBeans
WSIT プラグイン
ＸＭＬ手書きWSIT 設定ファイル(wsit-*.xml)(META-INF/wsit-*.xml)

Servlet アプリ

またはその他 IDE(WEB-INF/wsit-*.xml)+

WSIT の設定ファイルを作成・パッケージ化しWSIT 対応のアプリケーションサーバにアプリケーションを配置する
Copyright © 2006 Sun Microsystems K.K.

42

NetBeans WSIT プラグイン

高信頼性メッセージングなどに関する設定を作成した Web サービスに対してダイアログから設定
Copyright © 2006 Sun Microsystems K.K.

43

• Project Tango (WSIT) の仕組み
> セキュリティ> 信頼性メッセージング> トランザクション> ツールサポート• Project Tango (WSIT) を使う• Project Tango 今後の動向• まとめ・参考資料
Copyright © 2006 Sun Microsystems K.K.

44

Project Tango を使うために必要な物• Project Tango(WSIT) の利用のために必要なもの> GlassFish v2 または Tomcat 5.5> Apache Ant 1.6.5 以上> Project Tango(WSIT) の配布ファイル [1]> NetBeans 5.5 と WSIT プラグイン [2]+[1] WSIT は GlassFish v2 リリース時に GlassFish に含まれた形で提供されるようになりますが、現在は別々に配布されています[2] WSIT プラグインはアップデートセンタ経由で配布されています
Copyright © 2006 Sun Microsystems K.K.

45

Project Tango を使うための準備 (1)• GlassFish の入手> GlassFish v2 Main branch b15[1] の入手• GlassFish のインストール> java -Xmx256m -jar glassfish-installer-v2-b15-platform.jar• GlassFish のセットアップ> 展開された配布ファイル内の設定ファイルを使ってセットアップ> ant -f setup.xml[1] https://glassfish.dev.java.net/public/downloadsindex.html#Promoted_binary_builds

Copyright © 2006 Sun Microsystems K.K.

46

Project Tango を使うための準備 (2)[1]• WSIT ファイルの入手> https://wsit.dev.java.net よりバイナリを入手 [2]> 入手した jar ファイルを実行しファイルを展開> java -jar wsit-1_0_M20060827-fcs-bin-b03c-14_sep_2006.jar• GlassFish にインストール> 展開した WSIT 配布ファイルに含まれる ant スクリプトを利用> ant -Das.home=[AS のインストール場所 ] -f wsit-on-glassfish.xml install[1] このページの手順は GlassFish v2 リリース後には不要となる手順です[2] https://jax-ws.dev.java.net/servlets/ProjectDocumentList?folderID=5648&expandFolder=5648&folderID=5648
Copyright © 2006 Sun Microsystems K.K.

47

Project Tango を使うための準備 (3)• NetBeans の入手とインストール> http://jp.netbeans.org より入手しインストール• WSIT プラグインのインストール> メニューの「ツール」→「アップデートセンター」より WSIT プ
ラグインを入手、インストール• GlassFish を開発環境用サーバとして登録> 「実行時」ウインドウの「サーバ」よりサーバ登録

Copyright © 2006 Sun Microsystems K.K.

48

Web サービス作成と WSIT の設定 (1)• NetBeans 上にプロジェクトを作成> プロジェクトの実行環境として Glassfish v2 を選択

Copyright © 2006 Sun Microsystems K.K.

49

Web サービス作成と WSIT の設定 (2)• Web サービスの作成> メニュー「新規作成」から Web サービスを選択

Copyright © 2006 Sun Microsystems K.K.

50

Web サービス作成と WSIT の設定 (3)• WSIT の設定> 作成した Web サービスを選択、右クリックし「 Edit WebService Attributes 」を選ぶ

Copyright © 2006 Sun Microsystems K.K.

51

• Project Tango (WSIT) の仕組み
> セキュリティ> 信頼性メッセージング> トランザクション> ツールサポート• Project Tango (WSIT) を使う• Project Tango 今後の動向• まとめ・参考資料
Copyright © 2006 Sun Microsystems K.K.

52

Project Tango のロードマップ
製品化されることでSun からの商用サポート

オープンソース開発
WSIT Early Access 版

GlassFish
NetBeans 5.5 Plugin
Early Access 版

製品化
Sun Java System
App. Server 9.1

JavaES 6.0

NetBeans Plugin

2007

JavaOne 2006

注 : ロードマップは予告なく変更される場合があります
Copyright © 2006 Sun Microsystems K.K.

53

GlassFish と Project Tango
GlassFish v2 m3
12 月初旬GlassFish v2 リリース

2007 年 4 月末頃

2007

JavaOne 2006

注 : ロードマップは予告なく変更される場合があります
GlassFish の最新ロードマップ : http://www.glassfishwiki.org/gfwiki/Wiki.jsp?page=Milestones
Copyright © 2006 Sun Microsystems K.K.

54

• Project Tango (WSIT) の仕組み
> セキュリティ> 信頼性メッセージング> トランザクション> ツールサポート• Project Tango (WSIT) を使う• Project Tango 今後の動向• まとめ・参考資料
Copyright © 2006 Sun Microsystems K.K.

55

まとめ
• Project Tango(WSIT) は Web サービス
相互運用性の問題を解決するオープンソース・プロジェクトです• Project Tango(WSIT) は標準ベースの技術です• Project Tango(WSIT) を利用する際にプログラムの変更は必要ありません
Copyright © 2006 Sun Microsystems K.K.

56

参考資料
• 関連サイト> https://wsit.dev.java.net - Project Tango Web サイト> https://glassfish.dev.java.net - Project GlassFish Web サイト> http://msdn.microsoft.com/webservices/indigo/ - Project Indigo(WCF)• チュートリアル> http://java.sun.com/webservices/interop/reference/tutorial/doc/index.html• Web サービス相互互換性ポータル> http://java.sun.com/webservices/interop/> http://msdn.microsoft.com/webservices/building/interop> http://mssoapinterop.org/ws/

Copyright © 2006 Sun Microsystems K.K.

57

ご静聴ありがとうございました

ご質問をどうぞCopyright © 2006 Sun Microsystems K.K.

58

これで解決、Web サービス相互運用性
Windows と Java
Takayuki Okazaki
takayuki.okazaki@sun.com
http://blogs.sun.com/okazaki