2.10.3. CBRエンジン

CBR SEは、WebOTX ESBシステムにおいて、XMLメッセージの内容により宛先を振り分ける機能を提供します。
CBR SE動作概要


図2.10.3-1

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

CBR SEのサービスユニットのフォルダ構成は下図の通りです。


図2.10.3.1-1

CBR SEのサービスユニットに含まれるファイルについて以下に説明します。
CBR SEのSUのファイル
表2.10.3.1-1
項目
説明
/META-INF/jbi.xml
サービスユニットの配備記述子です。
service.xml
CBR SEのエンドポイントの設定が記述されます。
*.su
サービスユニットの管理ファイル(編集不可)
rule.js
「JavaScript記述」を保存するファイルです。

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

SUエディタを使用してCBR SEの基本的な設定をする方法を説明します。


図2.10.3.2-1

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

基本設定
サービス名
提供するサービス名を指定します。
QName(名前空間、ローカル名) [必須]
インタフェース名
提供するインタフェース名を設定します。
QName(名前空間、ローカル名)[必須]
エンドポイント名
提供するエンドポイント名を設定します。
文字列[必須]
ESBインスタンス名
分散ESB機能を使用する場合にのみESBインスタンス名を指定します。 その他の場合は空欄にします。
文字(A-Z、a-z)、数字(0-9)、ハイフン(-)、点(.)、下線(_)の組み合わせ [任意]
オペレーション名
提供するオペレーション名を設定します。
QName(名前空間、ローカル名)[必須]
メッセージ交換方式
使用するメッセージ交換方式を指定します。
in-only、 in-out、robust-in-onlyから選択 [必須]
インプット/アウトプット 対象SUフォルダのMETA-INFフォルダのschemaフォルダ配下にあるスキーマファイルの相対パスを指定します。
指定したスキーマファイルは、XSLT SE による変換の定義の際のインプット/アウトプットスキーマとして利用することができます。    [メッセージ交換方式を指定した場合のみ設定可能]
参照
(インプット/アウトプット)
スキーマファイルの選択ダイアログを開きます。
スキーマファイルを選択すると、その相対パスがインプットおよびアウトプット のファイルのテキストボックスに表示されます。
利用方法については、[2.7.7. スキーマファイルの設定] を参照して下さい。
メッセージエクスチェンジハンドラ
メッセージエクスチェンジハンドラを設定します。詳細は2.10.3.4.メッセージエクスチェンジハンドラの設定で説明します。
 
オプション一覧
オプションを設定します。
 

Caution
  エンドポイントのサービス名とエンドポイント名の設定は他のエンドポイントと重複しないようにしてください。

CBRに関する設定項目
表2.10.3.2-2
設定項目
説明

CBR SEの設定
説明
このエンドポイントに関する説明を記述できます。動作には影響しません。
【マルチバイト文字列指定可】
文字列[任意]
タイムアウト時間
呼び出し先のプロバイダ(Outbound)のレスポンスを待つタイムアウト時間を設定します。
数値(long型)[ミリ秒]
   デフォルトは"180000"(3分)
ルーティング設定
XPath
XPathをONにすると、ルーティング情報一覧は使用可になります。
デフォルト値:ON
ルーティング情報一覧
ルーティング情報を設定します。
   詳細は[2.10.3.6. XPath記述]で説明します。 また、編集ボタンでの編集操作については、[2.5.8.3. XPath 関連の操作]をご覧ください。
 
JavaScript
JavaScriptをONにすると、スクリプトエディタは使用可になります。
デフォルト値:OFF
スクリプトエディタ
JavaScriptを記述します。
   詳細は[2.10.3.5.JavaScript記述]で説明します。
JavaScript[任意]
※ 妥当性チェックを行うため、問題がある項目名が赤色となり、正しく修正すると、 項目名が黒くなります。 詳細は、2.8. 妥当性チェックを参照してください。

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

[2.7.5. オプション一覧の設定] を参照して下さい。
CBR SEには使用できるオプションがありません。

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

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

2.10.3.5. JavaScript記述

Inメッセージを振り分ける宛先を決定するための、JavaScriptを記述します。
  JavaScriptでMessageExchangeを参照できます。MessageExchangeを参照するために下記のメソッドが提供されています。
JSに提供されるメソッド(MessageExchangeから情報取得)
表2.10.3.5-1
JSに提供されるメソッド(MessageExchangeから情報取得)
QName
ME_service()
   MessageExchange.getService()を呼び出してサービスを参照します。
QName
ME_interface()
   MessageExchange.getInterface()を呼び出してインタフェースを参照します。
String
ME_endpoint()
   MessageExchange.getEndpoint().getEndpointName()を呼び出してエンドポイントを参照します。
QName
ME_operation()
   MessageExchange.getOperation()を呼び出してオペレーションを参照します。
String
ME_role()
   MessageExchange.getRole()を呼び出してロールを参照します。"CONSUMER"あるいは"PROVIDER"を返却します。
Object
ME_getProperty(String name)
   MessageExchange.getProperty(name)を呼び出してプロパティを参照します。
String
ME_status()
   MessageExchange.getStatus()を呼び出してステータスを参照します。"ACTIVE"、"ERROR"、あるいは"DONE"を返却します。
String
ME_exchangeID()
   MessageExchange.getExchangeID()呼び出してIDを参照します。
JavaScriptでNormalizedMessage(inメッセージ)を参照できます。NormalizedMessageを参照するために下記のメソッドを提供します。
JSに提供されるメソッド(NormalizedMessageから情報取得)
表2.10.3.5-2
JSに提供されるメソッド(NormalizedMessageから情報取得)
Document
NM_content()
   NormalizedMessage.getContent()を呼び出してコンテントを参照します。
