2.9.6. CORBAバインディング

CORBA BC は、WebOTX ESBシステムにおいて、CORBAアプリケーションとのサービス連携する機能を提供します。

Caution
CORBA BCの定義では、IDLからWSDLを生成することができます。ただし、本機能を使う前提としてWebOTX Developer for CORBA Applicationをインストールしなければなりませんのでご注意ください。WebOTX Developer for CORBA Applicationをインストールするためには、WebOTX Developerのインストーラを起動して、機能選択の画面で、WebOTX Developer(for CORBA Application)を選択してください。

CORBA BC 動作概要


図2.9.6-1

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

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


図2.9.6.1-1

CORBA BC のServiceUnitに含まれるファイルについて以下に説明します。
CORBA BC のSUファイル
表2.9.6.1-1
項目
説明
/META-INF/jbi.xml
ServiceUnitの配備記述子
endpoints.xml
CORBA BC のArtifactファイル
*.wsdl
*.xsd
オペレーションやメッセージの定義を含むWSDL文書ファイルです。ファイルシステムのインポート操作で、またはIDLからWSDL生成機能を利用して、ServiceUnitに追加してください。WSDL文書は、任意の名前でServiceUnit毎に一つだけ含めてください。WSDLがimportするスキーマファイルも同じ位置に格納します。
*.su
ServiceUnitの管理ファイル(編集不可)
IDLファイルからWSDLファイル生成について
IDLからWSDL生成の画面は既存のサービスアセンブリプロジェクトを選択して右クリック メニューから表示できます。右クリック メニューで、 ESB開発 IDLからWSDL生成を選択します。 WSDLの生成が終了すると、選択した CORBA BC のサービスユニットでWSDLファイルを生成し、自動的にWSDLファイルが開かれ、WSDLエディタの設定画面になります。


図2.9.6.1-2

CORBA BC のサービスユニット名を選択します。IDLファイルではWSDL生成にインプットとするIDLファイルを選択します。それから、IDLファイルの中にオペレーションのコンテナのモジュールインタフェースを選択します。Webサービス仕様にはJAX-RPCまたはJAX-WSを選択し、次へをクリックします。


図2.9.6.1-3

Webサービス仕様JAX-RPCを選択する場合、JAX-RPC仕様向けのWSDLファイル生成のオプションを指定します。Webサービス名Webサービスの属する名前空間URIにはWSDLに記述するサービス名とサービスの名前空間を指定します。オプショングループでWS-IモードSOAPメッセージ一方向通信などを指定し、次へをクリックします。


図2.9.6.1-4

Webサービス仕様JAX-WSを選択する場合、JAX-WS仕様向けのWSDLファイル生成のオプションを指定します。Webサービス名Webサービスの属する名前空間URIにはWSDLに記述するサービス名とサービスの名前空間を指定します。オプショングループでSOAPメッセージ一方向通信プロトコルなどを指定し、次へをクリックします。


図2.9.6.1-5

WSDLファイル生成のオプションを指定してから、Webサービスの公開に関する情報を指定します。WebサービスにマッピングするURLホスト名ポート番号の指定で、WebサービスのURL初期値に反映します。


図2.9.6.1-6

サービスアセンブリプロジェクト内にサービスユニット名でフォルダが作成され、その中にSUファイル(拡張子がsu)とendpoints.xml以外、サービス名で命名するWSDLファイルが生成されます。


図2.9.6.1-7

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

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


図2.9.6.2-1

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

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

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

CORBA BCの設定
名前サーバのアドレス
接続先の名前サーバを変更する場合に、接続するためのアドレス(corbaname URL)を指定します。
文字列(URL)[任意]
   例)"corbaname://hostname:2809"
名前サーバへの登録先
名前サーバに登録している名前です。
文字列[必須]
   デフォルトは”/NEC/WebOTX/WO_Default/module/interface”
