EJB プロバイダーを使用すると、WSIF クライアントは、
RMI-IIOP (Remote Method Invocation over Internet Inter-ORB Protocol) を介してエンタープライズ Bean を
呼び出すことができます。この情報とそれに関連したコード・フラグメントを使用すると、Web サービス記述言語 (WSDL) 拡張を作成して、WSIF サービスをエンタープライズ Bean として実装されたサービスに関連付けることができます。
始める前に
EJB (IIOP) ベースの Web サービスの呼び出しのために EJB プロバイダーを使用することが可能でも、代わりに JAX-RPC を使用して RMI-IIOP Web サービスを呼び出すことをお勧めします。
EJB クライアント JAR ファイルは、現行プロバイダーを使用してクライアント・ランタイム環境で使用可能でなければなりません。
EJB プロバイダーは WSIF 同期タイムアウトをサポートしていません。EJB プロバイダーは、Java™
メソッドの完了を待ってタイムアウトになるのではありません。
このタスクについて
WSIF クライアントは、RMI-IIOP を使用して、現行のセキュリティーおよびトランザクション・コンテキストで、エンタープライズ Bean を呼び出すことができます。
EJB プロバイダーがトランザクション内で呼び出される場合、
そのトランザクションが今度はそれ以後のサービスに渡されて、
標準の EJB トランザクション属性が適用されます。
サービスの実装が複数ある場合、すべての実装が必ず同じセマンティクスを提供するかどうかは、そのサービス・プロバイダーによります。例えばトランザクションの場合、
Bean デプロイヤーが強制的に新規トランザクションを確立するには、TX_REQUIRES_NEW を指定する必要があります。
以下の手順とそれに関連したコード・フラグメントを使用すると、Web サービス記述言語 (WSDL) 拡張を作成して、WSIF サービスによるエンタープライズ Bean 呼び出しを可能にすることができます。
手順
- EJB バインディングを指定します。
<!-- EJB binding -->
<binding .... >
<ejb:binding />
<format:typeMapping style="Java" encoding="Java"/>?
<format:typeMap name="qname" formatType="nmtoken"/>*
</format:typeMapping>
<operation>*
<ejb:operation
methodName="nmtoken"
parameterOrder="nmtoken"
returnPart="nmtoken"?
interface="remote|home" />
<input name="nmtoken"? />?
<output name="nmtoken"? />?
<fault name="nmtoken"? />?
</operation>
</binding>
この例では、次のようになっています。
- 疑問符 (「?」) は「オプション」、
アスタリスク (「*」) は「0 以上」を意味します。
- <format:typeMap> エレメントの name 属性は、
EJB オペレーションのいずれかで使用される、単純タイプまたは複合タイプの修飾名です。
- <format:typeMap> エレメントの formatType 属性は、
name によって指定されるエレメントのマップ先となる Java クラスの完全修飾クラス名です。
- <ejb:operation> エレメントの methodName 属性は、
このオペレーションで呼び出されるエンタープライズ Bean のメソッドの名前です。
- <ejb:operation> エレメントの parameterOrder 属性には、
空白文字で区切られた部分名のリストが含まれていて、
これによって、各部分名が EJB メソッドに渡される順序が定義されます。
- <ejb:operation> エレメントの interface 属性は、
remote または home のいずれかに設定する必要があります。この値は、methodName 属性で指定されるメソッドがアクセス可能なエンタープライズ Bean のインターフェースを指定します。
- <ejb:address> エレメントを指定します。
<service ... >
<port>*
<ejb:address
className="nmtoken"
jndiName="nmtoken"
initialContextFactory="nmtoken" ?
jndiProviderURL="nmtoken" ? />
</port>
</service>
この例では、次のようになっています。
- <ejb:address> エレメントの className 属性は、
エンタープライズ Bean のホーム・インターフェース・クラスの完全修飾クラス名を指定します。
- <ejb:address> エレメントの jndiName 属性は、
エンタープライズ Bean の検索に使用する Java Naming and Directory Interface
(JNDI) の絶対名を指定します。
- <ejb:address> エレメントの initialContextFactory 属性はオプションで、
初期コンテキスト・ファクトリー・クラスを指定します。
- <ejb:address> エレメントの jndiProviderURL 属性はオプションで、JNDI プロバイダーの Web アドレスを指定します。