2.9.4. RMIバインディング

RMI BC は、WebOTX ESBからRMI-IIOPを接続プロトコルとしたEJBとのサービス連携機能を提供します。 RMI BC はプロバイダとして動作します。
RMI BC 動作概要


図2.9.4-1

2.9.4.1. サービスユニットのファイル構成

RMI BCのサービスユニットのファイル構成について説明します。
RMI BC のServiceUnitのフォルダ構成は下図の通りです。


図2.9.4.1-1

RMI BC のServiceUnitに含まれるファイルについて以下に説明します。
RMI BC のSUファイル
表2.9.4.1-1
項目
説明
/META-INF/jbi.xml
ServiceUnitの配備記述子です。
endpoints.xml
RMI BC のArtifactファイルです。
*.wsdl
*.xsd
オペレーションやメッセージの定義を含むWSDL文書ファイルです。ファイルシステムのインポート操作で、ServiceUnitに追加してください。WSDL文書は、任意の名前でServiceUnit毎に一つだけ含めてください。WSDLがimportするスキーマファイルも同じ位置に格納します。
*.su
ServiceUnitの管理ファイルです(編集不可)。
WSDLファイルについて
WSDLファイルはServiceUnit作成時に生成されません。予め、Developer's StudioのWebサービスプロジェクト等で作成してください。Developer’s Studioで、Webサービスプロジェクトの新規作成を行うには、メニュー ファイル新規プロジェクトを選択し、新規プロジェクト画面で、WebサービスWebサービスプロジェクト を選択してください。
なお、MEPがIn-Onlyの場合には、WSDLファイルは必要ありません。
詳細については、 [ アプリケーション開発ガイド(Java EE) > 1. Webサービスアプリケーションの開発 ] を参照してください。

2.9.4.2. エンドポイントの設定

SUエディタを使用して RMI BC の基本的な設定をする方法について説明します。


図2.9.4.2-1

Memo
 エンドポイントを追加する方法については、 2.7.1. エンドポイントの追加 をご覧下さい。

基本の設定項目
表2.9.4.2-1
項目
説明

エンドポイント一覧
RMI BC のエンドポイントの一覧を表示します。
 
基本設定
エンドポイントロール
プロバイダ固定です。
プロバイダ固定
サービス名
RMI BC が提供するサービス名と名前空間を指定します。
QName(名前空間、ローカル名) [必須]
インタフェース名
RMI BC が提供するインタフェース名と名前空間を指定します。[必須]
QName(名前空間、ローカル名) [必須]
ESBインスタンス名
分散ESB機能を使用する場合にのみESBインスタンス名を指定します。 その他の場合は空欄にします。
文字(A-Z、a-z)、数字(0-9)、ハイフン(-)、点(.)、下線(_)の組み合わせ [任意]
オペレーション一覧
オペレーションの一覧を表示します。
 
メッセージエクスチェンジハンドラ
メッセージエクスチェンジハンドラを指定します。
 
共通設定
共通項目(セキュリティ認証)を設定します。
 
オプション一覧
オプションを設定します。
 
RMIに関する設定項目
表2.9.4.2-2
項目
説明

RMI BCの設定
EJBエンドポイントURL
EJBアプリケーションのJNDI名を指定します。
文字列[必須]
JNDIサーバのアドレス
JNDIサーバと接続するためのcorbaloc / corbaname URLを設定します。
文字列[任意]
例)"corbaname://hostname:2809"
EJBのリモートインタフェース名
EJBのリモートインタフェースクラス名を指定します。
文字列[必須]
セッションのタイプ
StatelessSessionBean、StatefulSessionBeanを選択します。StatefulSessionBeanはSequencing SEから RMI BC を呼び出す場合のみ使用できます。
stateless、statefulから選択
リクエストタイムアウト値
CORBAのリクエストタイムアウト値(単位:秒)を設定します。
数値(0〜2147483)
GSSUPのユーザ名
EJBアプリケーション呼び出し時の認証で使用するユーザ名を指定します。
【マルチバイト文字列指定可】
文字列[任意]
GSSUPのパスワード
EJBアプリケーション呼び出し時の認証で使用するパスワードを指定します。
【マルチバイト文字列指定可】
文字列[任意]
レルム名
EJB呼び出しの認証情報を管理するレルム名を設定します。デフォルトのレルム("default")以外を使用する場合に設定してください。
文字列[任意]
※ artifact.xml定義時、妥当性チェックを行うため、問題がある項目名が赤色となり、正しく修正すると、項目名が黒くなります。 詳細は、2.8. 妥当性チェックを参照してください。
※ 設定を省略した場合、RMI BCのserver.jbi.components.RMIBinding MOの設定値を使用します。

