サービス・コンポーネント・ アーキテクチャー(SCA)機能、実装 WebSphere Process Server V6 SCA機能・実装
by user
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