2.9.12. HL7バインディング

HL7 BC は、 医療情報交換の国際規約であるHL7によるメッセージ転送の機能を提供します。
下図はHL7 BC動作概要です。


図2.9.12-1

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

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


図2.9.12.1-1

HL7 BCのサービスユニットに含まれるファイルについて以下に示します。
表2.9.12.1-1
項目
説明
/META-INF/schema
メッセージ検証用スキーマ、SU個別のHL7カスタマイズスキーマを格納するフォルダです。
/META-INF/jbi.xml
サービスユニットの配備記述子です。
/auto-reply/default.xml
MSH.9-メッセージ型に対応した固定応答のファイルです。
/sft/sft.xml
SFTテンプレートファイルです。
endpoints.xml
HL7 BCのエンドポイントの設定が記述されます。
*.su
サービスユニットの管理ファイルです(編集不可)。

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

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


図2.9.12.2-1

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

基本設定項目
表2.9.12.2-1
設定項目
説明

エンドポイント一覧
  SUで定義されたエンドポイントの一覧を表示します。  
基本設定
エンドポイントロール
外部クライアントからHL7メッセージを受け取る場合(Inbound)はコンシューマを設定します。
外部サービスを呼び出す場合(Outbound)はプロバイダを設定します。

※ コンシューマでエンドポイントロールを指定する場合、参照をクリックすると、SU-エンドポイント一覧 ダイアログが表示されます。このダイアログを利用して、カレントサービスアセンブリプロジェクトに存在しているサービスユニットに関するサービス名やインタフェース名などの情報を再利用できます。


図2.9.12.2-2

プロバイダ、コンシューマから選択 [必須]
サービス名
エンドポイントロールがプロバイダの場合、エンドポイントが提供するサービス名を指定します。
   エンドポイントロールがコンシューマの場合、呼び出し先となるエンドポイントのサービス名を指定します。
QName(名前空間、ローカル名) [必須]
インタフェース名
エンドポイントロールがプロバイダの場合、エンドポイントが提供するインタフェース名を設定します。
   コンシューマの場合、呼び出し先となるエンドポイントのインタフェース名を指定します。
QName(名前空間、ローカル名)[必須]
ESBインスタンス名
分散ESB機能を使用する場合にのみESBインスタンス名を指定します。 その他の場合は空欄にします。
文字(A-Z、a-z)、数字(0-9)、ハイフン(-)、点(.)、下線(_)の組み合わせ [任意]
オペレーション一覧
  オペレーションを設定します。
詳細については、[2.9.12.3. オペレーション設定] をご覧下さい。
 
メッセージエクスチェンジハンドラ
メッセージエクスチェンジハンドラを設定します。
詳細については、 [2.7.6. メッセージハンドラの設定] をご覧下さい。
 
共通設定
共通項目(セキュリティ認証、トランザクション、メッセージ送信優先度、エラーリトライ)を設定します。

セキュリティ認証の詳細については、File BC の[2.9.5.4. セキュリティ認証の設定] をご覧下さい。 トランザクション、メッセージ送信優先度、エラーリトライについては、それぞれ、 [2.7.2. トランザクションの設定]、 [2.7.3. メッセージ送信優先度の設定]、 [2.7.4. エラーリトライの設定]をご覧下さい。
 
オプション一覧
オプションを設定します。
[2.7.5. オプション一覧の設定]を参照して下さい。
 
HL7に関する設定項目
表2.9.12.2-2
設定項目
説明

HL7 BCの設定
HL7メッセージのバージョン HL7メッセージのバージョンを指定します。この設定値はメッセージの受信、HL7メッセージ変換、メッセージの検証、fault/エラーメッセージの送信、シーケンス番号応答メッセージで使用されます。 デフォルト値: 2.5
メッセージ変換 メッセージ変換元フォーマット HL7メッセージの変換元フォーマットを指定します。 下記の値から選択。[必須]
  • ER7
  • XML
デフォルト値:XML
メッセージ変換先フォーマット HL7メッセージの変換先フォーマットを指定します。 下記の値から選択。[必須]
  • ER7
  • XML
デフォルト値:ER7
メッセージ変換エラーを無視する HL7メッセージのフォーマット変換時に発生したエラーを無視して処理を続行するかどうかを指定します。 下記の値から選択。[必須]
  • true
  • false
デフォルト値:true
シーケンス番号プロトコルを有効化する シーケンス番号プロトコルの有効化/無効化を指定します。 下記の値から選択。[必須]
  • true
  • false
デフォルト値:false
MSHセグメント メッセージ日時フォーマット 固定応答メッセージ送信時とエラーメッセージ送信時のメッセージ日時・制御IDのフォーマットを指定します。 下記の値から選択。
  • YYYY
  • YYYYMM
  • YYYYMMDD
  • YYYYMMDDHH
  • YYYYMMDDHHMM
  • YYYYMMDDHHMMSS
  • YYYYMMDDHHMMSS.SSS
デフォルト値:YYYYMMDDHHMMSS
タイムゾーンの付加 固定応答メッセージ送信時とエラーメッセージ送信時のメッセージ日時・制御IDのフォーマットに、タイムゾーンの情報を付加するかどうかを指定します。 下記の値から選択。[必須]
  • true
  • false
デフォルト値:false
MSHセグメントの検証 MSHセグメントの検証を有効化する MSHセグメントの検証の有効化/無効化を指定します。 下記の値から選択。[必須]
  • true
  • false
