...

サービス・コンポーネント・ アーキテクチャー(SCA)機能、実装 WebSphere Process Server V6 SCA機能・実装

by user

on
Category: Documents
21

views

Report

Comments

Transcript

サービス・コンポーネント・ アーキテクチャー(SCA)機能、実装 WebSphere Process Server V6 SCA機能・実装
WebSphere Process Server V6
SCA機能・実装
サービス・コンポーネント・
アーキテクチャー(SCA)機能、実装
万仲龍樹
ISE Web基盤設計
Copyright IBM Japan Co.,Ltd 2005
1
WebSphere Process Server V6
SCA機能・実装
Agenda
„
„
„
„
„
„
概要
アーキテクチャー
Service Component Definition Language (SCDL)
プログラミングモデル
インポート/エクスポートのメカニズム
Quality of Service(QoS)
2
2
WebSphere Process Server V6
SCA機能・実装
概要
3
3
WebSphere Process Server V6
SCA機能・実装
SCA概要
„
„
SCA: Service Component Architecture
IBMが提示するサービス指向のコンポーネント・モデルで
ある
‹
‹
„
SCAにより以下のような各種技術に対し、単一のインター
フェースでアクセス可能となる
‹
„
„
コンポーネント組み立て形式のアプリケーション構築が可能
標準化も予定されている
セッション・ビーン / Webサービス / Java / BPELビジネス・プロセスetc.
Webサービスにない、QoS定義などが可能
SCAは「サービスの使用方法」と「サービスの開発方法」の
双方をカバー
4
SCAとはService Component Architectureの略で、サービス指向のコンポーネント・モデルを規定した仕様
です。SCAを使用することでEJBやWebサービス、Javaクラスなどに対し、各種分散コンピューティング技術
を使用することなく単一のインターフェースでのアクセスが可能となります。したがって開発者はSCAを活
用することにより、一から作り上げる形式ではなく、既存のコンポーネントを組み合わせることでアプリケー
ションを構築することができるようになります。
SCAではトランザクションやセキュリティ設定などのQoS(Quality of Service)定義が可能です。これが現時
点でのWebサービス技術との違いの1つです。
SCAの定義する対象は「サービスの使用方法」のみならず、「サービスの開発方法」をもカバーしています。
このため、IBMは後述のように開発ツールを提供しています。このツールを使用することでSCAを実装した
単体コンポーネント開発が可能になり、また既存コンポーネント組み合わせてアプリケーション統合を行う
こともできます。
4
WebSphere Process Server V6
SCA機能・実装
SCAの位置付け
BPEL + Extensions
Business Objects
(SDOベースの技術)
Service Component
Architecture (SCA)
5
SCAは図のようにIBMが考えるSOA基本技術の一角をなすものとして位置づけられています。
SOA基本技術とは、サービスの組み合わせ(Composition)、呼び出し(Invocation)、データ(Data)の三つ
を柱として成り立ちます。
SCAはサービスの呼び出しを担当します。サービス・コンポーネントおよびそれらの相互インタラクションは
サービス・コンポーネントによって記載されます。SCAの中で取り扱われるデータはBusiness Objects(BO)
と呼ばれるSDOをベースとした技術で表現されることにより、標準的なデータとしての取り扱いが可能に
なっています。
SCA/BOによりサービス間の単純なインタラクションを記載することは可能ですが、「ある条件を満たした
場合にサービスAを、そうでない場合にサービスBを」といったより複雑な、ワークフロー的なサービス呼び
出しの組み合わせは、最後のBPEL(およびその拡張)により実現されます。BPELとはBusiness Process
Execution Language (for Web Services)の略でOASISに提出されたWebサービス・コレオグラフィのための
標準言語です。
5
WebSphere Process Server V6
SCA機能・実装
SCAの位置付け(続き)
„
WPSのコンポーネントで見た場合
サービス・
コンポーネント
Business
Business
Processes
Processes
サポーティング
・サービス
Interface
Maps
SOA コア
Human
Human
Tasks
Tasks
Business
Business
State
State
Machines
Machines
Business
Relationships
Object Maps
Service Component
Architecture
Business
Objects
Business
Business
Rules
Rules
Selectors
Selectors
Common Event
Infrastructure
WebSphere Application Server (J2EE Runtime)
6
WebSphere Process Serverは複数の論理的なコンポーネントから構成されているといえます。WebSphere
Application Serverをベースとして、大きく3層からなります。
そのうちの「SOAコア」と呼ばれる基本的なコンポーネントの層に位置付けられます。
6
WebSphere Process Server V6
SCA機能・実装
アーキテクチャー
7
7
WebSphere Process Server V6
SCA機能・実装
SCAアーキテクチャーの基本
„
コンポーネント組み立て形式のアプリケーション構築が可能。
‹
WPS/WID上ではビジネス・プロセスやヒューマン・タスクなどは全てSCAコンポーネ
ントとして扱われる
„
定義情報はSCDLというXMLファイルに保存される。
„
コンポーネントのカストマイズはコーディングではなく、GUI操作や各種
のプロパティ設定にて可能。
„
JavaやBPELなどの各種言語により、サービス・コンポーネントの実装
を定義することが可能。
„
インターフェースとしてJavaとWSDLをサポート
8
SCAでの組み立て形式のアプリケーション構築を行うためには、この章で解説するSCAの構成要素を理
解する必要があります。
その前にまず、SCAのアーキテクチャーの基本をここで解説します。
SCAコンポーネントの各種定義情報はSCDL(Service Component Description Language)というXMLファイ
ルに記載されます(詳細を後述)。コンポーネントをカストマイズする際は、基本的にコーディングではなく
XMLファイルの各種定義情報の変更によって行います。サービスの実装はJavaやBPELなどで定義できま
すが、SCAコンポーネントのワイヤリングを行う開発者とこうした実装コードを開発する開発者は役割(ロー
ル)分けがなされています。
SCAのアーキテクチャーでは、インターフェースとしてJavaとWSDLをサポートしています。
8
WebSphere Process Server V6
SCA機能・実装
サービス・コンポーネント
Java
Java
WSDL
ポート・タイプ
WSDL
ポート・タイプ
インターフェース
リファレンス
SCDL
Java
BPEL
ビジネス
ルール
Human
Task
Selector
インプリメンテーション・タイプ
9
SCAで取り扱うサービスは、SCAランタイム上で稼動する『サービス・コンポーネント』として定義されます。
サービス・コンポーネントにはサービスの呼び出し方法、サービスの実装、サービス・コンポーネントから呼
び出すその他のサービスなどの情報が定義されています。
こうしたサービス・コンポーネントの情報はSCDL(Service Component Definition Language)というXML文
書に記載され、そこには『コンポーネント名』、『インターフェース』、『リファレンス』、『インプリメンテーショ
ン』といった定義が含まれます。『インターフェース』と『リファレンス』に関しては、一つに限らず複数個定
義することが可能です。
9
WebSphere Process Server V6
SCA機能・実装
サービス・コンポーネント
ƒƒ
ƒƒ
ƒƒ
ƒƒ このコンポーネントが呼び出す他
このコンポーネントが呼び出す他
のサービスコンポーネントを定義
のサービスコンポーネントを定義
するために使用
するために使用
外部から呼び出される際の情報を定義
外部から呼び出される際の情報を定義
JavaもしくはWSDLのポートタイプをサポート
JavaもしくはWSDLのポートタイプをサポート
呼び出し方としては同期・非同期をサポート
呼び出し方としては同期・非同期をサポート
Java
Java
WSDL
ポート・タイプ
WSDL
ポート・タイプ
インターフェース
リファレンス
ƒƒ コンポーネント名はSCAモジュール内で
コンポーネント名はSCAモジュール内で
ユニーク
ユニーク
ƒƒ モジュール・ルートに対してコンポーネ
モジュール・ルートに対してコンポーネ
ント・ファイル・パスの整合を取る必要が
ント・ファイル・パスの整合を取る必要が
ある
ある
SCDL
Java
BPEL
ビジネス
ルール
Human
Task
Selector
インプリメンテーション・タイプ
ƒƒ サービス・コンポーネントは各種
サービス・コンポーネントは各種
言語やタイプでの実装が可能
言語やタイプでの実装が可能
10
同じ図を使って個々の構成要素の解説を行います。
サービス・コンポーネント自体は後述するモジュールという単位内でユニークとなる『コンポーネント名』を
持ちます。サービス・コンポーネントはJava、BPELなど各種の言語タイプで実装することが可能ですが、こ
の実装が『インプリメンテーション』としてサービス・コンポーネントに定義されます。これがサービス・コン
ポーネント自身の実装です。
通常サービス・コンポーネントはコンポーネント単体ではなく、他のサービス・コンポーネントを呼び出したり、
呼び出されたりと組み合わされて使用されます。サービス・コンポーネントとしてBPELプロセスを例に取る
と、BPEL(=サービス・コンポーネント)自身がクライアントから呼び出される場合もありますし、BPEL内の
アクティビティから外部のサービスを呼び出す場合もあります。
このようにコンポーネントが相互呼び出しをするためには、「どんなオペレーションに対してどういった引数、
戻り値を扱えばいいか」といった約束事を定義する必要があります。 『インターフェース』とは、こうしたコン
ポーネント間のインタラクションの規約(契約)であるといえます。サービス・コンポーネントのインターフェー
スには、サービス・コンポーネントが呼び出される際の規約情報を定義します。インターフェースはJavaか
WSDLのポート・タイプで定義します。
次に、サービス・コンポーネントが他のサービス・コンポーネントを呼び出す場合の規約も必要になります。
この呼び出しは『リファレンス』と呼ばれます。リファレンスは呼び出し先のサービスのプロキシとしてサービ
ス・コンポーネントに定義してあるものと捉えることも出来ます。リファレンスに定義することでサービス・コン
ポーネントからオペレーションを呼び出せるようになります。
10
WebSphere Process Server V6
SCA機能・実装
サービス・モジュール
Web
サービス・モジュール
サービス・
コンポーネント
エクスポート
サービス・
コンポーネント
スタンドアローン
リファレンス
インポート
ワイヤ
Web
11
サービス・コンポーネントの作成とは、GUIを介してmodule.scaというXML(SCDL)を編集することであると
言えます。しかし、開発ツールは最終的にこのXMLから実装コードを生成する必要があります。J2EE環境
で言うとこの実装コードはエンタープライズ・アプリケーション(EARファイル)になります。サービス・モ
ジュールとは、複数のサービス・コンポーネントを配置することが出来る枠組みであり、サービス・モジュー
ルの単位で実装コード(EAR)が生成されます。
サービス・モジュール内のサービス・コンポーネント同士はインターフェース/リファレンスを介して相互に
呼び出すことが可能ですが、サービス・モジュール間や、サービス・モジュール外の別種モジュールを呼
び出したいケースもあります。サービス・モジュールではこうした場合を想定して、サービス・モジュールか
ら外部を呼び出す際に定義する『インポート』、逆に外部からサービス・モジュールを呼び出す際に定義
する『エクスポート』などの新しい概念が追加されています。
SOAを実現するために必要な、個別技術に依存しないITアーキテクチャーを目指したサービス・コンポー
ネントは、ロケーション非依存、分散プログラミング・モデル非依存、プロトコル非依存、メッセージ・フォー
マット非依存の実現を目指しています。したがって実装コードもこれら特性を引き継ぐ必要があります。
しかし、実装コードを実行する際にはロケーション、プログラミング・モデル、プロトコルなどを決定する必要
があります。これを実現するためにサービス・モジュールで定義するのがインポートやエクスポートであり、
その内部で記述するバインディング情報です。ロケーションやプログラミング・モデル、プロトコルなど、実
装時の技術依存情報はサービス・コンポーネント自身から外部化され、独立しているためにプログラムに
影響を与えることなく変更が可能であり、環境の変化に柔軟に対応できることになります。
11
WebSphere Process Server V6
SCA機能・実装
リファレンスとワイヤ
ƒƒ そのリファレンスを定義してあるコンポーネントか
そのリファレンスを定義してあるコンポーネントか
らのみ使用される
らのみ使用される
サービス・
コンポーネント
サービス・
コンポーネント
スタンドアローン
リファレンス
ƒƒ 非SCAコンポーネントや、同一モジュール内の
非SCAコンポーネントや、同一モジュール内の
別コンポーネントから使用される
別コンポーネントから使用される
インポート
ƒƒ ターゲットとなるサービスコンポーネントや、外部
ターゲットとなるサービスコンポーネントや、外部
参照定義のインポートに対して使用される
参照定義のインポートに対して使用される
12
サービス・コンポーネントから他のコンポーネントを呼び出す際のプロキシとして定義されるリファレンスに
は『リファレンス名』、『多重度』、『インターフェース』、『ワイヤ』などの項目があります。
モジュール内のリファレンスの情報は、sca.referencesというXML(SCDL)に記載されます。リファレンスに
は『インライン・リファレンス』と『スタンドアローン・リファレンス』の2種類があります。インライン・リファレンス
は先ほどから繰り返し解説しているサービス・コンポーネントに定義された呼び出し先サービスのプロキシ
です。これはそのリファレンスを定義してあるコンポーネントからのみ呼ばれます。
もう一つは『スタンドアローン・リファレンス』で、これは同一サービス・モジュール内の別コンポーネントや
非SCAコンポーネントからサービス・コンポーネントが呼ばれる際に定義する必要があるリファレンスです。
上の図のように、リファレンスは呼び出し先のインターフェース(サービス・コンポーネントのインターフェー
スや後述するインポートのインターフェース)をポイントする必要があります。リファレンスとインターフェース
を結ぶ線で示される定義を『ワイヤ』と呼びます。開発ツールを使用した場合、呼び出し先の変更は定義
情報を書き換えるのではなくこのワイヤの結びつきをビジュアルにつなぎ替えることで実現できるため、変
更が容易に行えます。
12
WebSphere Process Server V6
SCA機能・実装
インポート
ƒƒ インポートはワイヤのターゲット先となりうる
インポートはワイヤのターゲット先となりうる
Web
サービス
サービス
コンポーネント
Stateless
Session Bean
JMS
ƒƒ サービス・モジュールに対し、どのように外部の
サービス・モジュールに対し、どのように外部の
サービスがバインドされているかを記載
サービスがバインドされているかを記載
13
サービス・コンポーネントが別のサービスを呼び出す場合、モジュール内にもう一つサービス・コンポーネ
ントを作成し、そのインプリメンテーションにサービスを定義してリファレンス/インターフェース経由で呼
び出すことが可能です。しかし、このやり方だと呼び出されるサービスはサービス・モジュールの内部に配
置せねばならず、分散アプリケーション環境には対応できません。
分散アプリケーション環境でもサービスを呼び出すためには、サービス・モジュール外のサービスを呼び
出すための仕組みが必要です。そのために提供されているのが『インポート』です。インポートを定義する
ことで、サービス・モジュールの外部にあるサービスを呼び出すことができます。インポートには『インポート
名』、『インターフェース』、『esbBinding』を定義します。(インターフェースは複数個定義が可能です。)
インポートの情報は、<インポート名>.importというSCDLに記載されます。インポートには実際の呼び出し
先のバインディング情報を記載します。バインディングの対象は他のSCAサービス・コンポーネント、(既存
JAX-RPCなどの)Webサービス、EJB Session Bean、JMSなど各種の実装が考えられます。こうした呼び出
し先はインポート内『esbBinding』に定義します。
※ 『esbBinding』はXMLのタグ名です。IDE環境では「Binding」などと記載されています。
13
WebSphere Process Server V6
SCA機能・実装
エクスポート
ƒƒ エクスポートするコンポーネントをターゲット
エクスポートするコンポーネントをターゲット
として指定する
として指定する
Web
Service
Service
Component
JMS
ƒƒ サービスがモジュール外部に対してどのよう
サービスがモジュール外部に対してどのよう
にバインドされているかを定義
にバインドされているかを定義
14
また、サービス・モジュール内のサービス・コンポーネント自身も分散環境でクライアントとなる外部のアプリ
ケーションから呼び出される可能性があります。この場合サービス・モジュール内部からの呼び出しに対応
するためのスタンドアローン・リファレンスでは分散アプリケーション環境に対応できないため、『エクスポー
ト』を定義します。
エクスポートはSCAモジュール外からサービス・コンポーネントを呼び出す場合に定義するもので、『エクス
ポート名』、『ターゲット』、『インターフェース』、『esbBinding』といった項目を定義します。エクスポートの情
報は<エクスポート名>.exportというSCDLに記載されます。
『ターゲット』には外部にエクスポートするサービス・コンポーネントを指定し、『esbBinding』にはそのサービ
スが外部に対し、どのようなバインディング情報(Webサービス、SCA、JMSのいずれか)で提供されている
かを定義します。このバインディング情報もサービス・コンポーネント自身から外部化されているため、変更
することが容易となり、また複数のバインディングに対応した複数のエクスポートを定義することで、多種の
クライアント・アプリケーションからの利用も可能になります。
14
WebSphere Process Server V6
SCA機能・実装
WIDでのサービス・モジュール
„
SCAを使用してアプリケーションを開発する際の基本的な
単位として作成
15
ここからは開発ツールであるWIDの上で、SCAの構成要素がどのように表現され、開発者が操作できるの
かについて見ていきます。
サービス・コンポーネントやインポート、エクスポートを作成するために、サービス・モジュールを作成する
必要があります。
15
WebSphere Process Server V6
SCA機能・実装
WIDでのサービス・モジュール(続き)
„
論理的なビューと物理的なビュー
16
WID上でSCAを使用するアプリケーション開発を行う場合、Business Integrationパースペクティブで作業
をすることが多くなります。
Business Integrationパースペクティブの基本的なビューとして、Business Integrationビューがあります。こ
のビューはサービス・モジュール、およびライブラリの内容を、SCAの構成要素として見やすく表示するた
めの論理的なビューです。
したがって、実際のファイルの階層構造などをそのまま反映した見え方はしません。そこでPhysical
Resourceビューを使用して、実際にファイルがどのような階層構造になっているのか、を見ることが出来ま
す。
16
WebSphere Process Server V6
SCA機能・実装
モジュールとライブラリー
„
„
WIDでは基本的な単位としてのモジュールのほかにライブ
ラリーを作成することができる。
ライブラリはインターフェースやデータタイプ、マッピングの
情報をモジュールから抽出したもの。
‹
共通部品となるものをライブラリーとして定義し、使用するモジュールから
参照できるようにする。
・ライブラリー
データ・タイプ、インターフェース、マッピングを定義
・モジュール
ライブラリーの要素に加えて、コンポーネントのワイヤリン
グ、コンポーネントの実装(ビジネス・ロジック)を定義
17
WID上でSCAアプリケーションの開発時に基本的な開発単位(プロジェクト)となる、「モジュール」と「ライ
ブラリー」について違いを説明します。
まず「モジュール」ですが、ビルドを行うことでEARを生成し、WPS上で稼動するアプリケーションを構築で
きる最小単位です。構成要素としては、サービス・コンポーネント、インターフェース、データ・タイプ、実装
ロジック、マッピングなどを含みます。
一方「ライブラリー」は、複数のモジュール間で共通で利用できるリソースを含みます。実体としてはJAR
ファイルとして、モジュールから生成されるEARに含まれます。構成要素は、データ・タイプ、インター
フェース、マッピングです。
17
WebSphere Process Server V6
SCA機能・実装
WIDでのサービス・コンポーネント
„
SCAのモジュール内に作成する
18
SCAモジュール内で一つのサービスをあらわすサービス・コンポーネントです。定義ファイルとしての
SCDLとインターフェース、ビジネスロジックから成り立っています。
18
WebSphere Process Server V6
SCA機能・実装
WIDでのリファレンスとワイヤ
„
リファレンス、およびワイヤの情報は各サービス・コンポー
ネントの定義ファイルに記述される。
19
リファレンスとワイヤは各サービス・コンポーネントのSCDLファイル内に記述されます。
19
WebSphere Process Server V6
SCA機能・実装
WIDでのインポート
„
インポートしたコンポーネントの情報がインポート用の定義
ファイルに記述される。
‹
バインディング方式はesbBindingタグに記述される
20
インポートは、定義ファイルであるSCDLとインターフェースを基本要素とします。バインディングメカニズム
によってそれ以外の定義ファイルを必要とします。Webサービスバインディングであれば、バインディング
記述を持つWSDL、ステートレス・セッションビーンであれば、EJBクライアントJARです。
バインディング情報はSCDL内のesbBindingタグの中に記述されます。
20
WebSphere Process Server V6
SCA機能・実装
WIDでのエクスポート
„
エクスポートしたコンポーネントの情報がエクスポート用の
定義ファイルに記述される。
‹
バインディング方式はesbBindingタグに記述される
21
エクスポートは、定義ファイルであるSCDLとインターフェースを基本要素とします。インポートと同様にバイ
ンディングメカニズムによって構成要素が増えます。Webサービスバインディングでは、バインディング情
報を記述したWSDLファイルが生成されます。
バインディング情報はSCDL内のesbBindingタグの中に記述されます。
21
WebSphere Process Server V6
SCA機能・実装
WIDでのビルド済みの配置コード
„
サービス・モジュールをビルドしたものをJ2EEの観点でみ
ると次のように見える
22
SCAモジュールは、ビルドを行うと、自動的にJ2EEのモジュールを生成します。
WID上では以下のようなプロジェクトを自動で生成します。
EARとなるエンタープライズ・アプリケーション・プロジェクト
WARとなるWebプロジェクト
EJB-JARとなるEJBプロジェクト
EJBクライアントに配布するためのEJBクライアントプロジェクト(Javaプロジェクト)
SCAモジュール自体は、Javaプロジェクトとして、生成されたEARのプロジェクト・ユーティリティJARとなりま
す。
自動で生成されるプロジェクトは次のようなネーミングルールによって名前がつけられます。
モジュール名を<module_name>とすると
・エンタープライズ・アプリケーション・プロジェクト:<module_name>App
・EJBプロジェクト: <module_name> EJB
・EJBクライアントプロジェクト: <module_name> EJBClient
・Webプロジェクト: <module_name> Web
22
WebSphere Process Server V6
SCA機能・実装
WPSにモジュールをDeployすると
„
SIBusに自動的にDestinationが作成される
自動で
作成される
23
モジュールをDeployするとBus上に自動でSCAコンポーネントが使用するDestinationを構成します。
SCA.SYSTEM.<cell_name>.Bus 上に次のようなDestinationが作成されます。
・sca/<module_name>
・sca/<module_name>/import/sca/dynamic/import/scaimport
・sca/<module_name/import/sca/dynamic/import/wsimport
・sca/<module_name>/export/<export_name>
・sca/<module_name/exportlink/<export_name>
・sca/<module_name>/component/<component_name>
・sca/<module_name>/import/<import_name>
・sca/<module_name>importlink/<import_name>
23
WebSphere Process Server V6
SCA機能・実装
注意事項 クライアント・プログラム
„
„
SCAモジュールを呼び出すJ2EEアプリケーションはビルド
時に作成されるWebやEJBのモジュールではなく、別の
WARファイルにして、Dependencyを作成する
このとき、クライアントのWebが含まれるEARはDeployし
てはいけない
24
SCAコンポーネントを呼び出すクライアントのJSPを作成する場合、SCAモジュールから自動生成される
Webプロジェクトではなく、独立したWebプロジェクトを作成します。
作成したWebプロジェクトをSCAモジュールのDependency エディターで追加します。そのときに、Deploy
with Moduleを選択しておくことで、SCAモジュールのEARに含めることができます。
インフォセンターも参照してください。
http://publib.boulder.ibm.com/infocenter/dmndhelp/v6rxmx/topic/com.ibm.wbit.help.ui.doc/topics/rco
nsider.html
24
WebSphere Process Server V6
SCA機能・実装
注意事項 ネーミングルール
„
Deployされるモジュール名が長くなりやすいため、OSの
ファイルシステムが許容できるファイル名の最大長を超え
てしまう
‹
‹
‹
モジュール名はなるべく短く
コンポーネント名はなるべく短く
WPS、WIDのインストールディレクトリの階層は浅く
com.ibm.ws.sm.workspace.WorkSpaceException: Update Failed: The URI
length is greater than the Windows limit of 259 characters. Unable to create
or update file:
E:¥WebSphere¥IntegrationDeveloper¥prof¥wstemp¥1071ee00f0b¥workspac
e¥cells¥widCell¥applications¥FortuneTellingServiceModuleApp.ear¥deploy
ments¥FortuneTellingServiceModuleApp¥FortuneTellingServiceModuleEJB.
jar¥META-INF¥FSWSExport_FSInterfaceHttp_Service_mapping.xml
Caused by: java.io.IOException: The URI length is greater than the Windows
limit of 259 characters. Unable to create or update file:
E:¥WebSphere¥IntegrationDeveloper¥prof¥wstemp¥1071ee00f0b¥workspac
e¥cells¥widCell¥applications¥FortuneTellingServiceModuleApp.ear¥deploy
ments¥FortuneTellingServiceModuleApp¥FortuneTellingServiceModuleEJB.
jar¥META-INF¥FSWSExport_FSInterfaceHttp_Service_mapping.xml
25
モジュールなどに含めるサービス・コンポーネントなどの名前をどのように決めるべきか、について、重要
なシステム的な制約があります。
WPS(WIDのテスト環境)が稼動するマシンのファイルシステムによって、ファイル名の絶対パスの長さが2
55文字に制限される場合、上記のようなエラーを受け取ることになります。これはOSレベルの制約である
ため、回避するためにはファイル名が制限を越えないように調整しなくてはいけません。
SCAコンポーネントが生成されるときに、自動でモジュール名などからファイル名が生成されるものがありま
す。例えば、エクスポートをWebサービスバインディングで作成した場合、次のようなファイルが生成されま
す。インターフェース名やエクスポートの名前がそのままファイル名に反映されています。
FSWSExport_FSInterfaceHttp_Service_mapping.xml
このようなファイルが実行環境ではかなり階層の奥深くに配置されることになるため、モジュールのDeploy
中にIOExceptionが発生する可能性があります。
25
WebSphere Process Server V6
SCA機能・実装
Service Component Definition Language(SCDL)
26
26
WebSphere Process Server V6
SCA機能・実装
SCDLとは
„
„
SCDL : Service Component Definition Language
サービス・コンポーネントを定義する言語
‹
„
実体はXML+XSD
WIDのAssembly Editorなどでモジュールの作成、コン
ポーネントのワイヤリングなどを行うと自動的に作成・編集
される。
27
SCAの中核となる定義ファイルはService Component Definition Language(SCDL)によって記述されます。
その実体はXSDによって定義される複数のXML文書です。
したがって、SCAモジュールを構成する要素は基本的にNotepadなどでも開発することは不可能ではあり
ませんが、WIDのような開発ツールを利用する場合と比べて、かなりの手間とバグの発生のリスクがありま
す。
27
WebSphere Process Server V6
SCA機能・実装
例:コンポーネントのSCDL
MyService.component
<?xml version="1.0" encoding="UTF-8"?>
<scdl:component xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:java="http://www.ibm.com/xmlns/prod/websphere/scdl/java/6.0.0" xmlns:ns1="http://TestModule/Interfaces/IMyService"
xmlns:ns2="http://TestModule/Interfaces/IHelloWorld" xmlns:ns3="http://TestModule/imported/StockQuote"
xmlns:scdl="http://www.ibm.com/xmlns/prod/websphere/scdl/6.0.0"
xmlns:wsdl="http://www.ibm.com/xmlns/prod/websphere/scdl/wsdl/6.0.0" displayName="MyService" name="MyService">
<interfaces>
<interface xsi:type="wsdl:WSDLPortType" portType="ns1:IMyService">
<scdl:interfaceQualifier xsi:type="scdl:SecurityPermission" role="administrator"/>
<method name="getMessage"/>
</interface>
</interfaces>
<references>
<reference name="IHelloWorldPartner">
<interface xsi:type="wsdl:WSDLPortType" portType="ns2:IHelloWorld">
<method name="hello"/>
</interface>
<wire target="HelloWorld"/>
</reference>
<reference name="StockQuotePartner">
<interface xsi:type="wsdl:WSDLPortType" portType="ns3:StockQuote">
<method name="getPrice"/>
</interface>
<wire target="StockQuote"/>
</reference>
</references>
<implementation xsi:type="java:JavaImplementation" class="com.ibm.sample.MyServiceImpl">
<scdl:implementationQualifier xsi:type="scdl:SecurityIdentity" privilege="manager"/>
</implementation>
</scdl:component>
28
あるサービス・コンポーネントのSCDLです。ファイル名は<component_name>.componentです。
サービス・コンポーネントのSCDLには主にそのサービス・コンポーネントがもつインターフェース、リファレ
ンス、インプリメンテーションについての情報を定義します。
28
WebSphere Process Server V6
SCA機能・実装
例:インポートのSCDL
StockQuote.import
<?xml version="1.0" encoding="UTF-8"?>
<scdl:import xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:_="http://ExportService"
xmlns:ns1="http://TestModule/imported/StockQuote"
xmlns:scdl="http://www.ibm.com/xmlns/prod/websphere/scdl/6.0.0"
xmlns:webservice="http://www.ibm.com/xmlns/prod/websphere/scdl/webservice/6.
0.0" xmlns:wsdl="http://www.ibm.com/xmlns/prod/websphere/scdl/wsdl/6.0.0"
displayName="StockQuote" name="StockQuote">
<interfaces>
<interface xsi:type="wsdl:WSDLPortType" portType="ns1:StockQuote">
<method name="getPrice"/>
</interface>
</interfaces>
<esbBinding xsi:type="webservice:WebServiceImportBinding"
endpoint="http://localhost:9080/ExportServiceWeb/sca/Export1"
port="_:Export1_StockQuoteHttpPort"
service="_:Export1_StockQuoteHttpService"/>
</scdl:import>
29
あるインポートのSCDLファイルです。ファイル名は<import_name>.importです。
インポートのSCDLには主に、そのインポートがもつインターフェースの定義とどのようなメカニズムでBind
されているかを記述します。
29
WebSphere Process Server V6
SCA機能・実装
例:エクスポートのSCDL
MyServiceExport.export
<?xml version="1.0" encoding="UTF-8"?>
<scdl:export xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:_="http://TestModule" xmlns:ns1="http://TestModule/Interfaces/IMyService"
xmlns:scdl="http://www.ibm.com/xmlns/prod/websphere/scdl/6.0.0"
xmlns:webservice="http://www.ibm.com/xmlns/prod/websphere/scdl/webservice/6.
0.0" xmlns:wsdl="http://www.ibm.com/xmlns/prod/websphere/scdl/wsdl/6.0.0"
displayName="MyServiceExport" name="MyServiceExport" target="MyService">
<interfaces>
<interface xsi:type="wsdl:WSDLPortType" portType="ns1:IMyService">
<method name="getMessage"/>
</interface>
</interfaces>
<esbBinding xsi:type="webservice:WebServiceExportBinding"
port="_:MyServiceExport_IMyServiceHttpPort"
service="_:MyServiceExport_IMyServiceHttpService"/>
</scdl:export>
30
あるエクスポートのSCDLファイルです。ファイル名は<export_name>.exportです。
エクスポートのSCDLには主に、そのエクスポートがもつインターフェースの定義とどのようなメカニズムで
Bindされているかを記述します。
30
WebSphere Process Server V6
SCA機能・実装
例:スタンドアロンリファレンスのSCDL
sca.references
<?xml version="1.0" encoding="UTF-8"?>
<scdl:references xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:java="http://www.ibm.com/xmlns/prod/websphere/scdl/java/6.0.0"
xmlns:ns1="http://TestModule/Interfaces/IMyService"
xmlns:scdl="http://www.ibm.com/xmlns/prod/websphere/scdl/6.0.0"
xmlns:wsdl="http://www.ibm.com/xmlns/prod/websphere/scdl/wsdl/6.0.0">
<reference name="IMyServicePartner">
<interface xsi:type="wsdl:WSDLPortType" portType="ns1:IMyService">
<method name="getMessage"/>
</interface>
<wire target="MyService"/>
</reference>
<reference name="ISimpleServicePartner">
<interface xsi:type="java:JavaInterface" interface="com.ibm.interfaces.ISimpleService">
<method name="getName"/>
<method name="sendMessage"/>
</interface>
<wire target="SimpleService"/>
</reference>
</scdl:references>
31
スタンドアローン・リファレンスのSCDLです。
ファイル名は sca.referencesです。
スタンドアローン・リファレンスはSCAモジュールの中に一つしか作ることが出来ません。(逆に複数ある必
要がありません)
31
WebSphere Process Server V6
SCA機能・実装
プログラミング・モデル
32
32
WebSphere Process Server V6
SCA機能・実装
SCAのプログラミング・モデル
„
„
SCAは同期呼び出し、非同期呼び出しの両方をサポート
する
Service
同期モデル:要求応答
Client
‹
クライアントがサービスの実行結果を待って、
後続の処理を実行する。
invoke()
要求応答
„
非同期モデル
‹
クライアントがサービスの実行結果を待たずに
後続の処理を実行する。
Service
Client
invokeAsync()
処理
続行
一方向
33
SCAではサービスの呼び出しに関して、同期で呼ぶモデルと非同期に呼ぶモデルの両方が可能です。
同期モデルは要求応答とも言うことができます。クライアントがサービスを呼び出したとき、その処理結果
が返されるまでクライアント側の処理は待っています。
一方、非同期モデルはクライアントがサービスを呼び出したときに、サービスの処理結果が返されるのを
待たずに処理を続行します。
非同期モデルには後述する3つのタイプがあります。
33
WebSphere Process Server V6
SCA機能・実装
同期モデル:要求応答
„
SCAのクライアントプログラムの処理フロー
‹
ServiceManagerを使用したサービスの発見
‹
サービスに定義されているオペレーションの呼び出し
:Client
ServiceManager
:Service
locateService()
invokeOperation()
34
同期モデルはクライアントがサービスを呼び出した際に、サービスの実行が終了し、その戻り値をうけとる
までクライアント側は処理の続行を待つというモデルです。
SCAのサービスコンポーネントを呼び出すクライアントプログラムは、つぎのようなステップでサービスの実
行を行います。
・ServiceManagerによるサービスの発見
com.ibm.websphere.sca.ServiceManagerクラスにあるlocateServiceメソッドを使用してサービスを発見しま
す。locateServiceメソッドではリファレンス名を引数として渡します。戻り値としてサービスを受け取ります
・サービスに定義されているオペレーションの実行
Javaのインターフェースに定義されているメソッド、またはWSDLのポートタイプに定義されているオペレー
ションの実行を行います。
34
WebSphere Process Server V6
SCA機能・実装
同期モデル:要求応答(続き)
„
サービスの呼び出しモデル
‹
動的
Service myService = (Service)serviceManager.locateService("myservice");
DataObject input = ・・・・
myService.invoke("someOperation", input);
‹
タイプセーフ
MyService myService =
(MyService) serviceManager.locateService("myservice");
myService.someMethod("input");
35
クライアントからサービスの呼び出しを行う場合のコード断片です。
JAX-RPCクライアントの静的Stubと動的Proxyとよく似たプログラミングモデルになっています。
・動的な呼び出し
com.ibm.websphere.sca.Serviceインターフェースを使った動的な呼び出しです。
メソッドを実行するときに引数として、commonj.sdo.DataObject型のオブジェクトを渡します。
コンパイル時に型の決定を行わないため、実行時エラーの可能性はあるものの、汎用性が高くなります。
・タイプセーフな呼び出し
サービスの実装クラスの型でサービスを受け取り、メソッドの実行を行います。個々のサービスの具象イン
ターフェースを使用する呼び出しであるため、引数や戻り値の型はJavaのデータ型を使用します。
35
WebSphere Process Server V6
SCA機能・実装
非同期モデル
„
非同期呼び出しの場合の3パターン
‹
‹
‹
一方向
遅延応答
コールバックつき要求
Service
Client
invokeAsync()
処理
続行
Service
Client
invokeAsync()
処理
続行
invokeResponse()
Service
Client
invokeAsync()
処理
続行
onInvokeResponse()
一方向
遅延応答
コールバックつき要求
36
SCAのサービスは非同期で呼び出すことも可能です。非同期の呼び出し方には3つのパターンがありま
す。
36
WebSphere Process Server V6
SCA機能・実装
非同期モデル:Javaインターフェース
„
非同期モデルにおいては以下の4つのインターフェースを
使用する
‹
<interface-name>.java
z
‹
<interface-name>Async.java
z
‹
非同期モデルサービスのコールバックインターフェース
<interface-name>ImplAsync.java
z
„
非同期モデルサービスのJavaインターフェース
<interface-name>Callback.java
z
‹
同期モデルサービスのJavaインターフェース
非同期モデルサービスの実装インターフェース
WIDでは非同期モデル特有のインターフェースは自動生
成される。
37
非同期モデルの呼び出しを行う際には4つのJavaのインターフェースを必要とします。
・<Interface-name>.java
同期モデルで使用したJavaのインターフェースです。
開発環境ではこのインターフェースを基にして、非同期モデル特有のインターフェースを自動生成します。
・<interface-name>Async.java
非同期呼び出しで使用するインターフェースです。
同期モデルのインターフェースに定義されているメソッドのシグニチャーを使用して以下のメソッドを定義
します。
<method_name>Async
<method_name>WithCallback
<method_name>Response
・<interface-name>Callback.java
コールバックつき要求のタイプを使用する際に、コールバックを受け取るサービスコンポーネントが実装す
る必要があるインターフェースです。
37
WebSphere Process Server V6
SCA機能・実装
非同期モデル:一方向
„
„
„
戻り値や例外を受け取らないメソッドの呼び出し。
locateServiceメソッドに渡すリファレンス名は同期モデルと
同じ
使用するインターフェースやメソッドの名前が「xxxAsync」
となる
クライアントのコード断片
MyServiceAsync myService =
(MyServiceAsync)
serviceManager.locateService("myservice");
myService.someMethodAsync("input");
Service
Client
invokeAsync()
処理
続行
一方向
38
「一方向」のモデルは、クライアントはサービスを呼び出し、そのままそれぞれがロジックの実行を行うという
パターンです。したがって、クライアントはサービスからの戻り値や例外などは受け付けません。
クライアントコード断片については、前ページのインターフェースの説明と同期モデルのページのタイプ
セーフの呼び出しを見比べると違いがよくわかります。
1点目の違いは、使用するインターフェースが<Interface-name>Async.java、ここでは、
MyServiceAsync.javaとなっていることです。
2点目の違いは、呼び出すメソッドがsomeMethod()からsomeMethodAsync()と変更されている点です。
38
WebSphere Process Server V6
SCA機能・実装
非同期モデル:遅延応答
„
„
リクエストを出したあとに一定時間をおいて、レスポンスを
問い合わせる。
その際に、相関オブジェクトをレスポンスのメソッドに渡すこ
とによって処理結果を受け取る。
‹
‹
相関オブジェクトとしてcom.ibm.websphere.sca.Ticketが提供される
「xxxResponse」というメソッドに対して、Ticketとタイムアウト時間を指定し
て実行する
クライアントのコード断片
MyServiceAsync myService =
(MyServiceAsync)
serviceManager.locateService("myservice");
Ticket ticket = myService.someMethodAsync("input");
String result = myService.someMethodResponse(ticket,
10000);
Service
Client
invokeAsync()
処理
続行
invokeResponse()
遅延応答
39
「遅延応答」のモデルは、クライアントがリクエストに対する応答を後から問い合わせを行って受け取るとい
うパターンです。
リクエストを実行した際に、後で問い合わせるための相関オブジェクトTicket
(com.ibm.websphere.sca.Ticket)を戻り値として受け取ります。そのTicketとタイムアウト時間を指定して
<method_name>Responseメソッドを実行することで処理結果を受け取ることができます。
39
WebSphere Process Server V6
SCA機能・実装
非同期モデル:コールバックつき要求
„
„
クライアントがリクエストを出したあとにコールバックを受け
取る
コールバックのレシーバーはサービスコンポーネントである
‹
„
<interface_name>Callback インターフェースを実装する
クライアントコードはサービスコンポーネントで実装する
クライアントのコード断片
public void test(String message){
MyServiceAsync myService =
(MyServiceAsync)
serviceManager.locateService("myservice");
Ticket ticket =
myService.someMethodAsyncWithCallback(message);
}
public void onSomeMethodResponse(Ticket ticket,
String __result, Exception __exception){
}
Client
Service
invokeAsyncWithCallback()
処理
続行
onInvokeResponse()
コールバックつき要求
40
「コールバックつき要求」のモデルは、クライアントがリクエストを実行後、コールバックを受け取るパターン
です。
「一方向」や「遅延応答」のタイプと異なり、サービスを呼び出すクライアントはSCAのサービスコンポーネ
ントに限定されます。クライアントがコールバックを受け取るためです。
したがって、J2EEのアプリケーションからクライアントとなるサービスコンポーネントを呼び出し、そのクライ
アントがサービスの呼び出しとコールバックの受け取りをするという動作をします。
サービスを呼び出す際にクライアントは、<method_name>AsyncWithCallbackというメソッドを使用してサー
ビスを呼び出します。
コールバックを受け取った際に実行されるロジックはon<method_name>Responseメソッドに記述します。
40
WebSphere Process Server V6
SCA機能・実装
非同期モデル:動的呼び出し
„
„
„
„
非同期モデルで動的な呼び出しを行う場合
invokeAsync(“method_name”, input)
invokeAsyncWithCallback(“method_name”, input)
invokeResponse(Ticket, timeout)
遅延応答パターンを動的に呼び出す場合
Service myService =
(Service) serviceManager.locateService("myservice");
Ticket ticket = myService.invokeAsync(“someMethod”, "input");
Object result = myService.invokeResponse(ticket, 10000);
41
非同期モデルで動的な呼び出しを行う方法を説明します。
タイプセーフな呼び出しでは、「xxxAsync」といったメソッドを呼び出すことで非同期な呼び出しを可能に
していましたが、動的な呼び出しでも「invokeAsync」というメソッドを使うことになります。
遅延応答の処理結果を受け取る場合やコールバック付き要求も同様に、invokeAsyncWithCallBack、
invokeResponseといったメソッドを使用します。
ここで注意しなくてはいけないのは、実行するメソッド名を引数として渡すところにはAsyncはつける必要が
ない、ということです。
41
WebSphere Process Server V6
SCA機能・実装
SCA Interaction
インター
フェースの種
類
呼び出し方法
同期
メソッド呼び出し
非同期
要求応答
一方向
遅延応答
Callbackつ
き要求
動的
タイプセーフ
WSDL ポー
トタイプ
同一SCAモジュール
内:参照渡し
別のモジュール:値
渡し
値渡し
値渡し
値渡し
可
不可
Java イン
ターフェース
同一SCAモジュール
内:参照渡し
別のモジュール:値
渡し
値渡し
値渡し
値渡し
可
可
42
SCAのコンポーネントをインターフェースの種類の観点で見た場合、引数や戻り値をどのように受け取るか、
またメソッドの呼び出しがどのようになるのかをまとめた表です。
同期呼び出しの場合に、同一のSCAモジュール内の場合であれば参照渡しになります。非同期呼び出し
の場合はその種類を問わず値渡しとなります。
メソッドの呼び出しはインターフェースがJavaの場合にはダイナミックな呼び出しもタイプセーフな呼び出し
も可能ですが、WSDLのポートタイプを使用する場合には、ダイナミックな呼び出しに限定されます。
42
WebSphere Process Server V6
SCA機能・実装
各種API
„
„
SCAで使用するAPIはcom.ibm.websphere.scaパッケー
ジに含まれる
Service
‹
„
ServiceManager
‹
„
動的なサービスコンポーネントの呼び出しで使用するInterface
サービスコンポーネントを取得するためのAPI
Ticket
‹
非同期呼び出しで使用される相関オブジェクト
43
SCAでアプリケーションを開発する際、SCAランタイムが提供するいくつかのAPIを使用する必要がありま
す。詳細は下記のInfocenterのリンクにあるAPIドキュメント、および説明のページを参照ください。
APIDoc
http://publib.boulder.ibm.com/infocenter/dmndhelp/v6rxmx/topic/com.ibm.wsps.javadoc.doc/doc/com
/ibm/websphere/sca/package-summary.html
APIの使い方
http://publib.boulder.ibm.com/infocenter/dmndhelp/v6rxmx/topic/com.ibm.wsps.ref.doc/doc/gref_apis.
html
43
WebSphere Process Server V6
SCA機能・実装
インポート/エクスポートのメカニズム
44
44
WebSphere Process Server V6
SCA機能・実装
復習:インポートとエクスポート
Web
サービス
サービス
コンポーネント
Stateless
Session Bean
JMS
Web
Service
Service
Component
JMS
45
先にも説明したように、SCAモジュールの外にあるサービスを呼び出す場合には、「インポート」というメカ
ニズムを使用します。また逆にサービスコンポーネントをSCAモジュールの外のサービスから呼び出すこと
ができるようにするために「エクスポート」というメカニズムを使用します。
ここからは、インポートとエクスポートが実際にはどのようなメカニズムによって実現されているのか、また各
種のバインディング方式を使用するために必要な設定項目、自動で設定される項目について説明してい
きます。
45
WebSphere Process Server V6
SCA機能・実装
エクスポート:Webサービス(SOAP/HTTP)
„
„
Webサービスバインディングで、プロトコルにSOAP/HTTP
を選んだ場合
次の2つのファイルが作成される
‹
‹
„
<export_name>.export
<export_name>_<interface_name>Http_Service.wsdl
このWSDLには、Binding情報が記述されている。
http://localhost:9080/<module_name>web/sca/<export_name>
次の2つの設定が自動で行われる
‹
web.xmlへのWeb Service Router Servletの登録
名前: <export_name>_<interface>HttpPort
z URL Pattern: sca/<export_name>
z
‹
セッションビーンの登録
名前: export.<export_name>
z JNDI名: sca/<module_name>/export/<export_name>
z 環境変数: sca/exportName
値: <export_name>
z
46
エクスポートでバインディングをWebサービス、プロトコルをSOAP/HTTPにした場合について説明します。
バインディングを作成した際に二つのファイルが生成されます。
一つが、エクスポートのSCDLである<export_name>.exportファイル。もう一つがBindingとServiceの情報を
含むWSDLファイルです。インターフェースとなるWSDLファイルがTypeやMessage、PortTypeの定義をも
ち、それ以外の情報をこのバインディング生成時に別のWSDLファイルに記述します。
なお、ここで作られるWSDLファイルはインターフェースのWSDLをインポートしています。
それとは別にweb.xmlに対してWeb Service のRouter Servletの登録が自動で行われます。
また、EJBプロジェクトには、Session Beanが登録されます。
46
WebSphere Process Server V6
SCA機能・実装
エクスポート:Webサービス(SOAP/JMS)
„
„
Webサービスバインディングで、プロトコルにSOAP/HTTP
を選んだ場合
次の2つのファイルが作成される
‹
‹
„
<export_name>.export
<export_name>_<interface_name>Jms_Service.wsdl
このWSDLには、Binding情報が記述されている。
次の2つの設定が自動で行われる
‹
セッションビーンの登録
z
‹
SOAP/HTTPの場合と同様なSession Bean
JMS Router MDBの登録
名前: WebServiceJMSRouter_<export_name>_<interface>JmsPort
ActivationSpec: jms/<export_name>AS
z ResourceEnvRef: jms/WebServicesReplyQCF
z WPSサーバー上にActivationSpec、Queue、QCFを自動で登録する
z
z
47
バインディングでWebサービスを選び、プロトコルでSOAP/JMSを選んだ場合について説明します。
基本的にはSOAP/HTTPのときと同じようなファイル生成と設定が自動でされます。
エクスポートのSCDLとBindingとServiceを記述したWSDLが作成されます。
SOAP/JMSの場合、ロケーションの記述がHTTPのかたちではなく、JMSのかたちで記述されます。
jms:/queue?destination=jms/<export_name>&connectionFactory=jms/<export_name>QCF&targetService
=<export_name>_<interface>JmsPort
また、Web Service Router Servletかわりに、EJBプロジェクトにJMS Router MDBが登録されます。その
MDBが使用する、QueueやQCF、ActivationSpecなどは自動でサーバー上に設定されます。
47
WebSphere Process Server V6
SCA機能・実装
エクスポート:SCA
„
„
„
„
SCAバインディングを選んだ場合
<export_name>.exportが作成される
セッションビーンが自動で登録される
SCAバインディングでエクスポートを行った場合、それ以外
に特に生成されたり登録されたりするものはない。
48
エクスポートのバインディングをSCAにした場合について説明します。
SCAバインディングの場合、エクスポートのSCDLとセッションビーンの登録がされますが、特に固有のファ
イルなどは作成されません。
SCAバインディングでインポートされることで呼び出されるため、バインディング情報などを生成する必要
がないためです。
48
WebSphere Process Server V6
SCA機能・実装
エクスポート:JMS
„
„
„
JMSバインディングを選んだ場合
SOAP/JMSの場合と違い、使用するQueue、QCF、
ActivationSpecなどはユーザーがサーバーに登録する必
要がある。
自動的にコネクター・プロジェクトにリソースアダプターが追
加される
‹
‹
„
„
<export_name>.exportが作成される
MDBが自動で登録される
‹
‹
„
アダプター経由のJMSプロバイダーへのアクセスを行う
websphere_default_messaging_provider
名前: export.<export_name>EIS
ActivationSpec: サーバーに登録したものを使用
リソース・リファレンスが自動で生成される
49
エクスポートでJMSバインディングを行った場合について説明します。
JMSバインディングを使用する際に注意しなくてはいけないのは、使用するQueueやQCF、ActivationSpec
などはあらかじめサーバー上に定義しておく必要がある、ということです。
JMSバインディングを作成した場合にサーバー上に自動で作られるというものではなく、逆にユーザーが
作成しているJMSリソースをバインディング情報に入力する必要があります。
なお、JMSリソースへのアクセスはアダプター経由で行われます。そのため、設定項目などはEISアダプ
ターを使用した場合と同様になります。また、websphere_default_messaging_providerというJMS用のリソース
アダプターがコネクター・プロジェクトとしてWID上に自動でインポートされます。
エクスポートのSCDLが作成される以外には次のようなものが自動で生成されます。
EJBプロジェクトにMDBが登録されます。名前は export.<export_name>EIS というネーミングルールです。
ActivationSpecについては、ユーザーがサーバー上に定義したものを入力する必要があります。プロパ
ティ・ビューの「Binding」から「JMSExportBinding」の「Connection」にActivationSpecのJNDI名を入力すると、
EJBのデプロイメント・ディスクリプターに入力されます。
またいくつかのリソース参照がModuleという、SCAコンポーネントがあらかじめもっているEJBに対して自動
で生成されます。この参照は送受信のための宛先になります。上記のActivationSpecと同じようにプロパ
ティ・ビューからJNDI名を指定します。
sca/resource/export/<export_name>_CF
ResponseConnectionの値
sca/resource/export/<export_name>_RECEIVE_D
sca/resource/export/<export_name>_SEND_D
ReceiveDestinationPropertyの値
SendDestinationPropertyの値
sca/resource/export/<export_name>_CALLBACK_D
CallBackDestinationの値
49
WebSphere Process Server V6
SCA機能・実装
インポート:Webサービス
„
Webサービスバインディングを選んだ場合
‹
„
WSDLを入手する必要がある。
‹
‹
„
エクスポートしているサービス・モジュールからコピーしてくるなどで入手
Interface記述のWSDLとBinding記述のWSDLの両方が必要
Binding情報にはBindingとServiceの情報をもったWSDL
ファイルを選択する。
‹
„
手順はSOAP/HTTPでもSOAP/JMSでも変わらない。
<import_name>.importが作成される。
インポートするとModule EJBに対してサービスリファレン
スが生成される
‹
名前: sca/import/<import_name>
50
インポートのバインディングをWebサービスで行う場合についてです。
プロトコルがSOAP/HTTPの場合も、SOAP/JMSの場合も設定方法は変わりません。
前提条件として、BindingとServiceの記述のあるWSDLを入手することが必要です。SCAのエクスポートで
生成されたWSDLを使用する場合は、Interface記述のWSDLとBinding記述のWSDLの両方をコピーしてく
る必要があります。
バインディングの作成は、GUIのウィザードでBinding記述のWSDLを選択することで終了です。
50
WebSphere Process Server V6
SCA機能・実装
インポート:SCA
„
„
„
SCAバインディングを選んだ場合
バインディング対象となるSCAモジュールのエクスポートは
ワークスペース上で解決できなくてはいけない。
自動で候補となるSCAバインディングのエクスポートを検
索する。
‹
„
<import_name>.importが作成される。
SCAバインディングでインポートを行うと、EJB参照が作成
される。
‹
‹
名前: sca/import/<import_name>
WebSphere Binding: sca/<export_module>/export/<export_name>
51
インポートのSCAバインディングを行う場合について説明します。
バインディング対象となるSCAバインディングのエクスポートが同じワークスペース上になくてはいけません。
逆に候補となるエクスポートをWIDが自動検出で見つけてくれますので、適切なものを選択するだけでバ
インディングは完成します。
なお、SCAバインディングは内部的な通信はEJBのリモートコールを使用するため、EJB参照が作成されま
す。
51
WebSphere Process Server V6
SCA機能・実装
インポート:JMS
„
„
„
„
JMSバインディングを選んだ場合
エクスポートの時と同様に使用するQueue、QCF、
ActivationSpecなどは作成する必要がある。
<import_name>.importが作成される
MDBが自動的に登録される
‹
‹
„
名前: _import.<import_name>EIS
ActivationSpec: サーバーに登録したものを使用
送り先宛先や受け取り宛先などをエクスポートのコンポー
ネントと合わせることで、双方向のメッセージ送受信が可能
になる。
52
インポートでJMSバインディングを使用する場合について説明します。
JMSバインディングではエクスポートでも説明したとおり、使用するJMSリソースはあらかじめサーバー上で
定義しておく必要があります。
JMSの宛先をJNDI名で指定することによって、バインディングが完成します。
インポートの場合にも自動的にMDBが作成されます。
52
WebSphere Process Server V6
SCA機能・実装
インポート:ステートレス・セッションビーン
„
„
ステートレス・セッションビーンを選択した場合
インポートしたいセッションビーンのEJBクライアントJARを
入手する必要がある。
‹
„
„
プロジェクトのDependencyに追加する。
インポートにつけるインターフェースはリモートインター
フェースを選択する
自動的にバインディング情報として、ホームインターフェー
スのJNDI名が入力される
53
ステートレス・セッションビーンをインポートすることができます。SCAのインポートを使用すると、EJBのクラ
イアントコードを非常に簡単に記述することが出来ます。
セッションビーンをインポートするためには、SCAモジュールのDependencyに対して、EJBのクライアント
JARを加える必要があります。
インポートのインターフェースには、EJBのリモートインターフェースを指定します。
すると、バインディング情報にそのEJBのホームインターフェースのJNDI名が自動的に入力されます。
あとはSCAコンポーネントの呼び出しと同じクライアントコードでセッションビーンを呼び出すことが可能に
なります。
53
WebSphere Process Server V6
SCA機能・実装
Quality of Service(QoS)
54
54
WebSphere Process Server V6
SCA機能・実装
Quality of Service
„
„
„
修飾子によってSCAランタイムが必要とするサービスの品
質を定義することができる。
コーディングせずに実現できるため、実装コードなどの変
更が不要。
設定可能な項目
‹
‹
‹
„
トランザクション
非同期呼び出しの信頼性
セキュリティ
設定箇所
‹
‹
‹
インプリメンテーション
インターフェース
リファレンス
55
トランザクション制御やセキュリティなどのサービスの品質に関わる設定項目は実装コードではなく、修飾
子として設定します。J2EEでディプロイメント・ディスクリプターに設定する項目と同じようなものを同じような
方法で設定することになります。
55
WebSphere Process Server V6
SCA機能・実装
QoS:設定場所と設定項目
„
QoSを設定可能な場所と設定項目
インターフェース
インターフェース
・Join
・Jointransaction
transaction
・Join
・Joinactivity
activitysession
session
・Security
・Securitypermission
permission
サービス
コンポーネント
リファレンス
リファレンス
・Suspend
・Suspendtransaction
transaction
・Suspend
・Suspendactivity
activitysession
session
・Asynchronous
・Asynchronousreliability
reliability
・Asynchronous
・Asynchronousinvocation
invocation
インプリメンテーション
インプリメンテーション
・Transaction
・Transaction
・Activity
・Activitysession
session
・Security
・Securityidentity
identity
56
QoSの設定を行うことができる箇所は次の3つです。
-サービスコンポーネントのインプリメンテーション
-インターフェース(サービスコンポーネント、インポートがもつ)
-リファレンス(サービスコンポーネント、スタンドアローンリファレンスがもつ)
以下のページで各設定項目について詳細にご説明します。
56
WebSphere Process Server V6
SCA機能・実装
QoS:インプリメンテーション
„
„
トランザクション制御とセキュリティに関する設定が可能
Transaction
‹
„
Global、Local(デフォルト値)、Any
Activity Session
‹
True、False、Any(デフォルト値)
„
Security identity
„
Transactionについては、後述するインターフェースに対す
るJoin transactionの設定との協調関係に注意が必要
57
○Transaction・・・デフォルト値はLocalです。
-Global:この値が設定されたインプリメンテーションはグローバルトランザクションの中で実行されます。
トランザクションが実行されていない場合には、新しいトランザクションを開始します。
-Local:この値が設定されたインプリメンテーションはグローバルトランザクションの中では実行されませ
ん。この場合ローカルトランザクションバウンダリーの設定を追加で行う必要があります。設定は以下の2
つです。
・Method:デフォルト値です。リソースマネージャーローカルトランザクションがメソッドを境界として
解決されます。
・Activity session:リソースマネージャートランザクションがActivity sessionの完了によって解決され
ます。
-Any:呼び出し元からトランザクションコンテキストが伝播されてきた場合、トランザクションの中で実行
されます。伝播されてこない場合は、ローカルトランザクションで実行されます。
○Activity session・・・デフォルト値はAnyです。
-True:コンポーネントの実行に必ずActivity Sessionを必要とします。存在しない場合は新しいActivity
Sessionを作成します。
-False:コンポーネントはActivity Sessionのもとでは実行されません。グローバルトランザクション、また
はメソッドを境界としたローカルトランザクションのもとで実行されます。
-Any:クライアントからActivity Sessionが伝播されてきた場合は、そのActivity Sessionのもとで実行さ
れます。そうでない場合は、Activity Sessionのもとでは稼動しません。
○Security identity
Security identityは論理名をユーザー識別情報として使用してアクセス権を指定します。もし論理名を指
定していない場合は、このコンポーネントを呼び出したクライアントのユーザー識別情報のもとで実行され
ます。さらに呼び出したクライアントのユーザー識別情報がない場合は、コンテナーのユーザー識別情報
のもとで実行されます。ロールはユーザー識別情報に関連付けられており、そしてそのロールが認可され
た場合、ほかのコンポーネントを呼び出すことができます。
57
WebSphere Process Server V6
SCA機能・実装
QoS:インターフェース
„
„
トランザクション制御とセキュリティに関する設定が可能
Join transaction
‹
„
True、False(デフォルト値)
Join activity session
‹
True、False(デフォルト値)
„
Security permission
„
Join transactionについては、インプリメンテーションに対す
るTransactionの設定との協調関係に注意が必要
58
○Join transaction・・・デフォルト値はFalseです。インプリメンテーションとの相関関係については後述しま
す。
-True:クライアントから伝播されてきたトランザクションに参加します。なお、非同期呼び出しのコン
ポーネントのインターフェースにはデッドロックを回避するために、Trueを設定すべきではありません。
-False:クライアントから伝播されてきたトランザクションに参加しません。
○Join activity session・・・デフォルト値はFalseです。
-True:クライアントから伝播されてきたActivity sessionに参加します。なお、非同期呼び出しのコン
ポーネントのインターフェースにはTrueを設定すべきではありません。
-False:クライアントから伝播されてきたActivity sessionに参加しません。
○Security permission
パーミッションを表すロールを指定するために使用します。このロールをもとにユーザーがインターフェー
スやオペレーションを呼び出すことができるかどうかが決定します。設定していない場合にはパーミッショ
ンのチェックが行われません。
58
WebSphere Process Server V6
SCA機能・実装
QoS:インターフェース(続き)
„
インターフェースに設定可能な修飾子は次の3つのスコー
プで設定
‹
‹
‹
„
コンポーネント(インポートを含む)がもつすべてのインターフェース
(interfaces)
個々のインターフェース(interface)
インターフェースに定義されている個々のオペレーション(operation)
同一の修飾子については範囲の広いものの設定が優先
interfaces > interface > operation
サービス
コンポーネント
Interfaces
Interface_A
operation_A1
operation_A2
Interface_B
59
インターフェースに設定可能な修飾子のスコープは以下の3つがあります。
-コンポーネントがもつすべてのインターフェース(interfaces)
-コンポーネントが持つ個々のインターフェース(interface)
-インターフェースに定義されている個々のオペレーション(operation)
上記の図は、この3つのスコープの具体例です。
サービス・コンポーネントは複数のインターフェースをもつことが可能です。そのため、サービス・コンポー
ネントが持つすべてのインターフェースをあらわす単位として、「interfaces」があります。
その「interfaces」に個々のインターフェースが定義されています。この図では、Interface_AとInterface_Bと
いう2つのインターフェースを定義しています。その一つ一つが「interface」という単位になります。
また、それぞれのInterfaceは複数のメソッドを定義することが可能です。この図では、Interface_Aについて、
operation_A1とoperation_A2が定義されています。その一つ一つが「operation」という単位になります。
修飾子の設定に関しては、interfacesに設定した項目はinterfaceに受け継がれ、interfaceに設定した項目
はoperationに受け継がれるという関係があります。
例えばinterfacesに対してJoin transaction = Trueを設定します。このとき、そのコンポーネントがもつすべ
てのインターフェースとオペレーションに対して Join transaction = Trueが設定され、個別のインター
フェースやオペレーションごとにJoin transactionの修飾子の設定を行うことができなくなります。しかし、
Join transaction以外の修飾子については別途設定可能です。
59
WebSphere Process Server V6
SCA機能・実装
QoS:リファレンス
„
„
トランザクション制御と非同期呼び出しに関する設定が可
能
Suspend transaction
‹
„
Suspend activity session
‹
„
True、False(デフォルト値)
Asynchronous reliability
‹
‹
‹
„
True、False(デフォルト値)
Reliability
Request expiration
Response expiration
Asynchronous invocation
‹
Commit、Call(デフォルト値)
60
○Suspend transaction・・・デフォルト値はFalseです。この修飾子は非同期呼び出しの場合やローカルトラ
ンザクションの一部としての呼び出しの場合には無視されます。またこの修飾子が呼び出し先のトランザク
ションに影響は与えません。呼び出し先のトランザクション制御は呼び出し先の環境が責任をもちます。
-False:同期呼び出しがクライアントのグローバルトランザクションの中で行われます。
-True:同期呼び出しがクライアントのグローバルトランザクションの外で行われます。呼び出し先のトラ
ンザクションは新規のグローバルトランザクションかローカルトランザクションとなります。
○Suspend activity session・・・デフォルト値はFalseです。この修飾子は非同期呼び出しの場合やActivity
sessionがない場合には無視されます。またこの修飾子が呼び出し先のActivity sessionに影響は与えませ
ん。呼び出し先のActivity session制御は呼び出し先の環境が責任をもちます。
-False:呼び出し先コンポーネントのメソッドはクライアントのActivity sessionに参加します。
-True:呼び出し先のコンポーネントのメソッドはクライアントのActivity sessionには参加しません。
○Asynchronous reliability
-Reliability:Assured、Best effortの2つから選びます。クライアントアプリケーションがメッセージ消失を
許さない場合、Assuredを選択します。逆にメッセージを消失してもかまわない場合はBest effortを選択で
きます。一般的にパフォーマンスをあげる場合には、メッセージの信頼性は下がります。
-Request expiration:メッセージが届かない場合にリクエストを破棄するまでの時間をミリ秒で指定しま
す。リクエストが発行されたときから時間のカウントが始まります。0(ゼロ)は無限を意味します。
-Response expiration:実行環境が非同期の応答メッセージを保持しなくてはいけない時間、または
コールバックを提供しなくてはいけない時間をミリ秒で指定します。リクエストが発行されたときから時間の
カウントが始まります。 0(ゼロ)は無限を意味します。
○Asynchronous invocation・・・デフォルト値はCallです。
-Commit:このリファレンスを使用した非同期呼び出しは現行のグローバルトランザクションに参加して
行われます。また、呼び出しを行うクライアントのインプリメンテーションにTransactionの修飾子がlocalで設
定されている場合には、ローカルトランザクションの延長で呼び出されます。
-Call:このリファレンスを使用した非同期呼び出しはクライアントから伝播されてきたトランザクションを
中断して行われます。
60
WebSphere Process Server V6
SCA機能・実装
QoS:リファレンス(続き)
„
リファレンスに設定可能な修飾子は次の2つのスコープで
設定
‹
‹
„
コンポーネント(スタンドアローンリファレンスを含む)がもつすべてのリファ
レンス(references)
個々のリファレンス(reference)
同一の修飾子についてはreferencesの設定項目が個々の
referenceの設定項目を上書きする。
サービス
コンポーネント
References
Reference_A
Reference_B
61
リファレンスに設定可能な修飾子のスコープは以下の2つです。
-コンポーネントがもつすべてのリファレンス(references)
-個々のリファレンス(reference)
上記の図は、この2つのスコープの具体例です。
サービス・コンポーネントは複数のリファレンスをもつことが可能です。そのため、サービス・コンポーネント
が持つすべてのリファレンスをあらわす単位として、「references」があります。
その「references」に個々のリファレンスが定義されています。この図では、reference_Aとreference_Bという2
つのリファレンスを定義しています。その一つ一つが「reference」という単位になります。
修飾子の設定に関しては、 referencesに対する設定がreferenceに受け継がれます。
61
WebSphere Process Server V6
SCA機能・実装
QoS:トランザクション修飾子の協調関係(1/2)
„
インプリメンテーションとインターフェースに設定する
TransactionおよびJoin transactionには協調関係があり
ます。
インターフェースの修飾子:
Join Transaction
インプリメンテーションの修飾
子:Transactionの値
指定したコンポーネントの動作
True
Global
呼び出し元のトランザクション
の中で動作する。存在しない
場合は新規のトランザクション
を作成する
True
Local
エラー(設定として正しくありま
せん)
True
Any
呼び出し元のトランザクション
の中で動作する。存在しない
場合はローカルトランザクショ
ンで実行される
62
インプリメンテーションの修飾子であるTransactionとインターフェースの修飾子のJoin transactionの組み
合わせで、どのような動作をするかについてこのページと次のページでまとめます。
インターフェースの修飾子のJoin transactionをTrueにした場合、インプリメンテーションの修飾子を変える
とどのような挙動になるかをこのページで説明しています。
Globalにした場合、このコンポーネントを呼び出したクライアントからグローバルトランザクションが伝播され
てくれば、そのトランザクションの中で動作します。グローバルトランザクションがなければ、新規にトランザ
クションを作成します。したがって、EJBのトランザクション属性でいうところの requiredにあたる動作になり
ます。
Localにした場合は、設定上のエラーとなります。
Anyにした場合、このコンポーネントを呼び出したクライアントからグローバルトランザクションが伝播されて
くれば、そのトランザクションの中で動作します。グローバルトランザクションがなければローカルトランザク
ションで実行されます。したがってEJBのトランザクション属性でいうところの supportsにあたる動作になりま
す。
62
WebSphere Process Server V6
SCA機能・実装
QoS:トランザクション修飾子の協調関係(2/2)
インターフェースの修飾子:
Join Transaction
インプリメンテーションの修飾
子:Transactionの値
指定したコンポーネントの動
作
False
Global
新規のグローバルトランザク
ションの中でコンポーネントは
実行される
False
Local
ローカルトランザクションの中
でコンポーネントは実行され
る
False
Any
ローカルトランザクションの中
でコンポーネントは実行され
る
63
インターフェースの修飾子のJoin transactionをFalseにした場合、インプリメンテーションの修飾子を変える
とどのような挙動になるかをこのページで説明しています。
Globalにした場合、新規のグローバルトランザクションの中でコンポーネントが実行されることになります。
Localにした場合、ローカルトランザクションの中でコンポーネントが実行されます。
Anyにした場合、ローカルトランザクションの中でコンポーネントが実行されます。
63
WebSphere Process Server V6
SCA機能・実装
まとめ
„
„
„
„
„
SCAはサービス指向のコンポーネント・モデル。
様々な既存技術で実装されているアプリケーションに対し
て単一の呼び出し方法を提供する。
呼び出しの定義情報はSCDLというXMLの定義ファイルに
記述する。
アプリケーションの呼び出し方法は同期呼び出し、非同期
呼び出しの両方をサポートする。
実行時のサービスの品質については、修飾子としてSCDL
に記述することができる。
64
64
Fly UP