J2EE1.4

JAX-RPC v1.1 (Java API for XML-based RPC)
SAAJ (SOAP with Attachments API for Java)
Web Services for J2EE
JAXR (Java API for XML Registries)
WS-Iへの対応@JAX-RPC

JAX-RPC
XMLを使ったRPC(Remote Procedure Cell:遠隔操作呼び出し)を実装するためのJavaの標準仕様
JCPにてJSP-101として策定されたもの
JAX-RPCの仕様は以下が目的
・JavaプラットフォームでのXMLベースのRPCをサポートするAPIの定義
・基本レベルのプロトコルバインディングの定義
JAX-RPCベースのサービスの定義/Javaアプリを開発するための基本APIの定義
・ヘテロジーニアス(混合)な環境での相互接続性のサポート
JAX-RPC実装に対する適合性と相互接続性の検証のための要件の定義
・JAX-RPC APIとメカニズムの拡張可能+モジュラー保持

■RPC
遠隔操作呼び出し
RMI(Remote Method Invocation)と同じ意味
要は分散オブジェクトの技術
環境Aで環境Bにいる処理を実行させたい時に両者を繋げる必要がある
環境Aと環境B間にミドルウェアを挟んで両者を連携させる方式がRPCゆうもの
JAX-RPCは RPC+Java+XML+J2EEって感じ

ちなみに
既存するJavaの分散オブジェクト技術の Java-RMIやEJBに対し
JAX-RPCは 分散オブジェクトを連携させるWebサービスのAPI
つまり、SOAPWSDLUDDIといったXMLで分散オブジェクトモデルをJavaで実現するもの
Webサービス技術
XMLを使ったシステム連携技術
インターネット上でRPCを行う仕様が含まれてる

■JAX-RPCの決まりごと
・JAX-RPCの使われ方
・前提
WSDL/XML-Java間のマッピング
SOAPバインディング
・添付付きSOAP
・コアAPI
・クライアント・プログラミング・モデル
・サービス・エンドポイント・モデル
・サービス・コンテキスト
SOAPメッセージ・ハンドラ
・JAX-RPCランタイム・サービス
・相互接続性
・拡張可能タイプ・マッピング

■JAX-RPCの概要
JAX-RPCをサポートするミドルウェア/開発ツール/それに搭載されるアプリの関係を定義
JAX-RPCは RPCの仕様であって
Webサービス・アーキテクチャであるSOAPWSDLUDDIによるデルタモデルを実現するものでない

利用する技術がSOAPとWSDL
発見メカニズムにJNDIを利用

JAX-RPCでは
Webサービスの機能を提供するプログラムコードを サービス・エンドポイント と呼ぶ
エンドポイントの機能は
interface句で定義することになっていて
これを サービス・エンドポイント・インタフェース(SEI) という

サービス・エンドポイントは J2EEのコンポーネント・モデルに従うとされていて
EJBのステートレス・セッションBeanや JavaBeanなどが実装に使われる
サービス・エンドポイントは
J2EEサーバにデプロイされて実行されるが
デプロイモデルや方法はJAX-RPCの管轄外で
J2EE1.4のWeb Services for J2EE (JSR-109)で規定されている

 [ServiceClientAP]←WSDL―[WSDL]←JavaMapping→[ServiceEndPoint]
      ↓                                ↑
     [Stub]                          Container/Dispatch
      ↓                                ↑
 JAX-RPC CoreAPI                      JAX-RPC CoreAPI
ClientSide/JAX-RPC Env←-protocol/transport-→ServerSide/JAX-RPC Env

仕掛け
クライアントが サービス・エンドポイント・インタフェースに対してプログラミング
インタフェースの実装はスタブ
スタブを呼び出すことで クライアント側の実行環境がSOAPでサーバ側の実行環境を呼び出す
サーバ側の実行環境が リクエストをサービス・エンドポイント(JavaBean/EnterpriseBean)にdispatchしてメソッドを呼び出す
メソッドの戻り値が 逆ルートを通ってクライアントアプリケーションに戻る

スタブは WSDLから自動生成されるもので サーバベンダによって異なるもの
スタブは サービス・エンドポイント・インタフェースが実装されてる
クライアント・アプリは このスタブのインタフェースに対してプログラミングすることで サービスを呼び出せる

■WSDL/XML-Java間のマッピング
Webサービスのインタフェース情報はWSDLで記述するのがルール
JAX-RPCは WSDLとJavaのマッピングルールを定義