2.9.4.3. オペレーション設定

SUエディタを使用してオペレーションの設定をする方法について説明します。
 オペレーション一覧追加をクリックし、オペレーションを追加します。
 SUエディタにおける参照をクリックしてSU-エンドポイント一覧ダイアログからサービスユニットとエンドポイントを指定する場合、オペレーション一覧にそれらの指定情報が表示されます。オペレーションリストから、1つのオペレーションを選択してオペレーション設定情報を再利用できます。


図2.9.4.3-1

オペレーションの設定項目
表2.9.4.3-1
項目
説明

オペレーション名
RMI BC が提供するオペレーション名と名前空間を指定します。
QName(名前空間、ローカル名)[必須]
メッセージ交換方式
in-only、robust-in-only、in-outのいずれかを指定してください。
“in-only”、”robust-in-only”、”in-out”から選択[必須]
スキーマファイル インプット/アウトプット 対象SUフォルダのMETA-INFフォルダのschemaフォルダ配下にあるスキーマファイルの相対パスを指定します。
指定したスキーマファイルは、XSLT SE による変換の定義の際のインプット/アウトプットスキーマとして利用することができます。    [メッセージ交換方式を指定した場合のみ設定可能]
参照(B)
(インプット/アウトプット)
スキーマファイルの選択ダイアログを開きます。
スキーマファイルを選択すると、その相対パスがインプットおよびアウトプット のファイルのテキストボックスに表示されます。
利用方法については、[2.7.7. スキーマファイルの設定] を参照して下さい。

2.9.4.4. セキュリティ認証の設定

セキュリティ認証を ON にし、設定 をクリックすると、セキュリティ認証詳細設定ダイアログが表示されます。


図2.9.4.4-1

表2.9.4.4-1
項目
説明

エンドポイント名のURL表記
エンドポイントをURL表記した値。リソース管理に用いられます。
http://webotxesb/<BC名>/エンドポイント名
省略した場合、ESB内部で自動生成されます。
エンドポイントの認証の設定
OFFにした場合はエンドポイントの認証を行いません。
 
エンドポイントのID
認証に利用するIDを設定します。
文字列[必須]
パスワード
認証に利用するパスワードを設定します。パスワードは暗号化とします。
文字列[任意]
ログインモジュールの設定を行う
ログインモジュールの設定を行います。
任意の文字列[任意]
  • ESBSECUREMASTERRealm
  • ESBDefaultCustomRealm
デフォルト値:ESBSECUREMASTERRealm
エンドポイントの認可の設定
OFFにした場合はエンドポイントの認可を行いません。
 
認可に用いる認証情報
認可に利用する認証情報を設定します。
  • client
  • consumer
  • provider
Principalの識別子
Principalの識別子を設定します。
任意の文字列[任意]
外部サービスの認証
OFFにした場合は外部サービスの認証を行いません。ONにした場合、GSSUPのユーザ名、パスワードが設定されていても コンシューマから伝播された認証情報を優先して使用します。
 
Principalの識別子
Principalの識別子を設定します。
任意の文字列[必須]。空の場合は外部サービスの認証情報を利用しません。

2.9.4.5. オプション一覧の設定

[2.7.5. オプション一覧の設定] を参照して下さい。

2.9.4.6. メッセージエクスチェンジハンドラの設定

[2.7.6. メッセージハンドラの設定] を参照して下さい。

2.9.4.7. メッセージ交換方式(MEP)

Outbound(EJBのクライアント機能)での、各MEPにおけるRMI BCの動作は下表のようになります。
RMI BC OutboundのMEPと動作の対応
表2.9.4.7-1
MEP
動作の説明
In-Only
NMR から受け取った要求メッセージを、必要に応じてJavaのクラスに変換し、EJBアプリケーションを呼び出します。EJBアプリケーションの例外を検出した場合やその他の異常を検出した場合はerrorを NMR に通知します。
   EJBアプリケーションのオペレーションに戻り値がなく、オペレーションの呼び出し結果を問わない場合に指定してください。
