(58)【調査した分野】(Int.Cl.,DB名)
前記分離部は、前記受信部により受信された前記特定形式の電文を前記第1バッファに入力されるデータとして分離するときに、前記電文を前記データベースのスキーマに対応する形式に変更することを特徴とする請求項1から3のいずれかに記載の電文振分装置。
前記第2バッファは入力されたデータを前記電文振分装置と通信を行うサーバ装置に送信するためのバッファであることを特徴とする請求項1から4のいずれかに記載の電文振分装置。
【発明を実施するための形態】
【0011】
本発明を実施するための形態について、以下、複数の実施形態として説明を行う。なお、本発明は、以下の実施形態に限定して解釈されることはなく、以下の実施形態を変形して実施することも可能である。
【0012】
(実施形態1)
図1は、本実施形態に係る電文振分装置を含むシステムの機能ブロック図である。システム100は、電文振分装置101と、送信サーバ106と、通信網107と、データベース108と、モジュール109とを備える。
【0013】
電文振分装置101と送信サーバ106とは通信網107を介して接続される。送信サーバ106は電文を通信網107を介して電文振分装置101に送信する。例えば、金融業においては、送信サーバ106は日本銀行に設置されたサーバであり、電文振分装置101は金融機関のいずれかに設置されたサーバである。日本銀行は金融機関同士の間の資金決済を行い、送信サーバ106は資金決済の結果などを表わす電文を金融機関の電文振分装置101に対して通信網107を介して送信する。このときの電文の形式は、ISO20022により標準化された特定形式となっていてもよい。
【0014】
電文振分装置101は、受信部102と、分離部103と、第1バッファ104と、第2バッファ105とを有する。
【0015】
受信部102は、通信網107を介して送信サーバ106に接続されており、送信サーバ106から送信される電文を受信する。また、受信部102は、受信した電文を分離部103へ伝達する。受信した電文は、例えば上述したISO20022により標準化された形式となっていてもよい。また、受信部102が受信した電文を分離部103へ伝達する際には、電文の形式は受信されたときの形式のそのまま維持されて伝達されてよい。ただし、通信および伝達の物理的媒体に応じて物理的な面における形式は変換され、ISO20022の規格などによる論理的な面における電文の形式はそのままであってもよい。
【0016】
分離部103は、受信部102により受信された電文を、その電文の形式を維持して第2バッファ105に入力されるデータと、別の形式に変換して第1バッファ104に入力されるデータとに分離する。例えば、分離部103は、電文の形式がISO20022により標準化された形式に保たれたまま第2バッファ105に入力されるデータとして電文
を分離し、分離した電文の形式を保ったまま第2バッファ105に入力する。また、分離部103は、電文を別の形式に変換して第1バッファに入力されるデータを分離し、第1バッファに入力する。別の形式としては、データベース108のスキーマに適した形式を挙げることができる。例えば、データベース108の特定のテーブルに入力するためのINSERT文の形式が挙げられる。
【0017】
なお、分離部103が電文を分離する際、第1バッファ104に入力される電文と第2バッファ105に入力される電文とに重複があってもよい。例えば、分離部103は、受信部102により受信された電文の全てを第1バッファ104に入力し、受信部102により受信された電文の一部を第2バッファ105に入力してもよい。この場合は、第2バッファ105に入力される電文の集合が、第1バッファ104に入力される電文と第2バッファ105に入力される電文との重複となる。また、分離部103は、受信部102により受信された電文の全てを、第1バッファ104と第2バッファ105との両方に入力してもよい。この場合は、受信部102により受信された電文の全てが、第1バッファ104に入力される電文と第2バッファ105に入力される電文との重複となる。
【0018】
第1バッファ104は、データベース108に入力されるデータを保持する。データベース108は、例えばリレーショナルデータベースである。第1バッファ104に入力されたデータは、少なくともデータベース108に入力されるまで第1バッファ104により保持される。これにより、受信され第1バッファ104に入力されたデータを確実にデータベース108に入力することができる。第1バッファ104は、例えば、先入れ先出し(First In First Out)形式のキュー構造により実現することができる。
【0019】
第2バッファ105は、データベース108とは異なるモジュール109に入力されるデータを保持する。モジュール109は、他のコンピュータ(サーバ装置)へ電文を送信するための通信インタフェースを備えていてもよい。また、モジュール109は、電文振分装置101を構成するモジュールの一つとなっていてもよい。第2バッファ105も、第1バッファ104と同様に先入れ先出し(First In First Out)形式のキュー構造により実現することができる。これにより、他のコンピュータへ電文を送信する際、送信先のコンピュータの受信待ちが発生したとしても第2バッファ105を送信のためのバッファとして用いることができ、電文振分装置101と送信先とのコンピュータとの通信の帯域を効率よく使用することができる。
【0020】
なお、モジュール109は複数存在していてもよい。この場合には、モジュール109の数に応じてさらに第3バッファ、第4バッファなどを電文振分装置101が有していてもよい。この場合には、分離部103は、受信部102により受信された電文を、形式を維持して、第2バッファ、第3バッファ、第4バッファなどに入力されるデータに分離してもよい。
【0021】
図2は、本実施形態に係る電文振分装置101の動作を説明するフローチャートである。電文振分装置101は、送信サーバ106が通信網107を介して送信する電文が受信可能になる都度、
図2に示すフローチャートの処理を行う。例えば、電文振分装置101がコンピュータを用いて実現される場合には、通信網107を介して電文が通信インタフェースにより受信されると割り込みが発生して実行されるプログラムの処理が
図2に示される処理となっていてもよい。
【0022】
ステップS201の処理として電文を受信する。例えば、通信インタフェースのキューに蓄積された電文を読み取ることにより、電文を受信する。ステップS202の処理として、電文を解析する。電文は特定形式を有する。例えば、電文の形式はXMLの形式であってもよい。電文が特定形式を有するので、その形式に従って解析を行うことが可能である。
【0023】
図3(A)は、電文の一例を示す。この例では、電文は、XMLによる構造化文書の形式を有しており、「<電文>」のタグとこれに対応する「</電文>」のタグ、「<種類>」のタグとこれに対応する「</種類>」のタグ、「<あて先>」のタグとこれに対応する「</あて先>」のタグ、「<送信日>」のタグとこれに対応する「</送信日>」のタグを有する形式となっている。このようなXMLの形式を有する場合には、タグの対応関係を考慮して解析を行うことが可能である。
【0024】
例えば、
図3(A)に示す電文の一例を解析することにより、
図3(B)に示すパース木を得ることができる。ノード301(ルートノード)は、「<電文>」のタグとこれに対応する「</電文>」のタグで囲まれた部分に対応する。ノード302は、「<種類>」のタグとこれに対応する「</種類>」のタグで囲まれた部分に対応する。そして、ノード312が、「電文1」に対応する。ノード303は、「<あて先>」のタグとこれに対応する「</あて先>」のタグで囲まれた部分に対応する。そして、ノード313が、「あて先1」に対応する。ノード304は、「<送信日>」のタグとこれに対応する「</送信日>」のタグで囲まれた部分に対応する。そして、ノード314が、「2012年6月7日」に対応する。
【0025】
ステップS202においては、例えば、
図3(B)に示すパース木を生成し、ルートノードであるノード301から末端のノードにいたる経路を選択し、解析を行うことができる。
【0026】
ステップS203においては、ステップS202の解析に基づいて、電文を第2バッファに入力するべきかどうかについて判断する。もし、第2バッファ105に入力するべきと判断されれば、ステップS204に処理を移行させて、電文を第2バッファ105に入力する。もし、第2バッファ105に入力するべきでないと判断されれば、ステップS204をスキップする。
【0027】
ステップS203の判断は、例えば
図3に示すテーブルを参照し、ノード302に接続されるノード312が対応する値に応じて行うことができる。すなわち、「<種類>」のタグとこれに対応する「</種類>」のタグで囲まれた部分が「電文1」であれば、分離先の列の値が2となっているので、第2バッファに入力するべきと判断を行う。また、「電文2」であれば、分離先の列の値が1であり、2ではないので、第2バッファに入力するべきではないと判断を行う。
【0028】
ステップS205において、別の形式に変換する。例えば、データベース108のスキーマに対応する形式に変更する。すなわち、データベース108に、
図3(C)に示すテーブルが定義されているとする。そのテーブルの列としては、「種類」の列322、「あて先」の列323、…、「送信日」の列324が定義されており、これらがそれぞれ「<種類>」、「<あて先>」、…、「<送信日>」のタグに対応しているとすると、
INSERT INTO テーブル(種類、あて先、…、送信日) VALUES ("電文1"、"あて先1"、…、"2012年6月7日");
というSQLのINSERT文の形式に変換する。
【0029】
ステップS206の処理として、ステップS205により変換された電文を、第1バッファ104に入力する。
【0030】
なお、上述したように、モジュールが複数存在しその数に応じて、第3バッファ、第4バッファなどを電文振分装置101が有している場合には、ステップS202の解析に基づいて、ステップS203においては、第2バッファに入力するべきかどうかに加えて、第3バッファ、第4バッファなどにも入力するべきかどうかを判断し、ステップS204にいては、入力するべきと判断されたバッファに電文を入力する。
【0031】
また、ステップS205およびS206の処理は、ステップS201の後の任意の時点で実行するようにすることもできる。
【0032】
以上のように、本実施形態によれば、受信した電文をデータベースに格納し、電文が必要な部門に対応するモジュールに分離し入力を行って振り分ける処理を行うことができる。この場合、モジュールには、データベースを経由しないで入力を行って振り分けることができるので、高速に処理を行うことができる。また、データベース管理システムに障害が発生しても、電文が必要な部門に振り分ける処理を続行することが可能となる。
【0033】
(実施形態2)
本発明の実施形態2として、受信した電文をデータベースとは別に記録することが可能な形態について説明する。
【0034】
図5は、本発明の実施形態2に係るシステムの機能ブロック図である。システム500は、電文振分装置501と、送信サーバ106と、通信網107と、データベース108と、モジュール109とを備える。なお、実施形態1と同じまたは同様の機能を有する部分には、同じ符号を用いているので、同じ符号を有する部分の説明は以下では省略する。
【0035】
電文振分装置501は、受信部102と、分離部103と、第1バッファ104と、第2バッファ105と、記録部502とを有する。
【0036】
記録部502は、受信部102により受信される電文を記録する。例えば、受信部102により電文が受信されるときのパケットの構造をそのまま記録してもよい。あるいは、受信部102が、受信した電文を分離部103に伝達するときの情報の形式として記録を行ってもよい。また、必要に応じて、受信日時などの情報を付加したり、電文のヘッダやフッタなどの情報を削除したり、形式を変更して記録を行ってもよい。
【0037】
記録部502は、電文を永続的に記録するのが好ましい。このため、記録部502は揮発性メモリのみを用いて記録するのではなく、ハードディスクなどを用いて電磁気的あるいは光学的などの手段により電文を記録するのが好ましい。
【0038】
図6は、本実施形態に係る電文振分装置501の処理の流れを説明するフローチャートである。
図2に示したフローチャートの処理と同様に、ステップS201の処理として、電文を受信する。次に、ステップS601の処理として、記録部502に受信した電文を記録する。例えば、記録部502に、受信した電文を伝達し、記録部502に電文を記録させる。
【0039】
図7は、記録部502が電文を記録するデータ構造の一例を示す。例えば、電文が受信された順序を示す「番号」の列と、受信した電文が格納される「電文」の列を有するテーブルを用いることができる。「番号」の列の代わりに、受信日時や記録日時が格納される列が用いられてもよい。
【0040】
次のステップS202以降は
図2のフローチャートと同様なので説明を省略する。
【0041】
なお、モジュールが複数存在しその数に応じて、第3バッファ、第4バッファなどを電文振分装置501が有している場合には、ステップS202の解析に基づいて、ステップS203においては、第2バッファに入力するべきかどうかに加えて、第3バッファ、第4バッファなどにも入力するべきかどうかを判断し、ステップS204においては、入力するべきと判断されたバッファに電文を入力してもよいことなどは、実施形態1と同様である。
【0042】
同様に、ステップS205およびS206は、ステップS201の後の任意の時点で実行するようにすることができることも実施形態1と同様である。
【0043】
本実施形態においては、受信した電文をデータベース108に加えて記録部502にも記録を行うので、データの喪失にさらに備えることが可能となる。
【0044】
(実施形態3)
本発明の実施形態3として、記録部により記録された電文を用いてデータベースを復旧することができる形態について説明する。
【0045】
図8は、本発明の実施形態3に係るシステムの機能ブロック図である。システム800は、電文振分装置801と、送信サーバ106と、通信網107と、データベース108と、モジュール109とを備える。
【0046】
電文振分装置801は、受信部102と、分離部103と、第1バッファ104と、第2バッファ105と、記録部502と、復旧部802とを有する。
【0047】
復旧部802は、データベース108が障害を起こした場合に、記録部502に記録された電文を用いてデータベース108を復旧するための部である。
【0048】
復旧部802によるデータベース108の復旧の具体的手順の一例は、
図9に示すフローチャートに示す通りである。すなわち、ステップ901の処理として、データベース108のトランザクションログなどを参照し、障害が発生したときに存在していたトランザクションのロールバックを行う。ステップS902の処理として、ロールバックされた時点以降に記録部502に記録された電文を求める。電文が受信された順に記録部502に記録されているのであれば、障害の発生以降の最初に受信され記録された電文を求め、その電文以降に記録された電文を求める。
【0049】
ステップS903の処理として、ステップS902で求められた電文をデータベースに入力する。このとき、復旧部903は、分離部103のように、ステップS902で求められた電文を、別の形式に変換して第1バッファ104に電文を入力してもよい。また、復旧部802は、ステップS902で求められた電文を、分離部103が第1バッファ104に入力するように指定をして伝達してもよい。また、データベースに障害が発生した時点以降に、電文が第2バッファ105に入力されていなければ、受信部102が分離部103に電文を伝達するように、復旧部802は電文を分離部103に伝達してもよい。
【0050】
本実施形態では、
図9の処理を行っている間も、受信部102は電文を受信し、記録部502は、受信された電文を記録するようになっていてもよい。これにより、電文振分装置801を常時動作させることが可能となり、24時間365日の金融取引などが可能となる。