Set
NM_attachmentNames()
   NormalizedMessage.getAttachmentNames()を呼び出して添付ファイル名を参照します。
Object
NM_getProperty(String name)
   NormalizedMessage.getProperty()を呼び出してプロパティを参照します。
JavaScriptからWebOTXのログを出力できます。ログを出力するために下記のメソッドを提供します。
JSに提供されるメソッド(WebOTXログに出力)
表2.10.3.5-3
JSに提供されるメソッド(WebOTXログに出力)
void
Logger_finest(String s)
   CBR SEのloggerでTRACEレベルのログを出力します。
void
Logger_fine(String s)
   CBR SEのloggerでDEBUGレベルのログを出力します。
void
Logger_info(String s)
   CBR SEのloggerでINFOレベルのログを出力します。
void
Logger_warning(String s)
   CBR SEのloggerでWARNレベルのログを出力します。
void
Logger_error(String s)
   CBR SEのloggerでERRORレベルのログを出力します。
JavaScriptでinメッセージのメッセージコンテントをアクセスできます。メッセージコンテントをアクセスするために、JAXPのJavaAPIを使って実装するメソッドを提供します。
JSに提供されるメソッド(メッセージコンテントアクセス関連)
表2.10.3.5-4
JSに提供されるメソッド(メッセージコンテントアクセス関連)
org.w3c.dom.NodeList
NM_getXPath_NodeList(String exp)
   javax.xml.xpath.XPathExpression.evaluate(document,XPathConstants.NODESET)を呼び出して、XPath expressionによりメッセージコンテントからNodeListを取得します。
double
NM_getXPath_Double(String exp)
   javax.xml.xpath.XPathExpression.evaluate(document,XPathConstants.NUMBER)を呼び出して、XPath expressionによりメッセージコンテントからdouble値を取得します。
String
NM_getXPath_String(String exp)
   javax.xml.xpath.XPathExpression.evaluate(document,XPathConstants.STRING)を呼び出して、XPath expressionによりメッセージコンテントから文字列を取得します。
Boolean
NM_getXPath_Boolean(String exp)
   javax.xml.xpath.XPathExpression.evaluate(document,XPathConstants.BOOLEAN)を呼び出して、XPath expressionによりメッセージコンテントからBoolean値を取得します。
【JavaScript例】
function rule() {
  // tgt is the routing address to be returned
  var tgt=new TargetService();
  tgt.setEndpoint("proforXfault");
  tgt.setInterface("http://www.payroll.org/payroll.wsdl","PayrollIFfault");
  tgt.setService("http://www.payroll.org/payroll.wsdl","PayrollServicefault");
  tgt.setOperation("http://www.payroll.org/payroll.wsdl","proforXfault_oper");
  tgt.setMep("in-only");
  //using Logger to output current ME’s information
  Logger_finest(ME_service());
  Logger_finest(ME_interface());
  Logger_finest(ME_endpoint());
  Logger_finest(ME_operation());
  //using XPath
  var h = NM_getXPath_Double("sum(//record[FName='Chris'])");
  if (h>200) {
    tgt.setEndpoint("transformEndpoint_fault_01");
    tgt.setInterface("http://www.transformer.org/timecard.wsdl", "TimecardIF_fault_01");
    tgt.setService("http://www.transformer.org/timecard.wsdl", "TimecardService_fault_01");
    tgt.setOperation("http://www.transformer.org/timecard.wsdl", "transform_fault_01");
    tgt.setMep("in-out");
  }
  else {
    tgt.setEndpoint("filebc_01");
    tgt.setInterface("http://www.filebc.org/timecard.wsdl", "TimecardIF_fault_01");
    tgt.setService("http://www.filebc.org/timecard.wsdl", "TimecardService_fault_01");
    tgt.setOperation("http://www.filebc.org/timecard.wsdl", "filebc_01");
    tgt.setMep("in-out");
  }
  return tgt;
}
Chrisの労働時間200時間を越えた場合、SOAP BCを通して外部のサービスへこの情報を送ります。200時間以内の場合、そのまま File BC へ転送し、保存されます。

2.10.3.6. XPath記述

XPathで指定する条件により In メッセージを送信する宛先を切り替えることができます。
XPathを利用したCBRエンジンの作成の方法は[2.5.8.3. XPath 関連の操作]を参照してください。

XPath式による条件の指定方式
サポートする計算符号

XPath1.0仕様に準拠する計算符号をサポートします。

加えて「match」という計算符号を独自に追加しており、正規表現計算を行うことができます。
下記は、「match」計算符号の書式です。

<xpath(※)> match <正規表現>

※:xpathの形式は、前述の[XPath式による条件の指定方式]に従います。

「match」の両辺は文字列型のみサポートします。
また、「match」の計算優先順位は他のどの計算符号よりも高くなります。

Memo
  サポートするXPath仕様のバージョンは1.0です。
仕様の詳しい説明は「http://www.w3.org/TR/xpath/」を参照してください。

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

メッセージ交換方式(MEP)については[ 製品構成と提供機能 > 3. JBI仕様 > 3.2. Normalized Message Router ] の 「メッセージ交換方式(MEP)」をご覧下さい。
CBR SEは、下記の3つのMEPをサポートします。In-Optional-Outは、未サポートです。
   ・In-Only
   ・Robust In-Only
   ・In-Out

JavaScriptの場合、Inメッセージはスクリプトで参照・更新します。XPathの場合、MessageExchangeにあるすべてのNormalizedMessageはXPathで参照できます。
JavaScript/XPathの実行に失敗した場合、エラーログを出力して、inboundへErrorを送信します。JavaScript/XPathの実行に成功した場合、宛先へInメッセージを転送して、宛先からのOutメッセージ、Fault、Doneメッセージをそのまま転送します。