WebSphere Enterprise Service Bus for z/OS バージョン 6.2.0 オペレーティング・システム: z/OS


EJB バインディング: 全体像

EJB インポート・バインディングによって、Service Component Architecture (SCA) モジュールは、モジュール外部の EJB 実装を呼び出すことができます。

EJB インポート・バインディング

EJB インポート・バインディングでは、コンシュームする側のモジュールとインポート・コンポーネントとをバインドする方法を指定することによって、SCA モジュールが EJB 実装を呼び出すことができます。例えば、次のようにします。
  • SCA コンポーネント -> EJB 2.1 import == RMI/IIOP ==> EJB 2.1

外部 EJB 実装 (モジュール外部の EJB 実装) からサービスをインポートすることによって、ユーザーはビジネス・ロジックを WebSphere® Process Server 環境に接続でき、ビジネス・プロセスに参加することができます。EJB インポート・バインディングでは、以下の 2 つの使用シナリオがサポートされています。

EJB インポートに含まれる主なコンポーネントを以下に示します。JAXWSDataHandler、 EJBFaultSelector、および EJBImportFunctionSelector は WebSphere Process Server によって提供されます。
表 1. EJB インポート・バインディングの主なコンポーネント
コンポーネント 目的
EJB 実装 ビジネス・インターフェースを実装する EJB
JNDI 名 EJB 参照を指定します
JAX-WS データ・ハンドラー Java™ オブジェクトをビジネス・オブジェクト (片方向) に、または応答データをビジネス・オブジェクト (両方向) に変化させるためにサーバーに必要なデータ変換を実行します。このデータ・ハンドラーは、JAX-WS および JAXB の仕様を使用して、SCA から Java へのデータをマップします。
注: JAX-WS 仕様で定義された XSD タイプから Java タイプへのマッピングをカスタマイズするには、ビジネス・ニーズに合うように JAXB アノテーションを変更します。JAXWSDataHandler は xs:any、xs:anyType、および xs:anySimpleType をサポートします。現行のサポートは JAX-WS 1.0 仕様および JAXB 2.0 仕様に制限されています。
EJB 障害セレクター EJB 呼び出しの結果が、障害、ランタイム例外、または正常な応答のいずれかを判別します。障害が検出された場合、障害セレクターがネイティブの障害名をサーバーに返すため、JAXWSDataHandler が例外オブジェクトを障害ビジネス・オブジェクトに変換することができます。
EJB インポート関数セレクター EJB インポート上の SCA コンポーネントによって呼び出された WSDL メソッド名に基づき、EJB メソッド・タイプを導き出します。@WebMethod アノテーションが存在する場合はこれを使用して、WSDL メソッドのための正しい Java メソッド・マッピングを判別します。@WebMethod アノテーションがない場合、関数セレクターは WSDL メソッド名と同じ名前の Java メソッドを返します。

ユーザーのシナリオで JAX-WS がサポートされず、ある程度のカスタム・マッピングが必要な場合、サポートがある場合に JAXWSDataHandler、EJBFaultSelector、および EJBImportFunctionSelector によって実行されるタスクを実行するために、カスタムのデータ・ハンドラー、関数セレクター、および障害セレクターが必要になることがあります。 これにはカスタム・マッピング・アルゴリズムによって通常実行されるマッピングが含まれます。

データ・ハンドラー規約

データ変換が必要な状況において、EJB バインディングとデータ・ハンドラーの間の規約は Java Object 配列 (Object[]) を使用して実行されます。

アウトバウンド通信中は、以下のステップが実行されます。
  1. EJB バインディングは、WSDL で指定された内容と一致するように、期待されるタイプ、期待されるエレメント、およびターゲット・メソッド名を BindingContext に設定します。
  2. EJB バインディングが、データ変換の必要なデータ・オブジェクトのための変換メソッドを呼び出します。
  3. データ・ハンドラーは、(メソッド内部での定義の順で) メソッドのパラメーターを表す Object[] を返します。
  4. EJB バインディングは Object[] を使用して、ターゲット EJB インターフェース上のメソッドを呼び出します。

バインディングは EJB 呼び出しからの応答を処理するために Object[] を作成します。Object[] の最初のエレメントは、Java メソッド呼び出しからの戻り値です。その後の値はメソッドの入力パラメーターを表します。これは In/Out タイプおよび Out タイプのパラメーターをサポートするために必要です。 Out タイプのパラメーターの場合、値は応答データ・オブジェクト内で返される必要があります。データ・ハンドラーは Object[] 内で検出した値を処理および変換して、データ・オブジェクトに応答を返します。

EJB バインディング・レベルで指定されたデータ・ハンドラーは、要求、応答、障害、およびランタイム例外を処理するために使用されます。 障害については、faultBindingType 構成プロパティーを指定することによって、障害ごとに特定のデータ・ハンドラーを指定できます。 この設定は、EJB バインディング・レベルで指定された値をオーバーライドします。

JAX-WS データ・ハンドラー