デフォルト値:false
処理ID 検証対象とするMSHセグメントの処理IDを指定します。
P = Production, D = Debugging, T = Training
下記の値から選択。
  • P
  • D
  • T
デフォルト値:P
HL7メッセージ
のバージョン
MSHセグメントの検証時に使用する HL7メッセージのバージョンを表示します。 前出の "HL7メッセージのバージョン" と同じ値を表示しており、編集はできません。 "HL7メッセージのバージョン" の値
SFTセグメント 要求メッセージのSFTセグメントの処理 要求メッセージ中のSFTセグメントの処理方法を設定します。 下記の値から選択。[必須]
  • 常に上書き
  • 空であれば上書き
  • 処理しない
デフォルト値:処理しない
応答メッセージのSFTセグメントの処理 応答メッセージ中のSFTセグメントの処理方法を設定します。 下記の値から選択。[必須]
  • 常に上書き
  • 空であれば上書き
  • 処理しない
デフォルト値:処理しない
SFTテンプレートファイルのパス 使用するSFTテンプレートファイルのファイルパスを指定します。 デフォルト値:sft/sft.xml
アプリケーション肯定応答 固定応答を使用する アプリケーション肯定応答に固定応答を使用するかどうかを指定します。 下記の値から選択。[必須]
  • true
  • false
デフォルト値:false
固定応答ファイル格納ディレクトリ 固定応答に使用するファイルの格納ディレクトリを指定します。 デフォルト値:auto-reply
下位層プロトコル(LLP) クラス名 HL7メッセージ通信に使用するプロトコルのクラス名を指定します。 下記の値から選択。
  • MLLP v1.0
デフォルト値:MLLP v1.0
パラメータ 詳細については、[2.9.12.10. MLLPパラメータ詳細設定] をご覧下さい。  
※ 妥当性チェックを行うため、問題がある項目名が赤色となり、正しく修正すると、項目名が黒くなります。 詳細は、2.8. 妥当性チェック を参照してください。

2.9.12.3. オペレーション設定

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


図2.9.12.3-1

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

オペレーション名
エンドポイントロールがプロバイダの場合、エンドポイントが提供するオペレーション名を指定します。
   エンドポイントロールがコンシューマの場合、呼び出し先となるエンドポイントのオペレーション名を指定します。
QName(名前空間、ローカル名) [必須]
メッセージ交換方式
使用するメッセージ交換方式を指定します。
   コンシューマの場合、プロバイダの提供するメッセージ交換方式を指定してください。
in-only、 in-out、robust-in-only から選択 [必須]
スキーマファイル インプット/アウトプット 対象SUフォルダのMETA-INFフォルダのschemaフォルダ配下にあるスキーマファイルの相対パスを指定します。
指定したスキーマファイルは、後述のインプット検証/アウトプット検証を選択することで実行時のメッセージ検証に利用することができます。
選択しなかった場合も、XSLT SE による変換の定義の際のインプット/アウトプットスキーマとして利用することができます。    [メッセージ交換方式を指定した場合のみ設定可能]
参照
(インプット/アウトプット)
スキーマファイルの選択ダイアログを開きます。
スキーマファイルを選択すると、その相対パスがインプットおよびアウトプットのファイルのテキストボックスに表示されます。
利用方法については、[2.7.7. スキーマファイルの設定] を参照して下さい。
 
検証実行 インプットの検証実行 実行時に、インプットで指定したスキーマファイルでのメッセージの検証を実施します。
   選択時には、スキーマファイルのインプットの指定は必須項目となります。
   [メッセージ交換方式を指定した場合のみ設定可能]
デフォルトは非選択 [任意]
アウトプットの検証実行 実行時に、アウトプットで指定したスキーマファイルでのメッセージの検証を実施します。
   選択時には、スキーマファイルのアウトプットの指定は必須項目となります。
   [メッセージ交換方式を指定した場合のみ設定可能]
デフォルトは非選択 [任意]
入力メッセージのタイプ 入力メッセージのタイプを指定します。 下記の値から選択。[必須]
  • xml
  • attachment
デフォルト値:xml
出力メッセージのタイプ 出力メッセージのタイプを指定します。 下記の値から選択。[必須]
  • xml
  • attachment
デフォルト値:xml
入出力メッセージのエンコーディング 入出力メッセージのエンコーディングを指定します。 下記の値から選択。[必須]
  • UTF-8
  • UTF-16
  • ISO-8859-1
  • EUC-JP
  • Shift_JIS
  • ISO-2022-JP
  • BIG5
  • GB2312
  • ASCII
デフォルト値:UTF-8

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

[2.9.5.4. セキュリティ認証の設定] を参照して下さい。

2.9.12.5. トランザクションの設定

[2.7.2. トランザクションの設定] を参照して下さい。

2.9.12.6. メッセージ送信優先度の設定

[2.7.3. メッセージ送信優先度の設定] を参照して下さい。

2.9.12.7. エラーリトライの設定

[2.7.4. エラーリトライの設定] を参照して下さい。

Memo
HL7 BCではプロバイダにもエラーリトライの設定が有効です。プロバイダのエラーリトライを有効にすると、外部サーバアプリケーションへのメッセージ送信でIOExceptionが発生した場合にメッセージ再送します。

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

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

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

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

2.9.12.10. MLLPパラメータ詳細設定

パラメータの設定について説明します。
パラメータには、指定が必須な項目と、任意な項目があります。 また、エンドポイントロールにより、指定可能な項目も異なります。
各項目の詳細について説明します。
表2.9.12.10-1
設定項目
説明

