EJB インポート・バインディングによって、Service Component Architecture (SCA) モジュールは、モジュール外部の EJB 実装を呼び出すことができます。
外部 EJB 実装 (モジュール外部の EJB 実装) からサービスをインポートすることによって、ユーザーはビジネス・ロジックを WebSphere® Process Server 環境に接続でき、ビジネス・プロセスに参加することができます。EJB インポート・バインディングでは、以下の 2 つの使用シナリオがサポートされています。
コンポーネント | 目的 |
---|---|
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[]) を使用して実行されます。
バインディングは EJB 呼び出しからの応答を処理するために Object[] を作成します。Object[] の最初のエレメントは、Java メソッド呼び出しからの戻り値です。その後の値はメソッドの入力パラメーターを表します。これは In/Out タイプおよび Out タイプのパラメーターをサポートするために必要です。 Out タイプのパラメーターの場合、値は応答データ・オブジェクト内で返される必要があります。データ・ハンドラーは Object[] 内で検出した値を処理および変換して、データ・オブジェクトに応答を返します。
EJB バインディング・レベルで指定されたデータ・ハンドラーは、要求、応答、障害、およびランタイム例外を処理するために使用されます。 障害については、faultBindingType 構成プロパティーを指定することによって、障害ごとに特定のデータ・ハンドラーを指定できます。 この設定は、EJB バインディング・レベルで指定された値をオーバーライドします。
EJB バインディングに WSDL インターフェースがある場合、デフォルトで JAX-WS データ・ハンドラーが使用されます。 このデータ・ハンドラーは JAX-WS (Java API for XML-based WebService) 仕様に準拠しており、WSDL メソッド呼び出しをインポート用の Java メソッド呼び出し (アウトバウンド処理) に変換するために使用します。 またこれは、障害セレクターが ResponseType.RUNTIME の例外を返したときに障害を処理することを目的とした、Java 例外から障害データ・オブジェクトおよびランタイム例外への変換も処理します。このデータ・ハンドラーは、JAX-WS 呼び出しを表す SOAP メッセージからデータ・オブジェクトへの変換には使用できません。
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 を持つ必要があります。
EJB バインディングと障害ハンドラーの間の規約は、Java オブジェクト配列 (Object[]) を使用して実行します。
インポートが正常な場合、バインディングは Object[] を組み立てます。Object[] の最初のエレメントは、Java メソッド呼び出しからの戻り値です。その後の値はメソッドの入力パラメーターを表します。これは In/Out タイプおよび Out タイプのパラメーターをサポートするために必要です。
タイプ | 戻り値 |
---|---|
障害 | ResponseType.FAULT |
ランタイム例外 | ResponseType.RUNTIME |
通常応答 | ResponseType.RESPONSE |
この障害セレクターは、EJB インポート・バインディングとの障害セレクター規約に従います。渡された Object[] に例外オブジェクトが含まれる場合、これは ResponseType.BUSINESSFAULT を返します。例外オブジェクトが、メソッド上で宣言されたどの例外タイプとも一致しない場合、ResponseType.RUNTIME_EXCEPTION を返します。それ以外の場合、ResponseType.RESPONSE を返します。
EJB バインディングとインポート関数セレクターの間の規約は、JAVA オブジェクト配列 (Object[]) を使用して実行します。
Object[] の最初のエレメントは、WSDL の名前です。Object[] の 2 番目のエレメントは入力ビジネス・オブジェクトです。 関数セレクターは EJB インターフェースのメソッドを表す java.lang.reflect.Method オブジェクトを返します。