第4回 J2EEカンファレンス
JAX-RPC 2.0仕様策定メンバが語る
Webサービス技術
~ JavaOne 2004でベールを脱いだJ2EE 5.0のコア技術、JAX-RPC新仕様 ~
2004年7月14日
株式会社 NTTデータ
技術開発本部
木村 利幸 / <[email protected]>
Java Community Process
JSR-224 Expert Group Member
Apache Axis Committer
Toshi <[email protected]>
-本日の
本日の
Agenda
Agenda
!
JavaOne 2004で見えてきたもの
!
Java 2 PlatformとJ2EE
!
Webサービスの定着度
!
EJB拡張から見た J2EE 5.0までの進化
!
JAX-RPC 2.0とは
!
JAX-RPCの動作概要
!
JAX-RPC 2.0のゴール
!
JAX-RPC 2.0策定状況
!
JAX-RPCとWebサービス関連仕様の関係
!
新旧JAX-RPC仕様の比較
!
JAX-RPC 2.0実装方法
!
関連新着情報
etc.
-JavaOne 2004
JavaOne 2004
で
で
見えてきたもの
見えてきたもの
!
J2EEの次期バージョン『J2EE 5.0』の発表
!
正式提供は 2005年後半 を予定
!
J2EE 5.0の主な技術要素
!
ベース仕様:
JSR-52, 127, 181, 220, 222, 224, 245
!
特に重要と列挙された技術
!
EJB (Enterprise JavaBeans) 3.0 : [
JSR-220
]
!
JAXB 2.0 : [
JSR-222
]
!
Webサービス用APIである
JAX-RPC 2.0
: [
JSR-224
]
!
JavaコミュニティとOSSコミュニティの連携強化
!
J2SE 5.0(Tiger)は年内に正式リリース
※
JSR
・・・ Java Specification Requestの略。Java全般に関する標準化団体である
JCP (Java Community Process) に提案された仕様案を指す。
Java 2 Platform
Java 2 Platform
と
と
J2EE
J2EE
( Javaプラットフォームを支える3本柱 )
J2SE
J2SE
J2ME
J2EE
Enterprise Edition
Standard Edition
Micro Edition
EJB
EJB
JAXB
JAXB
JAX-RPC
JAX-RPC
Webサービスを
Webサービスを
容易に実現する
容易に実現する
Java 2 Platform
過大評価傾向
過大評価傾向
過小評価傾向
過小評価傾向
・HTTP
・HTTP
・SMTP
・SMTP
・FTP
・FTP
等
等
・XML
・XML
メディアによる
メディアによる
流行期
流行期
メディアによる
メディアによる
反動期
反動期
真の流行期
真の流行期
一般的なハイプ曲線
一般的なハイプ曲線
Web Service
Web Service
ハイプ曲線
ハイプ曲線
(
(
出典
出典
:
:
ガートナー
ガートナー
)
)
Web
Web
サービス
サービス
の基盤技術
の基盤技術
Web
Web
サービスの定着度
サービスの定着度
-
-
ハイプ曲線へのマッピング
ハイプ曲線へのマッピング
-
-Now
Now
1999 2000 2001 2002 2003 2004 2005
1999 2000 2001 2002 2003 2004 2005
【
注
目
度
(
期
待
度
)
】
【時間】
黎明期
(レイメイキ)
流行期
流行期
反動期
反動期
啓蒙期
啓蒙期
安定期
安定期
J2EE 1.2
J2EE 1.2
EJB
EJB
拡張から見た
拡張から見た
J2EE 5.0
J2EE 5.0
までの進化
までの進化
J2EE 5.0
J2EE 5.0
J2EE 1.3
J2EE 1.3
J2EE 1.4
J2EE 1.4
EJB 3.0
EJB 2.0
EJB 2.1
EJB 1.0
EJB 1.1
←
Before J2EE
After J2EE
→
POJO
JSR-101
JSR-109
JSR-224
JSR-181
JSR-222
【
機
能
/
性
能
(
拡
張
)
】
JAX-RPC 1.1
JAX-RPC 2.0
※
POJO・・・Plain Old Java Objectの略。EJBと対比して用いられ、
普通のJavaオブジェクトのことを指す。
JVM境界突破
パフォーマンス改善
ネットワーク境界突破
簡易開発(EoD)提供
(
(
RPC [
RPC [
遠隔手続き呼出し
遠隔手続き呼出し
]
]
を切り口としての分析
を切り口としての分析
)
)
【時間】
-JAX
JAX
-
-
RPC 2.0
RPC 2.0
とは
とは
!
Java API for XML-Based RPC ver 2.0 の略
!
Webサービスを実現するためのJava API標準仕様
!
JCP (Java Community Process) で標準化実施
!
現行仕様はJAX-RPC 1.1 (JSR-101) で、ver 2.0策定中
!
JAX-RPC ver 2.0の開発コードは JSR-224
!
JSR-224は、同分野の専門家を集めてExpert Group(EG)
を構成し、標準化を行っている
Sun
NTTデータ
・・・
JSR
1
JSR
101
JSR
224
選抜メンバ参加
選抜メンバ参加
選抜メンバ参加
標準化層
標準化層
標準化層
JAX
JAX
-
-
RPC
RPC
の
の
動作概要
動作概要
JVM
Webコンテナ
<? <?xml version="1.0"?>xml version="1.0"?> <SOAP<SOAP--ENV:EnvelopeENV:Envelope xmlns:SOAPxmlns:SOAP--ENV=ENV= "http://schemas.xmlsoap.org/soap/envelope/">
"http://schemas.xmlsoap.org/soap/envelope/">
<SOAP
<SOAP--ENV:Header> </SOAPENV:Header> </SOAP--ENV:Header>ENV:Header>
<SOAP<SOAP--ENV:Body>ENV:Body>
<m:GetLastTradePrice xmlns:m="Some
<m:GetLastTradePrice xmlns:m="Some--URI">URI">
<symbol>DIS</symbol>
<symbol>DIS</symbol>
</m:GetLastTradePrice>
</m:GetLastTradePrice>
</SOAP
</SOAP--ENV:Body>ENV:Body> </SOAP
</SOAP--ENV:Envelope>ENV:Envelope>
クライアント側
JAX-RPC
ランタイム
JAX-RPC API
サーバ側
JAX-RPC
ランタイム
JAX-RPC API
JVM
クライアント
サーバ
スタブ
Webサービス
(エンドポイント)
(
(
JAX
JAX
-
-
RPC 1.1
RPC 1.1
仕様で示される
仕様で示される
JAX
JAX
-
-
RPC
RPC
の
の
動作モデル
動作モデル
)
)
クライアントAP
WSDL
(Webサービス記述言語)
XML
XML
プロトコル
トランスポート
JAX
JAX
-
-
RPC 2.0
RPC 2.0
の
の
ゴール
ゴール
(
(
主な内容のみ抜粋
主な内容のみ抜粋
)
)
!
各種業界標準への追従
!
SOAP 1.2
!
WSDL 2.0
!
WS-I * Profile対応
(Basic Profile 1.1, Attachment Profile 1.0, Basic Security Profile 1.0)
!
JCP策定の他JSRへの追従
!
JAXB
(JSR-222)
:
Java <-> XML (
順序性なしの相互変換 )
!
Web Services Metadata for Java Platform:
アノテーション
(JSR-181)
!
新領域への挑戦
!
Asynchrony:
非同期性の実現
!
Non-HTTP Transports: プロトコル対応拡張
JAX
JAX
-
-
RPC 2.0
RPC 2.0
策定状況
策定状況
日付
JCPステージ名
2004年6月23日
Early Draft
2004年?月予定
Public Draft
2005年?月予定
Proposed Final Draft
2005年春予定
Final Specification
!
仕様化スケジュール
<http://www.jcp.org/aboutJava/
communityprocess/edr/jsr224/>
下記アドレスからEarly Draft版の仕様を
ダウンロード可能 [英語版のみ]:
!
Expert Groupメンバ
(
★
: Apache Axis Committer、
◆
: WS-I WGメンバ、
◇
: WS-I企業会員
)
Chavdar Baikov (SAP AG)
Russell Butek (IBM)
Manoj Cheenath (BEA Systems)
Ugo Corda (SeeBeyond Technology Corp)
Glen Daniels (Sonic Software)
Alan Davies (SeeBeyond Technology Corp)
Jim Frost (Art Technology Group Inc)
Kevin R. Jones (Developmentor)
Toshiyuki Kimura (NTT Data Corp)
Doug Kohlert (Sun Microsystems, Inc)
Daniel Kulp (IONA Technologies PLC)
Sunil Kunisetty (Oracle)
Changshin Lee (Tmax Soft, Inc)
Srividya Natarajan (Nokia Corporation)
Bjarne Rasmussen (Novell, Inc)
Sebastien Sahuc (Intalio, Inc.)
Rahul Sharma (Motorola)
Rajiv Shivane (Pramati Technologies)
Dennis M. Sosnoski (Sosnoski Software)
Christopher St. John (WebMethods Corporation)
★
★
★
★
◇
◇
◇
◆
◇
◆
◆
◆
◇
◆
◆
◇
◆
◇
JAX
JAX
-
-
RPC
RPC
と
と
Web
Web
サービス関連仕様の関係
サービス関連仕様の関係
(
(
相互接続性および再利用性確保に向けた取組み
相互接続性および再利用性確保に向けた取組み
)
)
.
.
NET
NET
Java
Java
Axis
Axis
・・・
・・・
・・・
・・・
・・・
・・・
・・・
・・・
実装群
・・・
・・・
①
①
W3C
W3C
③
③
WS
WS
-
-
I
I
WS
WS
-
-
I Basic Profile
I Basic Profile
WS
WS
-
-
XX
XX
WS
WS
-
-
XX
XX
JCP
JCP
JAX
JAX
-
-
RPC ver 1.0 / 1.1
RPC ver 1.0 / 1.1
【
【
現行】
現行】
②
②
JAX
JAX
-
-
RPC ver 2.0
RPC ver 2.0
【
【
策定中】
策定中】
④
④
仕
様
群
A
P
I
概
要
相
互
接
続
性
WS-I準拠実装間での
相互接続性を更に追求
Java実装の相互接続性
及び再利用性を確保
SOAP 1.1 / 1.2
SOAP 1.1 / 1.2
HTTP 1.1
HTTP 1.1
XML 1.0
XML 1.0
XML Schema
XML Schema
新旧
新旧
JAX
JAX
-
-
RPC
RPC
仕様の比較
仕様の比較
※ JAX-RPC 2.0: 従来通り、POJOによるエンドポイント実装もサポート
※ JAX-RPC 2.0: EJB(Stateless Session Bean)実装もPOJOライクに実装可能
動
作
概
要
!
J2EE 5.0で採用
!
EJB 3.0
!
J2EE 1.4で採用
!
EJB 2.1
適
用
!
1.Xの拡張
!
WS-I Profile群への準拠
!
非HTTPのサポート
!
非同期性の実現 [ invokeAsync() ]
!
初のWebサービス標準API
!
HTTPが必須プロトコル
!
同期型/一方向型通信のみ対応
[ invoke() , invokeOneWay() ]
概
要
JAX-RPC 2.0
JAX-RPC 1.X (+ JSR-109)
EBJ
Container
Web
Container
JAX-RPC
Runtime
Client AP
WebService
(Endpoint)
JAX-RPC
Runtime
Stateless
Session Bean
Stub
POJO
JAXRPC 2.0実装方法
-( その1: アノテーション編 )
※ 以降ご紹介するソースは実装の一部であり、完全なコードではありません。
※ 策定段階の仕様であるため、今後変更される可能性もあります。
アノテーション技術の導入
アノテーション技術の導入
!
JSR-175としてJava用メタデータのインフラとして標準化中
!
J2SE 5.0 (
“Tiger”)への採用が決定している
!
Javadoc で利用していた
“アノテーション”をJavaコードに適用
!
class、interface、fieldおよびmethodに独自属性が定義可能
!
JSR-181中でWebサービスへの適用方法を標準化中
/***
*
@author Toshiyuki Kimura (
[email protected]
)
*/
public class MyClass {
…
【参考】
既存のアノテーション利用事例
javadoc実行
Author:
Toshiyuki Kimura (
[email protected]
)
Javaソースコード
Webサービスにおけるアノテーション
Webサービスにおけるアノテーション
–
–
POJO
POJO
-
-( JSR-181 : Web Services Metadata for the Java Platform )
作成物
J2EE
5.0
以降
J2EE
1.4
以前
Javaソースコード
デプロイ記述子
アノテートされた
Javaソースコード
何がメリットなのか?
@WebService (
name = "EchoService",
targetNamespace = http://www.openuri.org/2004/04/HelloWorld
)
public class EchoServiceImpl {
@WebMethod (
operationName = "echoString",
action= "urn:EchoString "
)
public String echo(String input) {
return input;
}
}
Webサービスにおけるアノテーション
Webサービスにおけるアノテーション
–
–
EJB
EJB
-
-( JSR-220 : Enterprise JavaBeans ver 3.0 )
@WebService
@Stateless
public class CalculatorBean
implements Calculator {
@WebMethod
public float add (int a, int b) {
return a + b;
}
}
public interface Calculator {
public float add (int a, int b);
}
作成物
J2EE
5.0
以降
J2EE
1.4
以前
Javaソース1
(Beanクラス)
デプロイ記述子
アノテートされた
Javaソースコード
Javaソース2
(Homeインターフェース)
Javaソース3
(Remoteインターフェース)
何がメリットなのか?
JAXRPC 2.0実装方法
-( その2: 非同期API編 )
※ 以降ご紹介するソースは実装の一部であり、完全なコードではありません。
※ 策定段階の仕様であるため、今後変更される可能性もあります。
クライアント・サイド
クライアント・サイド
非同期
非同期
API
API
–
–
ポーリング
ポーリング
-
-javax.xml.rpc.Dispatch disp = service.createDispatch(portName);
JAXRPCContext reqCtx = disp.getRequestContext();
reqCtx.setProperty(...);
Response<Object> res = disp.
invokeAsync(reqMsg);
while ( !
res.isDone()
) {
// ウエイト中の処理内容を記載
}
【注意】
現時点で規定されているのは、クライアントサイドの非同期APIのみであり
サーバサイドの非同期性に関しては言及していない。
クライアント・サイド
クライアント・サイド
非同期
非同期
API
API
-
-
コールバック
コールバック
-
-javax.xml.rpc.Dispatch disp = service.createDispatch(portName);
JAXRPCContext reqCtx = disp.getRequestContext();
reqCtx.setProperty(...);
MyHandler handler = new MyHandler();
disp.
invokeAsync(reqMsg, handler);
class MyHandler implements
AsyncHandler
<Object> {
public void
handleResponse
(Response<Object> res) {
Source resMsg = (Source)res.get();
JAXRPCContext resCtx = res.getContext();
// 処理結果に関する処理を記載
}
}
-Apache Beehive Project
Apache Beehive Project
の発足
の発足
(
(
JSR
JSR
-
-
175, 181
175, 181
実装のフレームワークがオープンソースに
実装のフレームワークがオープンソースに
!! )
!! )
Apache Axis
Apache Axis
の日本語サイト
の日本語サイト
(
(
待望の
待望の
Axis
Axis
和訳サイトを開設
和訳サイトを開設
)
)
- The End -
ご清聴ありがとうございました。
本資料で利用される、Sun, Sun Microsystems, Java, J2EEなどの語句は、 Sun Microsystems 社殿の商標もしくは登録商標です。また、それ以外の 製品名等は一般的にそれら各企業の商標ですが、表示を省略しています。