EJB バインディングに WSDL インターフェースがある場合、デフォルトで JAX-WS データ・ハンドラーが使用されます。 このデータ・ハンドラーは JAX-WS (Java API for XML-based WebService) 仕様に準拠しており、WSDL メソッド呼び出しをインポート用の Java メソッド呼び出し (アウトバウンド処理) に変換するために使用します。 またこれは、障害セレクターが ResponseType.RUNTIME の例外を返したときに障害を処理することを目的とした、Java 例外から障害データ・オブジェクトおよびランタイム例外への変換も処理します。このデータ・ハンドラーは、JAX-WS 呼び出しを表す SOAP メッセージからデータ・オブジェクトへの変換には使用できません。

データ・ハンドラーは xs:AnyType、xs:AnySimpleType、および xs:Any のほか、他の XSD データ型もサポートします。xs:Any へのサポートを使用可能にするには、Java コードの bean プロパティーで @XmlAnyElement (lax=true) を使用します。以下に例を示します。
public class TestType {
	private Object[] object;

	@XmlAnyElement (lax=true)
	public Object[] getObject() {
		return object;
	)

	public void setObject (Object[] object) {
		this.object=object;
	)
)
これによって、TestType のプロパティー・オブジェクトが xs:any フィールドになります。xs:any フィールド内で使用される Java クラスの値は、@XmlAnyElement アノテーションを持つ必要があります。 例えば Address がオブジェクト配列の設定に使用される Java クラスである場合、Address クラスはアノテーション @XmlRootElement を持つ必要があります。
JAX-WS データ・ハンドラーには以下の制約が適用されます。
  • ヘッダー属性の @WebParam アノテーションをサポートしない。
  • ビジネス・オブジェクト・スキーマ・ファイル (XSD ファイル) の名前空間には、Java パッケージ名からのデフォルト・マッピングが含まれない。package-info.java のアノテーション @XMLSchema も機能しません。名前空間で XSD を作成するための方法は、@XmlType および XmlRootElement アノテーションを使用する方法だけです。@XmlRootElement は Java bean タイプのグローバル・エレメントのターゲット名前空間を定義します。
  • EJB インポート・ウィザードは、関連しないクラスについては XSD ファイルを作成しません。 バージョン 2.0 では @XmlSeeAlso アノテーションがサポートされないため、子クラスが親クラスから直接参照されない場合、XSD は作成されません。この問題の解決方法は、そのような子クラスのために SchemaGen を実行することです。SchemaGen は、所定の Java Bean の XSD ファイルを作成するために提供されたコマンド行ユーティリティーです。 これは WPS_Install_Home/bin ディレクトリーにあります。この解決方法を実現させるためには、これらの XSD をビジネス・インテグレーション・モジュールに手動でコピーする必要があります。

障害ハンドラー規約

EJB バインディングと障害ハンドラーの間の規約は、Java オブジェクト配列 (Object[]) を使用して実行します。

インポートが正常な場合、バインディングは Object[] を組み立てます。Object[] の最初のエレメントは、Java メソッド呼び出しからの戻り値です。その後の値はメソッドの入力パラメーターを表します。これは In/Out タイプおよび Out タイプのパラメーターをサポートするために必要です。

例外シナリオの場合、バインディングは Object[] を組み立て、最初のエレメントはメソッドによって throw された例外を表します。障害セレクターは以下のどの値でも返すことができます。
表 2. 障害ハンドラーの戻り値
タイプ 戻り値
障害 ResponseType.FAULT
ランタイム例外 ResponseType.RUNTIME
通常応答 ResponseType.RESPONSE
障害セレクターが ResponseType.FAULT の値を返す場合、getFaultName() はネイティブの障害名を返します。このネイティブの障害名は、対応する WSDL 障害名をモデルから判別し、正しい障害データ・ハンドラーを呼び出すためにバインディングによって使用されます。

EJB 障害セレクター

この障害セレクターは、EJB インポート・バインディングとの障害セレクター規約に従います。渡された Object[] に例外オブジェクトが含まれる場合、これは ResponseType.BUSINESSFAULT を返します。例外オブジェクトが、メソッド上で宣言されたどの例外タイプとも一致しない場合、ResponseType.RUNTIME_EXCEPTION を返します。それ以外の場合、ResponseType.RESPONSE を返します。

インポート関数セレクター規約

EJB バインディングとインポート関数セレクターの間の規約は、JAVA オブジェクト配列 (Object[]) を使用して実行します。

Object[] の最初のエレメントは、WSDL の名前です。Object[] の 2 番目のエレメントは入力ビジネス・オブジェクトです。 関数セレクターは EJB インターフェースのメソッドを表す java.lang.reflect.Method オブジェクトを返します。

EJB インポート関数セレクター

この関数セレクターは、EJB インポート・バインディングとの関数セレクター規約に従います。Object[] の最初のエレメントは、WSDL の名前を持つ Java メソッドです。これは JAX-WS アノテーションに従って所定の WSDL メソッドについての Java メソッドを導き出し、入力データ・オブジェクトのアノテーションを使用して、EJB インターフェースを定義する Java クラスの名前を導き出します。


concept 概念トピック

ご利用条件 | フィードバック


タイムスタンプ・アイコン 最終更新: 2010/07/05


http://publib.boulder.ibm.com/infocenter/dmndhelp/v6r2mx/topic//com.ibm.websphere.wesb620.zseries.doc/doc/cadm_slsbbindinggeneral.html
Copyright IBM Corporation 2005, 2010. All Rights Reserved.
このインフォメーション・センターでは Eclipse テクノロジーが採用されています (http://www.eclipse.org)。