IDLインタフェース名
IDLで定義したインタフェースの名前を指定します。
文字列[必須]
リクエストタイムアウト値
CORBAアプリケーション呼び出し時のリクエストタイムアウト値を指定します。
数値(0以上)[任意]
ファクトリの利用有無
サービスを提供するCORBAアプリケーション呼び出しでのファクトリの利用有無を指定します。
“あり”、”なし”から選択[任意]
   デフォルトは”なし”
サーバオブジェクトの
   生成オペレーション名
サーバオブジェクトを生成するためのオペレーション名を指定します。
ファクトリの利用有無で”あり”を選択した場合[必須] 
   デフォルトは”CreateServerObject”
サーバオブジェクトの
   解放オペレーション名
サーバオブジェクトを解放するためのオペレーション名を指定します。
ファクトリの利用有無で”あり”を選択した場合[必須] 
   デフォルトは” ReleaseServerObject”
セッションのタイプ
サービスを提供するサーバオブジェクトのタイプを指定します。
ファクトリの利用有無で”あり”を選択した場合、”stateless”、”stateful”のいずれかを選択[任意] 
   デフォルトは”stateless”
※ 妥当性チェックを行うため、問題がある項目名が赤色となり、正しく修正すると、項目名が黒くなります。 詳細は、2.8. 妥当性チェックを参照してください。

2.9.6.3. オペレーション設定

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


図2.9.6.3-1

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

オペレーション名
CORBA BC が提供するオペレーション名を指定します。
QName(名前空間、ローカル名)[必須]
メッセージ交換方式
使用するメッセージ交換方式を指定します。
“in-only”、”robust-in-only”、”in-out”から選択[必須]
スキーマファイル インプット/アウトプット 対象SUフォルダのMETA-INFフォルダのschemaフォルダ配下にあるスキーマファイルの相対パスを指定します。
指定したスキーマファイルは、XSLT SE による変換の定義の際のインプット/アウトプットスキーマとして利用することができます。    [メッセージ交換方式を指定した場合のみ設定可能]
参照(B)
(インプット/アウトプット)
スキーマファイルの選択ダイアログを開きます。
スキーマファイルを選択すると、その相対パスがインプットおよびアウトプット のファイルのテキストボックスに表示されます。
利用方法については、[2.7.7. スキーマファイルの設定] を参照して下さい。
引数
オペレーションの引数を指定します。 IDLのオペレーションで定義した引数の名前、順序、属性に合わせて指定します。 WSDLでは、portType要素のoperation要素で定義したparameterOrder属性の名前、順序、 そのoperationのinput/output message要素での引数の有無に合わせて属性を指定します。
引数新規をクリックし、オペレーションの引数を追加します。


図2.9.6.3-2

オペレーションの引数の設定項目
表2.9.6.3-2
項目
説明

引数の名前
オペレーションの引数名を指定します。
文字列[必須]
引数の順番
オペレーションの引数の順番を指定します。
数値(1以上)[必須]
引数の属性
オペレーションの引数の属性を指定します
“in”、”out”、”inout”から選択。[必須]
   デフォルトは”in”

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

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


図2.9.6.4-1

表2.9.6.4-1
項目
説明

エンドポイント名のURL表記
エンドポイントをURL表記した値。リソース管理に用いられます。
http://webotxesb/<BC名>/エンドポイント名
省略された場合、ESB内部で自動生成されます。
エンドポイントの認証の設定
空の場合はエンドポイントの認証を行いません。
エンドポイントのID
認証に利用するIDを設定します。
文字列
パスワード
認証に利用するパスワードを設定します。パスワードは暗号化とします。
文字列
ログインモジュールの設定を行う
ログインモジュールの設定を行います。
文字列(任意)。デフォルト値:ESBSECUREMASTERRealm
エンドポイントの認可の設定
空の場合はエンドポイントの認可を行いません。
認可に用いる認証情報
認可に利用する認証情報を設定します。
プロバイダの場合
  • client
  • consumer
  • provider
Principalの識別子
Principalの識別子を設定します。
文字列(任意)

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