必須
host
(ホスト)
コンシューマ:bindするアドレスを指定します。空欄ならば全てのアドレス。
プロバイダ:接続先のホストを指定します。
[プロバイダのみ必須]
デフォルト値:空白
port
(ポート)
コンシューマ:接続を待ち受けるポート番号を指定します。既に使用されているポートを指定した場合、起動時にエラーになります。値はドメインで一意です。
プロバイダ:接続先のポート番号を指定します。
数値(0〜65535)[必須]
デフォルト値:空白
omit-start-block-character
(スタートブロックを省略する)
MLLP使用時のHL7メッセージのスタートブロックを省略するかどうかを指定します。 下記の値から選択。[必須]
  • true
  • false
デフォルト値:false
start-block-character
(スタートブロックの文字)
MLLP使用時のHL7メッセージのスタートブロックの文字をASCIIの10進数表現で指定します。
※omit-start-block-character(スタートブロックを省略する)がfalseの場合に有効化されます。
数値(0〜127)[必須]
デフォルト値:11
   ※エンドブロック・キャリッジリターンと異なる値。
end-block-character
(エンドブロックの文字)
MLLP使用時のHL7メッセージのエンドブロックの文字をASCIIの10進数表現で指定します。 数値(0〜127)[必須]
デフォルト値:28
   ※スタートブロック・キャリッジリターンと異なる値。
carriage-return-character
(キャリッジリターンの文字)
MLLP使用時のHL7メッセージのキャリッジリターンの文字をASCIIの10進数表現で指定します。 数値(0〜127)[必須]
デフォルト値:13
   ※スタートブロック・エンドブロックと異なる値。
connection-size
(最大コネクション数)
同時に接続を許可するコネクションの数を指定します。
   ※コンシューマの場合のみ
数値(0〜2147483647)[必須]
デフォルト値:0
connection-backlog
(コネクションのバックログ)
受信する接続要求のキュー最大長(バックログ)を設定します。
   ※コンシューマの場合のみ
数値(0〜2147483647)[必須]
デフォルト値:50
max-connection-pool-size
(最大プールサイズ)
コネクションの最大数を設定します。
   ※プロバイダの場合のみ
数値(0〜2147483647)[必須]
デフォルト値:10
min-connection-pool-size
(最小プールサイズ)
コネクションの最小数を設定します。
   ※プロバイダの場合のみ
数値(0〜2147483647)[必須]
デフォルト値:2
   ※最大プールサイズの値より小さい値。
initial-connection-pool-size
(初期プールサイズ)
起動時に張るコネクションの数を設定します。
   ※プロバイダの場合のみ
数値(0〜2147483647)[必須]
デフォルト値:0
   ※最大プールサイズの値より小さい値。
connection-shrink-delay-time
(コネクション解放の待ち合わせ時間)
コネクションプールの最小プールサイズを越えて接続されたコネクションの使用後、コネクションを切断するまでの時間を設定します。
0の場合は即座に切断します。
   ※プロバイダの場合のみ
数値(0〜2147483647)[必須]
単位:秒
デフォルト値:15
任意
socket-association コンシューマのソケットとプロバイダのソケットの関連付けを行うか否かを指定します。 プロバイダの場合のみ有効な項目で、コンシューマの場合は指定しても効果はありません。 下記を入力。
  • true
  • false
実行時デフォルト値:false
close-opposite-socket ソケットがクローズした際、反対側のソケットもクローズするか否かを指定します。 下記を入力。
  • true
  • false