Robust In-Only
NMR から受け取った要求メッセージを、必要に応じてJavaのクラスに変換し、EJBアプリケーションを呼び出します。EJBアプリケーションの例外を検出した場合はfault、その他の異常を検出した場合はerrorを NMR に通知します。
   EJBアプリケーションのオペレーションに戻り値がなく、オペレーションの呼び出し結果を問う場合に指定してください。
In-Out
NMR から受け取った要求メッセージを、必要に応じてJavaのクラスに変換し、EJBアプリケーションを呼び出します。また、戻り値を元に応答メッセージを作成し、 NMR に通知します。
   EJBアプリケーションの例外を検出した場合はfault、その他の異常を検出した場合はerrorを NMR に通知します。
   EJBアプリケーションのオペレーションに戻り値がある場合や、呼び出しの同期を取る場合に指定してください。
In Optional-Out
(RMI BC では対応しません)
 EJBアプリケーションの例外とは、javax.rmi.RemoteExceptionのことです。
MEPに関する詳細は、概要編の「3.2NormarizedMessageRouter」-「メッセージ交換方式(MEP)」を参照してください。

2.9.4.8. ノーマライズ規則

RMI BCでは、SOAPのRPC形式のメッセージをEJB呼び出しに変換します。そのため、AxisやSAAJ、JAX-RPCといったクライアントアプリケーションから受信した一般的なSOAPのリクエストを処理することができます。
NMR から受け取ったメッセージエクスチェンジをEJB呼び出しに変換することをデノーマライズと言います。呼び出しの戻り値を NMR に送信するメッセージエクスチェンジに変換することをノーマライズと言います。
デノーマライズ規則


図2.9.4.8-1

デノーマライズの規則は上図のようになっています。RMI BCは、メッセージコンテントのSOAPメッセージを解析してJavaのクラスに変換し、EJB呼び出しの引数にします。プロパティや添付ファイルは使用されません。
メッセージエクスチェンジのエラーがあった場合、EJB呼び出しは行われません。その場合、RMI BCによってErrorのメッセージエクスチェンジが NMR に返されます。
ノーマライズ規則


図2.9.4.8-2

ノーマライズ規則は図8cのようになっています。戻り値は、SOAPメッセージに変換され、メッセージコンテントとなります。プロパティ、添付ファイルは使用されません。呼び出しの結果をもとにJBIのステータスを決定し、メッセージエクスチェンジのステータスにセットされます。
EJB呼び出しが例外となった場合、MEPの種別や例外の内容に応じてFaultメッセージがメッセージコンテントにセットされます。
   RMI BCでサポートするJavaのクラスとXMLメッセージにおける型の対応は次の通りです。
RMI BC でサポートするJavaのクラスとXMLメッセージの型の一覧
表2.9.4.8-1
javaのクラス
XMLメッセージにおける型
literalの場合
encodedの場合
int
xsd:int
←同じです。
long
xsd:long
←同じです。
short
xsd:short
←同じです。
float
xsd:float
←同じです。
double
xsd:double
←同じです。
boolean
xsd:boolean
←同じです。
byte
xsd:byte
←同じです。
byte []
xsd:base64Binary
←同じです。
java.lang.String
xsd:string
←同じです。
java.math.BigInteger
xsd:integer
←同じです。
java.math.BigDecimal
xsd:decimal
←同じです。
java.util.Calendar
xsd:dateTime
←同じです。
java.net.URI
xsd:anyURI
←同じです。
java.lang.Integer
xsd:int
←同じです。または、soapenc:int
java.lang.Long
xsd:long
←同じです。または、soapenc:long
java.lang.Short
xsd:short
←同じです。または、soapenc:short
java.lang.Float
xsd:float
←同じです。または、soapenc:float
java.lang.Double
xsd:double
←同じです。または、soapenc:double
java.lang.Boolean
xsd:boolean
←同じです。または、soapenc:boolean
java.lang.Byte
xsd:byte
←同じです。または、soapenc:byte
・xsd:base64Binaryに対応付けられるbyte以外の配列は、literalでは対応する型のsequenceに、また、encodedでは対応する型のsoapenc:arrayTypeになります。
   ・xsd の名前空間URIは「http://www.w3.org/2001/XMLSchema」です。
   ・soapencの名前空間URIは「http://schemas.xmlsoap.org/soap/encoding/」です。

 このほか、JavaBeanクラスに対応付けられるComplexTypeのユーザ定義型にも対応しています。例えば、次のようなWSDLの定義の場合、setE_BigDecimal()とgetE_BigDecimal()のように、要素名の先頭を大文字に変換した値のsetterとgetterを持ち、デフォルトコンストラクタを持つSimpleBeanクラスをEJBの送受信で利用します。それらのメソッドは、public宣言とする必要があります。