SOAP BCの 2.9.1.8. オプション一覧の設定 節を参照して下さい。

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

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

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

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

2.9.6.8. ノーマライズ規則

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


図2.9.6.8-1

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


図2.9.6.8-2

ノーマライズ規則は上図のようになっています。inout/outタイプの引数と戻り値は、SOAPメッセージに変換され、メッセージコンテントとなります。プロパティ、添付ファイルは使用されません。呼び出しの結果をもとにJBIのステータスを決定し、メッセージエクスチェンジのステータスにセットされます。
CORBAアプリケーション呼び出しが例外となった場合、MEPの種別や例外の内容に応じてFaultメッセージがメッセージコンテントにセットされます。
CORBA BC でサポートするJavaのクラスとXMLメッセージにおける型の対応は次の通りです。
CORBA BC でサポートするJavaのクラスとXMLメッセージの型の一覧
表2.9.6.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
←同じです。
・xsd:base64Binaryに対応付けられるbyte[]以外の配列は、literalでは対応する型のsequenceに、また、encodedでは対応する型のsoapenc:arrayTypeになります。
   ・xsdの名前空間URIは「http://www.w3.org/2001/XMLSchema」です。
   ・soapencの名前空間URIは「http://schemas.xmlsoap.org/soap/encoding/」です。
 このほか、CORBAのstruct型に対応付けられるComplexTypeのユーザ定義型にも対応しています。例えば、次のようなWSDLの定義の場合、e_BigDecimal とe_BigIntegerをメンバに持ち、それらのメンバに対応する引数を持ったコンストラクタを持つ、IDLから自動生成された形式のSimpleBeanクラスを送受信で利用します。それらのメンバは、public宣言とする必要があります。
<complexType name="SimpleBean">
  <sequence>
    <element name="e_BigDecimal" type="xsd:decimal"/>
    <element name="e_BigInteger" type="xsd:integer"/>
                :

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

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

       ノーマライズメッセージ
<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>

       CORBAアプリケーション呼び出し
// IDL定義
string convert(in string symbol, in float targetPrice, in long quantity);
// 呼び出しイメージ
String result = convert( "sym0", 15000.0, 0 );
ノーマライズ (CORBAアプリケーション呼び出しの戻り値からノーマライズメッセージへの変換)では、WSDLのoutput messageを構成するpart要素のtype属性に従って、CORBAアプリケーション呼び出しの戻り値を変換し、ノーマライズメッセージへ格納します。

       CORBAアプリケーション呼び出し
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.6.10. その他

サーバアプリケーションの呼び出し制御
CORBA BCでは、サーバアプリケーションを呼び出すためにスタブクラスが必要です。
   そのため、アプリケーションのスタブクラスをクラスパスに追加する必要があります。
   スタブクラス、または、スタブクラスを含むjarファイルを次のいずれかのディレクトリに格納してください。
    <INSTANCE_ROOT>/jbi/bindings/CORBABinding/install_root/workspace/classes
       <INSTANCE_ROOT>/jbi/bindings/CORBABinding/install_root/workspace/lib
または、サービスユニット作成時に、META-INFフォルダのclassesやlibフォルダに、スタブクラスやスタブクラスを含むjarファイルを含めてください。
CORBA BC では、作成する応答メッセージの情報を取り込むために、WSDLファイルを利用します。そのため、WSDLファイルを1つ、サービスユニット(SU)に含める必要があります。 ただし、サーバアプリケーションのオペレーションに戻り値がない場合や、MEPが応答メッセージを作成する必要のないIn-Onlyの場合は、SUにWSDLファイルを含める必要はありません。
ステートフルのサーバアプリケーションサポート
CORBA BC では、ステートを持つサーバアプリケーションにも対応しています。
StatefulのWebOTX CORBAアプリケーションをサービスとして利用する場合は、Sequencing SEのセッション管理機能を利用する必要があります。具体的には、Sequencing SEのエンドポイントのサービス定義で、session-close-requiredにtrueを設定してください。