実行時デフォルト値:true
connection-reconnect コネクション自動再接続の施行回数。0を指定すると、コネクション自動再接続機能自体が無効になり、-1を指定すると無制限になります。 数値(-1〜2147483647)
単位:秒
実行時デフォルト値:0
so-timeout 呼び出す外部サーバーからの応答待ち時間(秒)を指定します。 (厳密には、Socketに結び付けられたInputStream#readの応答待ち時間です。) 数値(0〜2147483647)
単位:秒
実行時デフォルト値:0
so-linger SU停止処理時に残存メッセージを送信するための遅延時間(秒)を指定します。 (厳密には、Socketのクローズ処理時に残存メッセージを送信するための遅延時間です。)
0未満:
残存メッセージ送信完了後にソケットをクローズします。
0:
残存メッセージを破棄してソケットをクローズします。
1以上:
残存メッセージの送信が完了するか、ここで指定した時間が経過するまで待機してからソケットをクローズします。
数値(-2147483648〜2147483647)
単位:秒
実行時デフォルト値:-1
keep-alive SocketのSO_KEEPALIVEを有効または無効にします。 下記を入力。
  • true
  • false
実行時デフォルト値:false
receive-buffer-size SocketのSO_RCVBUF オプションを、指定した値に設定します。 数値(0〜2147483647)
単位:秒
実行時デフォルト値:8192
send-buffer-size SocketのSO_SNDBUF オプションを、指定した値に設定します。 数値(0〜2147483647)
単位:秒
実行時デフォルト値:8192
tcp-nodelay SocketのTCP_NODELAY を有効または無効にします。 下記を入力。
  • true
  • false
実行時デフォルト値:false
traffic-class パケットの IP ヘッダーのトラフィッククラスまたはサービスタイプのオクテットを設定します。 数値(0〜255)
単位:秒
実行時デフォルト値:0
reuse-address SocketのSO_REUSEADDRを有効または無効にします。(コンシューマではServerSocketのオプション) 下記を入力。
  • true
  • false
実行時デフォルト値:false
connect-timeout TCPポートに接続するまでのタイムアウト時間を設定します。 0 の指定は無限を意味し、タイムアウトは発生しません。 プロバイダの場合のみ有効な項目で、コンシューマの場合は指定しても効果はありません。 数値(0〜2147483647)
単位:秒
実行時デフォルト値:0
任意の名称のパラメータ 任意の名称のパラメータと、その値を設定できます。
【マルチバイト文字列指定可】
任意

指定が必須な項目は、編集ボタンで起動する、MLLPパラメータ詳細設定(必須)ダイアログで設定します。 エンドポイントロールにより、編集可能な項目が変化します。以下は、プロバイダの場合の状態を示しています。


図2.9.12.10-1

指定が任意な項目は、追加ボタンで起動する、MLLPパラメータ詳細設定(任意)ダイアログで設定します。 また、パラメータ名 には、任意の文字列の入力が可能なので、任意の名称のパラメータを指定する事ができます。


図2.9.12.10-2

追加した任意の項目は、削除ボタンで削除することができます。

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

HL7 BC は Outbound、Inbound ともに In-Only、Robust In-Only、In-Out の3つのMEPをサポートします。
メッセージ交換方式(MEP)の説明は [ 製品構成と提供機能 > 3.JBI仕様 > 3.2.Normalized Message Router ] を参照してください。

Outbound
Outboundの各MEPの動作を説明します。

表2.9.12.11-1
MEP タイプ 動作の説明
In-Only
要求
NMR からメッセージエクスチェンジ受け取り、Inメッセージを取りだしてLLPHandlerのsendメソッドのパラメータとして渡します。 sendメソッドにおいて外部アプリケーションと通信を行います。
応答(Done)
LLPHandlerのsendメソッドが正常に終了した場合、Doneステータスを設定したメッセージエクスチェンジを NMR に返却します。
応答(Error)
LLPHandlerのsendメソッドで例外が発生するなど、Outboundの処理で異常が発生した場合に、例外メッセージを格納したメッセージエクスチェンジを NMR に返却します。
Robust In-Only
要求
NMR からメッセージエクスチェンジ受け取り、Inメッセージを取りだしてLLPHandlerのsendメソッドのパラメータとして渡します。 sendメソッドにおいて外部アプリケーションと通信を行います。
応答(Done)
LLPHandlerのsendメソッド、receiveメソッドが正常に終了した場合、Doneステータスを設定したメッセージエクスチェンジを NMR に返却します。
応答(Fault)
LLPHandlerのreceiveメソッドでFaultExceptionが発生した場合やHL7仕様上の異常が発生した場合、Faultメッセージを含むメッセージエクスチェンジを NMR に返却します。
応答(Error)
LLPHandlerのsendメソッドまたはreceiveメソッドでFaultException以外の例外が発生するなど、Outboundの処理で異常が発生した場合に、例外メッセージを格納したメッセージエクスチェンジを NMR に返却します。
In-Out
要求
NMR からメッセージエクスチェンジ受け取り、Inメッセージを取りだしてLLPHandlerのsendメソッドのパラメータとして渡します。 sendメソッドにおいて外部アプリケーションと通信を行います。
応答(Out)
receiveメソッドで返却されたInputStreamを、Outメッセージとしてメッセージエクスチェンジに設定し、NMRに送信します。
応答(Fault)
LLPHandlerのreceiveメソッドでFaultExceptionが発生した場合やHL7仕様上の異常が発生した場合、Faultメッセージを含むメッセージエクスチェンジを NMR に返却します。
応答(Error)
LLPHandlerのsendメソッドまたはreceiveメソッドでFaultException以外の例外が発生するなど、Outboundの処理で異常が発生した場合に、例外メッセージを格納したメッセージエクスチェンジを NMR に返却します。

Inbound
Inboundの各MEPの動作を説明します。

表2.9.12.11-2
MEP
タイプ
動作の説明
In-Only
要求
LLPHandlerのreceiveメソッドによりクライアントアプリケーションからメッセージを受け取り、返却されたInputStream をInメッセージとしてメッセージエクスチェンジに設定して、NMRに送信します。
応答(Done)
Outboundで正常に処理が行われた場合にDoneメッセージを受け取ります。その後receiveメソッドを実行し、同じコネクション上の次のメッセージの待ち受けを開始します。
応答(Error)
Outboundの処理で異常が発生した場合にErrorメッセージを受け取ります。 その後コネクションを破棄します。
Robust In-Only
要求
LLPHandlerのreceiveメソッドによりクライアントアプリケーションからメッセージを受け取り、返却されたInputStream をInメッセージとしてメッセージエクスチェンジに設定して、NMRに送信します。
応答(Done)
Outboundで正常に処理が行われた場合にDoneメッセージを受け取ります。その後LLPHandlerのreceiveメソッドを実行し、同じコネクション上の次のメッセージの待ち受けを開始します。
応答(Fault)
NMR からメッセージエクスチェンジ受け取り、Faultメッセージを取りだします。
応答(Error)
Outboundの処理で異常が発生した場合にErrorメッセージを受け取ります。その後TCPコネクションを破棄します。
In-Out
要求
LLPHandlerのreceiveメソッドによりクライアントアプリケーションからメッセージを受け取り、返却されたInputStream をInメッセージとしてメッセージエクスチェンジに設定して、NMRに送信します。
応答(Out)
NMR からメッセージエクスチェンジ受け取り、Outメッセージを取りだしてLLPHandlerのsendメソッドのパラメータとして渡します。 sendメソッドにおいて外部アプリケーションと通信を行います。
応答(Fault)
NMR からメッセージエクスチェンジ受け取り、Faultメッセージを取りだしてLLPHandlerのsendメソッドのパラメータとして渡します。sendメソッドにおいて外部アプリケーションと通信を行います。
応答(Error)
Outboundの処理で異常が発生した場合にErrorメッセージを受け取ります。LLPハンドラのsendメソッドを実行し、 その後コネクションを破棄します。

2.9.12.12. ノーマライズ規則

ノーマライズ規則

HL7 BCのInboundのリクエスト受信処理、およびOutboundのレスポンス受信処理では、 外部アプリケーションから受け取ったメッセージをLLPハンドラのreceiveメソッドに より処理した結果をメッセージエクスチェンジに変換(ノーマライズ)します。 HL7 BCのノーマライズを示した図です。 オペレーションの設定項目「入力メッセージのタイプ」によりメッセージを 格納する箇所を指定することができます。 「入力メッセージのタイプ」を"XML"に指定した場合はノーマライズメッセージの メッセージコンテントに、"attachment"に指定した場合は添付ファイルに格納します。


図2.9.12.12-1

デノーマライズ規則

HL7 BCのInboundのレスポンス送信処理、およびOutboundのリクエスト送信処理では、 ノーマライズとは逆に、メッセージエクスチェンジから受け取ったメッセージを LLPハンドラのsendメソッドにより外部アプリケーションに送信するメッセージに変換(デノーマライズ)します。 オペレーションの設定項目「出力メッセージのタイプ」によりメッセージを 取りだす箇所を指定することができます。 「出力メッセージのタイプ」を"XML"に指定した場合はノーマライズメッセージの メッセージコンテントから、"attachment"に指定した場合は添付ファイルから取り出します。


図2.9.12.12-2

Memo
SOAP BCとノーマライズメッセージの送受信を行う場合、オペレーション設定項目のオペレーション名(名前空間URIとローカル名)を、 XML形式のHL7メッセージのルート要素の要素名(メッセージ型名)と名前空間に合わせるか、unwrapped Documentの設定を行う必要があります。 設定方法に関しては、SOAP BCの [2.9.1.3. オペレーション設定] を参照して下さい。

2.9.12.13. 異常系メッセージ

WebOTX ESBにおいて「HL7メッセージの形式が不正であった」、「サーバからエラーメッセージを受信した」等の異常が発生した場合、HL7 BCのInboundがクライアントアプリケーションにMSA-1(肯定応答コード)がARのACKメッセージを返却します。 クライアントアプリケーションでは返却されたACKメッセージから発生した異常の内容を知ることができます。 以下では、発生する異常の種類ごとのHL7 BCのInboundからクライアントアプリケーションに返却するメッセージを説明します。

異常の種類により Fault または Error の分類があります。 以下はHL7 BCにおいて異常が発生するパターンの一覧です。 [ リファレンス集 開発編(Enterprise Service Bus) > 2. 異常系メッセージ(Fault/Error) > 2.1. バインディングコンポーネント > 2.1.13. HL7 BC ]

プロバイダエンドポイントがサーバアプリケーションからエラーメッセージを受信した場合(HL7 BC同士の連携時)

HL7 BCのプロバイダエンドポイントがMSA-1(肯定応答コード)がAR/AE/CR/CEのメッセージを受け取ると、 HL7 BCのInboundにはFaultが通知され、 クライアントアプリケーションにはプロバイダエンドポイントが受け取ったエラーメッセージがそのまま返信されます。

HL7 BCの処理中にHL7仕様上の異常が発生した場合

HL7 BCの処理中に、形式が不正なメッセージやフィールドの値が異常なメッセージなどを受信した場合、 HL7 BCでMSA-1(肯定応答コード)がARのACKメッセージを生成し、クライアントアプリケーションに返信します。 HL7 BCのOutboundで異常が発生した場合は、InboundにFaultが通知されます。 エラー内容の詳細はERR-1に記載されます。

HL7 BCの処理中にHL7仕様外の異常が発生した場合

HL7 BCの処理中に、サーバアプリケーションとの通信に失敗するなどHL7仕様外の異常が発生した場合、 HL7 BCでMSA-1(肯定応答コード)がARのACKメッセージを生成し、クライアントアプリケーションに返信します。 HL7 BCのOutboundで異常が発生した場合は、InboundにErrorが通知されます。 エラー内容の詳細はERR-1に記載されます。

プロバイダエンドポイントがFault/Errorを返却した場合(HL7 BC以外との連携時)

HL7 BC以外のプロバイダエンドポイントから Fault/Error を受け取った場合、 HL7 BCのInboundでMSA-1(肯定応答コード)がARのACKメッセージを生成し、クライアントアプリケーションに返信します。 エラー内容の詳細はERR-1に記載されます。

HL7 BCで生成されるACKメッセージは、MSH、SFT、MSA、ERRセグメントで構成され、各フィールドには以下の値が設定されます。表に記載の無いフィールドには値を設定しません。
表2.9.12.13-1
フィールド
説明

MSH-1
フィールド区切り
受信メッセージのMSH-1の値を使用します。
MSH-2
符号化文字
受信メッセージのMSH-2の値を使用します。
MSH-3
送信アプリケーション
受信メッセージのMSH-5の値を使用します。
MSH-4
送信施設
受信メッセージのMSH-6の値を使用します。
MSH-5 受信アプリケーション 受信メッセージのMSH-3の値を使用します。
MSH-6 受信施設 受信メッセージのMSH-4の値を使用します。
MSH-7 メッセージ日時 MSHセグメントの設定[メッセージ日時フォーマット]の書式を使用し、日時を設定します。
MSH-8 セキュリティ 受信メッセージのMSH-8の値を使用します。
MSH-9 メッセージ型 第1成分・第3成分は常に「ACK」を設定します。
第2成分は受信メッセージと同じ値を使用します。
MSH-10 メッセージ制御ID MSHセグメントの設定[メッセージ日時フォーマット]の書式を使用し、日時を設定します。
MSH-11 処理ID 受信メッセージのMSH-11の値を使用します。
MSH-12 バージョンID 受信メッセージのMSH-12の値を使用します。
MSH-13 シーケンス番号 受信メッセージのMSH-13の値を使用します。
SFT-1 〜 SFT-6 ソフトウェアセグメント SFTセグメントの設定に従って挿入・上書きします。
MSA-1 肯定応答コード 常に「AR」を設定します。
MSA-2 メッセージ制御ID 受信メッセージのMSH-10の値を使用します。
MSA-4 期待されるシーケンス番号 [シーケンス番号プロトコルを有効化する]が「true」の場合、シーケンス番号を設定します。
ERR-1 エラーコードとロケーション 発生したエラーの内容を第4成分に記載します。
ERR-3 HL7エラーコード 常に「207」を設定します。
ERR-4 影響度 常に「E」を設定します。

2.9.12.14. メッセージ変換

HL7 BCでは、InboundおよびOutboundでER7形式とXML形式の相互変換機能を提供しています。
HL7のバージョンは2.5をサポートしますが、スキーマ定義があれば2.5以外のバージョンでも動作可能です。 ローカル拡張メッセージ(HL7の仕様書で記載されていない、システムで独自に定義する頭文字がZで始まるメッセージ)や、 内部的に修正されたメッセージ(ユーザ独自に定義したメッセージ)もサポートします。

変換形式の指定

変換元のメッセージフォーマットと変換先のメッセージフォーマットを指定することでメッセージ変換を行います。 設定方法に関しては、[2.9.12.2. エンドポイントの設定] を参照して下さい。 変換元フォーマットと変換先フォーマットに同じ値を指定した場合はメッセージ変換しません。

スキーマ定義ファイル

スキーマ定義ファイル名はHL7標準のスキーマ定義ファイル名に準拠します。 変換エンジンで必要となるスキーマ定義はdatatypes.xsd(データタイプ)、fields.xsd(フィールド、セグメント)、 XXX_XXX.xsd(メッセージ)であるため、ユーザ独自のデータタイプとフィールドに関してはそれぞれdatatypes.xsd、 fields.xsd固定となります。HL7標準のファイルとの区別は配置するフォルダで分けます。 スキーマ定義ファイルの配置場所は3箇所あります。

1.HL7標準のスキーマ
<INSTANCE_ROOT>/jbi/bindings/HL7Bindings/install_root/schema/<バージョン名>
2.共有のカスタマイズスキーマ
<INSTANCE_ROOT>/jbi/bindings/HL7Bindings/install_root/workspace/schema/<バージョン名>
3.SU個別のカスタマイズスキーマ
<SU作成ディレクトリ>/META-INF/schema/<バージョン名>

ユーザが作成したスキーマ定義ファイルは上記の2.または3.に格納します。 オリジナルとユーザ独自のメッセージが同じ定義ファイル名となった場合は、3.→2.→1.の順に優先します。
追加・置換したスキーマ定義ファイルを有効化するためには、サービスアセンブリの再起動が必要です。

2.9.12.15. 固定応答

[2.9.12.2. エンドポイントの設定]で設定した固定応答ファイル格納ディレクトリに 固定応答ファイルを格納する事で、要求メッセージの種類に応じた固定の応答メッセージを返信できます。
固定応答ファイルには、HL7メッセージをXML形式またはER7形式で記述したファイルが使用できます。

固定応答の設定を有効化した場合にHL7メッセージを受信すると、要求メッセージのMSH.9フィールド中のMSG.1(メッセージ型)及びMSG.3(メッセージ構造)フィールドから、以下の優先順位に従って固定応答ファイル格納ディレクトリを探索し、存在したファイルを応答メッセージとして返信します。

1. <MSG.3(メッセージ構造名)>.xml
2. <MSG.3(メッセージ構造名)>.er7
3. <MSG.1(メッセージ型名)>.xml
4. <MSG.1(メッセージ型名)>.er7
5. default.xml
6. default.er7

固定応答メッセージのフィールドの以下の値は、要求メッセージの値、あるいはESBで生成した値が設定されます。
固定応答メッセージ中に記述した値は無視されます。
表2.9.12.15-1
フィールド
説明

MSH-3
送信アプリケーション
受信メッセージのMSH-5の値を使用します。
MSH-4
送信施設
受信メッセージのMSH-6の値を使用します。
MSH-5 受信アプリケーション 受信メッセージのMSH-3の値を使用します。
MSH-6 受信施設 受信メッセージのMSH-4の値を使用します。
MSH-7 メッセージ日時 MSHセグメントの設定[メッセージ日時フォーマット]の書式を使用し、日時を設定します。
MSH-10 メッセージ制御ID MSHセグメントの設定[メッセージ日時フォーマット]の書式を使用し、日時を設定します。
MSA-1 肯定応答コード 常に「AA」を設定します。
MSA-2 メッセージ制御ID 受信メッセージのMSH-10の値を使用します。

2.9.12.16. シーケンス番号プロトコル

シーケンス番号プロトコルを使用して、シーケンス番号の情報を含めた要求メッセージを送信する事により、トランザクションの重複を防ぐ事ができます。
シーケンス番号プロトコルを利用するためには、HL7 BCの設定の他にデータベースの設定を行う必要があります。
ここでは、データベースの設定方法について説明します。

データベースの用意

シーケンス番号をESBで管理するために、出力先としてのデータベースを用意する必要があります。

サポートするデータベースは以下の通りです。

JDBCドライバの配置

ドメインが起動されているときは、一旦終了します。
データベースのドライバライブラリを、<INSTANCE_ROOT>/lib/ext へコピーします。

データベース名

JDBCドライバ

Oracle 11g

ojdbc5.jar、ojdbc6.jar、orai18n.jar

Microsoft SQL Server 2008 R2

sqljdbc.jar

Apache Derby 10.5.3.0

derbyclient.jar

JDBCデータソースの登録

シーケンス番号をデータベースに出力するために使用するJDBCデータソースをWebOTX統合運用管理ツールを用いて登録します。

統合運用管理ツールの画面上で設定対象のドメイン(例えば[domain1])-[リソース]をクリックします。次に「JDBCデータソース」を右クリックして「JDBCデータソースの登録」を選択します。

「リソースの操作」画面が開きます。この画面を用いてJDBCデータソースを登録します。このとき、次の1点のチェックを解除してから登録します。

「一般」タグの「JTA連携有無」のチェックを解除します。

 

otxadminコマンドでJDBCデータソースを登録することもできます、詳細はWebOTXマニュアル[ Application Server > リファレンス集 運用管理・設定編 > 4. 運用管理コマンドリファレンス > 4.2. 運用管理コマンド(otxadmin) > 4.2.2. コマンド検索一覧 ] よりcreate-jdbc-datasourceをご参照ください。

データベースのユーザ登録

シーケンス番号をデータベースに出力する際に使用するデータベースのユーザ登録を行います。

Oracleでは、以下のSQL文を実行します。「ユーザ名」の部分には前述のJDBCデータソースの登録で指定したユーザ名を指定します。
テーブル名の既定値は「ESN」です。異なる値を設定する場合は後述する追加の設定を行ってください。

SQL> CREATE USER ユーザ名 IDENTIFIED BY パスワード;
SQL> GRANT CREATE SESSION, unlimited tablespace TO ユーザ名;
SQL> CREATE TABLE ユーザ名.テーブル名 (ENDPOINTID VARCHAR(1000), ESN INTEGER, ESNSTATE INTEGER, primary key (ENDPOINTID));
SQL> GRANT SELECT, INSERT, UPDATE, DELETE ON ユーザ名.テーブル名 TO ユーザ名;

JNDIサーバへの登録名・ユーザ名・テーブル名を既定値から変更した場合の追加設定

運用管理ツールまたは運用管理コマンド(otxadmin)で、JNDI名またはテーブル名を既定値から変更してください。
詳細は[ リファレンス集 運用管理・設定・構成編 > 1. コンフィグレーション > 1.3. バインディングコンポーネントに関する設定 > 1.3.13. HL7 BC ]をご参照下さい。

テーブル・ユーザの削除

本手順により作成したテーブルはESBをアンインストールしても自動で削除されません。
ESBのアンインストール後は以下のSQL文を実行し、手動で削除してください。

SQL> DROP TABLE ユーザ名.テーブル名;
SQL> DROP USER ユーザ名;

Memo
SYSDBA権限を持ったアカウントで登録・削除が必要です。

クライアントからシーケンス番号「0」や「-1」を受信した場合や、Outboundで管理するシーケンス番号の値が20億を超えた場合に HL7 BCからクライアント/サーバにメッセージが送信されます。
各場合に送信されるメッセージについて以下に説明します。

クライアントから「0」「-1」を受信した場合

クライアントにACKメッセージを返信します。「-1」の場合はシーケンス番号をリセットします。
メッセージの各フィールドには以下の値が設定されます。表に記載の無いフィールドには値を設定しません。

表2.9.12.16-1
フィールド
説明

MSH-1
フィールド区切り
受信メッセージのMSH-1の値を使用します。
MSH-2
符号化文字
受信メッセージのMSH-2の値を使用します。
MSH-3
送信アプリケーション
受信メッセージのMSH-5の値を使用します。
MSH-4
送信施設
受信メッセージのMSH-6の値を使用します。
MSH-5 受信アプリケーション 受信メッセージのMSH-3の値を使用します。
MSH-6 受信施設 受信メッセージのMSH-4の値を使用します。
MSH-7 メッセージ日時 MSHセグメントの設定[メッセージ日時フォーマット]の書式を使用し、日時を設定します。
MSH-8 セキュリティ 受信メッセージのMSH-8の値を使用します。
MSH-9 メッセージ型 第1成分・第3成分は常に「ACK」を設定します。
第2成分は受信メッセージと同じ値を使用します。
MSH-10 メッセージ制御ID MSHセグメントの設定[メッセージ日時フォーマット]の書式を使用し、日時を設定します。
MSH-11 処理ID 受信メッセージのMSH-11の値を使用します。
MSH-12 バージョンID 受信メッセージのMSH-12の値を使用します。
MSH-13 シーケンス番号 受信メッセージのMSH-13の値を使用します。
SFT-1 〜 SFT-6 ソフトウェアセグメント SFTセグメントの設定に従って挿入・上書きします。
MSA-1 肯定応答コード 常に「AA」を設定します。
MSA-2 メッセージ制御ID 受信メッセージのMSH-10の値を使用します。
MSA-4 期待されるシーケンス番号 受信メッセージのMSH-13の値が「0」の場合、期待されるシーケンス番号の値を設定します。
HL7 BCがシーケンス番号を保持していない場合は「-1」が設定されます。
受信メッセージのMSH-13の値が「-1」の場合、「-1」が設定されます。
Outboundで管理するシーケンス番号が20億を超えた場合

サーバにシーケンス番号のリセット要求を送信します。 リセット後、シーケンス番号は「1」からスタートします。
メッセージの各フィールドには以下の値が設定されます。表に記載の無いフィールドには値を設定しません。

表2.9.12.16-2
フィールド
説明

MSH-1
フィールド区切り
受信メッセージのMSH-1の値を使用します。
MSH-2
符号化文字
受信メッセージのMSH-2の値を使用します。
MSH-3
送信アプリケーション
受信メッセージのMSH-5の値を使用します。
MSH-4
送信施設
受信メッセージのMSH-6の値を使用します。
MSH-5 受信アプリケーション 受信メッセージのMSH-3の値を使用します。
MSH-6 受信施設 受信メッセージのMSH-4の値を使用します。
MSH-7 メッセージ日時 MSHセグメントの設定[メッセージ日時フォーマット]の書式を使用し、日時を設定します。
MSH-8 セキュリティ 受信メッセージのMSH-8の値を使用します。
MSH-9 メッセージ型 受信メッセージのMSH-9の値を使用します。
MSH-10 メッセージ制御ID MSHセグメントの設定[メッセージ日時フォーマット]の書式を使用し、日時を設定します。
MSH-11 処理ID 受信メッセージのMSH-11の値を使用します。
MSH-12 バージョンID 受信メッセージのMSH-12の値を使用します。
MSH-13 シーケンス番号 常に「-1」を設定します。
SFT-1 〜 SFT-6 ソフトウェアセグメント SFTセグメントの設定に従って挿入・上書きします。

2.9.12.17. SFTセグメントの設定

要求/応答メッセージのSFTの処理を、「常に上書き」、「空であれば上書き」に設定する事で、
要求/応答メッセージに送信アプリケーションの情報を表すSFTセグメントを付加する事ができます。

SFTテンプレートファイルのSFT.1〜SFT.6の内容を修正する事で、付加するSFTセグメントの編集が可能です。
<?xml version="1.0" encoding="UTF-8"?>
<MSG>
     <SFT>
          <SFT.1>NEC Corporation</SFT.1>
          <SFT.2>1</SFT.2>
          <SFT.3>WebOTX Enterprise Service Bus</SFT.3>
          <SFT.4>1</SFT.4>
          <SFT.5></SFT.5>
          <SFT.6></SFT.6>
     </SFT>
</MSG>

2.9.12.18. MLLPハンドラ

HL7 BCでは、MLLP v1.0に準拠したMLLPハンドラを提供します。

MLLPハンドラでのメッセージ受信時は、外部アプリケーションからMLLPベースのメッセージを受け取り、 スタートブロック・エンドブロック等の制御文字を除去してHL7メッセージを抽出します。 また、メッセージ送信時は、HL7メッセージにスタートブロック・エンドブロック等の制御文字を付与して外部アプリケーションにメッセージを送信します。

MLLPベースのメッセージ構成:

<SB>[HL7メッセージ]<EB><CR>

<SB>:スタートブロック
<EB>:エンドブロック
<CR>:キャリッジリターン

<SB>や<EB>等の制御文字は設定によりユーザ独自の定義が可能です。制御文字やその他設定については[2.9.12.10. MLLPパラメータ詳細設定] を参照して下さい。
メッセージ受信処理

クライアントからデータを受信すると、MLLPに従ってHL7メッセージの抽出が行われます。<SB>が見つかるまでメッセージを読み飛ばし、 <SB>の直後からHL7メッセージとして扱います。 設定により<SB>が省略されている場合、受信したデータの先頭からHL7メッセージと見なします。
<EB><CR>が見つかるまで受信データを走査し、<EB><CR>の直前までをHL7メッセージとして切り出します。 <EB><CR>が見つかる前に再度<SB>が存在している場合、それまでに読み取ったデータを破棄し、直後のデータをHL7メッセージの先頭とします。

メッセージ送信処理

メッセージエクスチェンジからHL7メッセージを受け取り、先頭に<SB>、末尾に<EB><CR>を付与し、MLLPベースのHL7メッセージを作成します。 設定により<SB>が省略されている場合は、末尾に<EB><CR>だけを付与します。 その後、メッセージを外部アプリケーションに送信します。

メッセージダンプ機能

MLLPハンドラは、メッセージダンプ機能を持っています。この機能を有効にすることで、HL7 BCが外部アプリケーションに送受信したメッセージがログファイルに出力されます。 メッセージダンプ機能の利用方法については、[ リファレンス集 運用管理・設定・構成編 > 1. コンフィグレーション > 1.1. ドメインに関する設定 > 1.1.1. システム環境変数 ] を参照してください。