<complexType name="SimpleBean">
  <sequence>
    <element name="e_BigDecimal" type="xsd:decimal"/>
    <element name="e_BigInteger" type="xsd:integer"/>
             :

2.9.4.9. ノーマライズメッセージ

ここではRMI BCが NMR と送受信するノーマライズメッセージの説明をします。
デノーマライズ (ノーマライズメッセージからEJB呼び出しへの変換)では、WSDLのinput messageを構成するpart要素のtype属性に従って、ノーマライズメッセージを引数とし、EJB呼び出しを構築します。

       ノーマライズメッセージ
<convert xmlns="http://www.nec.co.jp/jbi/sample1.wsdl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <symbol xmlns="">sym0</symbol>
  <targetPrice xmlns="">15000.0<targetPrice>
  <quantity xmlns="">0<quantity> 
</convert>

       EJB呼び出し
// EJBメソッド定義
public String convert(String symbol, float targetPrice, int quantity);
// 呼び出しイメージ
String result = convert( "sym0", 15000.0, 0 );
ノーマライズ (EJB呼び出しの戻り値からノーマライズメッセージへの変換)では、WSDLのoutput messageを構成するpart要素のtype属性に従って、EJB呼び出しの戻り値を変換し、ノーマライズメッセージへ格納します。

       EJB呼び出し
String result = convert( "sym0", 15000.0, 0 ); //resultが"ok"の場合

       ノーマライズメッセージ
<convertResponse xmlns="http://www.nec.co.jp/jbi/sample1.wsdl">
  <result xmlns="">ok</result>
</convertResponse>
     注: 上記はインデントを整形しており、実際とは異なります。

2.9.4.10. その他

メッセージ形式について
RMI BCで処理するSOAPメッセージの形式は、SOAPのRPC形式のペイロードです。Encodedかliteralかは問いません。EJBアプリケーションのオペレーションの引数の型は、EJBのRemoteインタフェースクラスから判断して型変換を行います。
Remoteインタフェースクラスのクラスパスへの追加
EJBアプリケーションのRemoteインタフェースクラスをクラスパスに追加するためには、RMI BCをシャットダウンした状態で、Remoteインタフェースクラス、または、Remoteインタフェースクラスを含むjarファイルを次のいずれかのディレクトリに格納してください。
    <INSTANCE_ROOT>/jbi/bindings/RMIBinding/install_root/workspace/classes
       <INSTANCE_ROOT>/jbi/bindings/RMIBinding/install_root/workspace/lib
上記のディレクトリに格納されたクラスは、RMI BCをシャットダウン状態から開始した際にクラスパスに追加されます。
または、サービスユニット作成時に、META-INFフォルダのclassesやlibフォルダに、RemoteインタフェースクラスやRemoteインタフェースクラスを含むjarファイルを含めてください。
配備されたEJBアプリケーションは、次のディレクトリに展開されます。その中に、RemoteインタフェースクラスとRemoteインタフェースクラスを含むClient.jarファイルが含まれています。
    <INSTANCE_ROOT>/applications/j2ee-apps/アプリケーション名
ステートフルのEJBアプリケーションサポート
RMI BC では、ステートを持つEJB アプリケーションであるStateful Session Bean にも対応しています。Stateful Session Bean をサービスとして利用する場合は、シーケンシング SE のセッション管理機能を利用する必要があります。具体的には、シーケンシングSE のエンドポイントのサービス定義で、session-close-requiredtrue を設定してください。