名前のマッピング
XMLに付けられた名前(要素名)は 基本的にJavaのクラスや変数名にマッピングされる
Javaで使ってはいけないキーワードには アンダースコアが前に付加される

型のマッピング
XML SchemaとSOAPエンコーディングをサポートすること
要は複雑な定義
マッピング機能は JAX-RPC実装したJ2EEサーバが提供

■SOAPバインディング
JAX-RPCはバインディングに依存しない仕様で
SOAPバインディングは 単なる1つの選択肢として定義されてる

SOAPの仕様では
スタイルにRPC型とドキュメント型
エンコーディングにSOAPエンコーディングとリテラル型
がある
JAX-RPCは↓な組合せをサポート
・RPC/encoded
・RPC/literal
・document/literal

J2EEサーバは ↑の他に↓クラスの使い方も規定
・javax.xml.soap.SOAPElement
・javax.xml.soap.SOAPFactory
・javax.xml.soap.SOAPFaultException

■添付付きSOAP
SOAPなどのXMLプロトコルでは バイナリ形式のデータを取り扱い難い

添付データを扱う方式として[SOAP Messaging with Attachments]を仕様として規定
JAX-RPCでは MIMEを利用する添付データをサポート
JavaコードからMINE処理するために JavaBeansActivationFrameworkのjavax.activation.DataHandlerを利用
JAX-RPCをサポートするサーバは 用意されたハンドラで SOAPメッセージを簡単に添付データを付加できる仕組み

■コアAPI
クライアント側のプログラムコードが使うクラス/インタフェース
・javax.xml.rpc.Stub(IF)
・javax.xml.rpc.Call(動的呼び出しモデル)
・javax.xml.rpc.Service(IF)
・javax.xml.rpc.ServiceFactory
・javax.xml.rpc.JAXRPCException

ServiceFactory、Service、Cellは 低レベル・インタフェースと呼ばれ JAX-RPCのクライアント・ランタイムに直接アクセスできる

このAPIでクライアントの実装には2つのアプローチが可能
Stub(IF)を実装したスタブ(SOAPでいうプロキシクラス)を生成する方法
(プリビルド型でサービスにバインドする方法)

Cell(IF)を実装するダイナミックにバインドする方法
一般的なのは前者

ダイナミックバインド方式は
JavaBeansのリフレクション等と似たもの
これでワークフローエンジンなどでサービスをプラグインしたり
開発ツール上でサービスを動的に認識して扱ったりできるようになる

■クライアント・プログラミング・モデル
JAX-RPCのクライアントはJNDIでLOOKUPしてサービスに対するポート(インタフェース)を取得する

スタブの取得
Context ctx = new InitialContext();
com.example.StockQuoteService service = ctx.lookup("java:comp/env/StockQuoteService");
com.example.StockQuoteProvider provider provider = service.getStockQuoteProvider();
float quotePrice = service.getLastTradePrice("ACME");

実行するために
デプロイメント・ディスクリプタにservice-ref-nameやservice-ref-typeを記述する

■サービス・エンドポイント・モデル
Webサービスの機能を提供するモジュールの実装形式、サーバ上での稼動形式を決めたもの

JAX-RPCが規定しているサービス・エンドポイント・モデルは
サーブレット・コンテナ上にデプロイされるJAX-RPCサービスのためのもの
EJBコンテナ上でのJAX-RPCサービスは JSR-109/EJB2.1で規定されてる

サーブレット・コンテナ上のサービス・エンドポイントは
Javaクラスで WSDLの記述とマッピングされる
WSDLが既存する場合は
マッピングツールで雛形を生成し 中身を埋める
もしくは
既存Javaクラスにインタフェース(サービス・エンドポイント・インタフェース)を定義し それを基にWSDLを生成する

■サービス・コンテキスト
サービスと呼び出し元のクライアント間で取り交わされる状態を維持するための情報
実際にはSOAPヘッダで交換される

サービス・コンテキストは2種類
暗黙的 と 明示的

暗黙的サービス・コンテキスト
セキュリティ情報のようなJ2EEが自動的に運搬するようなもの

明示的サービス・コンテキスト
アプリケーションに実装する必要のあるもの


ref:
http://www.atmarkit.co.jp/fjava/kaisetsu/j2eewatch01/j2eewatch01.html

tag : JAX-RPC SAAJ Web Service JAXR WS-I SOAP WSDL UDDI

2009-01-31 20:14 : j2ee : コメント : 0 : トラックバック : 0 :
コメントの投稿
非公開コメント

« next  ホーム  prev »

search

ad



counter


tag cloud

category cloud