図1は、一実施形態に係る取引システムの構成例を示す図である。
図1には、通信ネットワーク2を利用した証券の取引(売買)が可能な取引システム1を示している。取引システム1は、複数の利用者システム3と、複数の売買システム4を含む。図1には、複数の利用者システム3のうち第1の利用者システム3A及び第2の利用者システム3Bの2つの利用者システム3を示している。また、図1には、複数の売買システム4のうち第1の売買システム4A及び第2の売買システム4Bの2つの売買システム4を示している。
利用者システム3は、売買システム4に対し証券の取引(売買)を注文し、該注文に対する結果を売買システム4から取得する処理を行う装置群である。利用者システム3は、通信ネットワーク2を介して、複数の売買システム4と通信可能に接続される。利用者システム3は、例えば、証券会社のような証券取引を仲介又は代行する業者や機関投資家等のオペレータが取引に利用するシステムである。
利用者システム3は、複数の端末装置5と、サーバ装置6とを含む。図1には、複数の端末装置5のうち第1の端末装置5A及び第2の端末装置5Bの1つの端末装置を示している。なお、図1では省略しているが、第2の利用者システム3Bは、第1の利用者システム3Aと同様、複数の端末装置5と、サーバ装置6とを含む。
端末装置5は、証券を取引する注文の入力を受け付けてサーバ装置6に対して発注を依頼する処理、及び取引結果を出力する処理を行う。端末装置5は、例えば、証券会社や機関投資家等のオペレータが注文の入力に利用する装置であり、利用者プログラムと、API(Application Programming Interface)とを含む。サーバ装置6は、端末装置5からの注文(発注依頼)に基づいて電文を作成し該電文を所定の売買システム4に送信する処理、及び売買システム4から受信した電文に含まれる取引結果を端末装置5に通知する処理を行う。以下の説明では、サーバ装置6が売買システム4に送信する電文を「上り電文」或いは「送信電文」という。また、以下の説明では、サーバ装置6が売買システム4から受信する電文を「下り電文」或いは「受信電文」という。
売買システム4は、利用者システム3からの上り電文に含まれる注文、或いは売買システム4自身が備える端末装置(図示せず)により入力された注文に応じて、証券の取引(売買)に関する各種処理を行う装置群である。売買システム4は、例えば、証券の取引を実施する機関(証券取引所等)が提供する。本実施形態に係る取引システム1における複数の売買システム4は、それぞれ、既知の構成でよい。このため、本明細書では、売買システム4についての詳細な説明は省略する。なお、売買システム4は、利用者システム3からの上り電文に応じた取引を行い、該取引の結果を含む下り電文を作成して利用者システム3に送信する外部装置の一例である。
図2は、取引システムで行われる処理を説明するシーケンス図である。図3は、発注依頼、上り電文、下り電文、及び通知データの例を示す図である。
本実施形態に係る取引システム1では、端末装置5に取引の注文に関する情報を入力すると、端末装置5がサーバ装置6に発注依頼を送信する。例えば、図2の第1の端末装置5Aは、注文の入力を受け付けると、サーバ装置6に発注依頼を送信する発注処理(ステップS1)を行う。第1の端末装置5Aからの発注依頼を受信すると、サーバ装置6は、発注依頼に基づいて上り電文を作成し売買システム4(図2では第1の売買システム4A)に送信する処理を含む上り電文処理(ステップS2)を行う。ステップS1の発注処理では、第1の端末装置5Aは、例えば、図3の(a)に示したような、注文ID、銘柄、数量、及び金額指定の4つの項目についての項目の名称及び値を含む発注依頼10を作成してサーバ装置6に送信する。注文IDは、第1の端末装置5Aにおいて発注依頼を送信した注文を一意に識別する項目である。銘柄は取引を行う証券の銘柄を指定する項目であり、数量は買う数或いは売る数を指定する項目である。金額指定は買値或いは売値を指定する項目であり、指値注文(金額を指定する注文)の場合には金額を示す数値が入力され、成行注文(金額を指定しない注文)の場合には成行注文であることを示す情報(例えば「成行」という文字列)。そして、発注依頼10を受信したサーバ装置6は、該発注依頼に基づいて、図3の(a)に示したような上り電文11を作成する。上り電文11は、第1の項目1101から第6の項目1106までの6つの項目を含む。第1の項目1101はサーバ装置6が売買システム4に送信した上り電文を一意に識別する通し番号(送信電文通番)を示す項目であり、第2の項目1102は上り電文を送信した時刻を示す項目である。第3の項目1103、第4の項目1104、第5の1105、及び第6の項目1106は、それぞれ、発注依頼10に含まれる注文ID、銘柄、数量、及び金額指定を示す項目である。サーバ装置6が作成する上り電文11における第1の項目1101から第6の項目1106までの6つの項目は、それぞれ、項目の名称及び値を含む。
また、図2では省略しているが、第2の端末装置5Bが発注処理(ステップS1’)を行ってサーバ装置6に発注依頼を送信した場合、サーバ装置6は、第1の端末装置5Aからの発注依頼に対する上り電文処理(ステップS2)とは別個に、第2の端末装置5Bからの発注依頼に対する上り電文処理を行う。
サーバ装置6からの上り電文を受信した第1の売買システム4Aは、図2のように、上り電文に含まれる各項目の値に基づいて証券の取引(売買)をし、取引の結果を示す下り電文をサーバ装置に送信する売買処理(ステップS3)を行う。
第1の売買システム4Aからの下り電文を受信すると、サーバ装置6は、該下り電文に含まれる取引の結果を通知する端末装置5を特定し、特定した端末装置5に取引の結果(通知データ)を送信する処理を含む下り電文処理(ステップS4)を行う。図3の(b)のように、サーバ装置6が受信する下り電文12は、第1の項目1201から第7の項目1207までの7つの項目を含む。第1の項目1201は売買システム4が作成した下り電文12を一意に識別する通し番号を示す項目であり、第2の項目1202は売買システム4が下り電文12を送信した時刻を示す項目である。第3の項目1203は、該売買システム4が行った取引の結果を一意に識別するID(約定ID)を示す項目である。第4の項目1204、第5の項目1205、及び第6の項目1206は、それぞれ、下り電文12と対応する上り電文11における注文ID(第3の項目1103)、銘柄(第4の項目1104)、及び数量(第5の項目1105)を示す項目である。第7の項目1207は、買った金額或いは売った金額を示す項目である。下り電文12における第1の項目1201から第7の項目1207までの7つの項目は、それぞれ、項目の名称と値とを含む。下り電文12を受信したサーバ装置6は、図3の(b)に示したような、約定ID、注文ID、銘柄、数量、及び金額の5つの項目についての項目の名称及び値を含む通知データ13を作成し、第1の端末装置5Aに送信する。
また、本実施形態の取引システム1におけるサーバ装置6は、後述するマッチング定義及び電文ログに基づいて、取引の結果(通知データ13)を送信する端末装置5を特定する。
サーバ装置6からの通知データを受信した第1の端末装置5Aは、該通知データに含まれる取引の結果を出力する出力処理(ステップS5)を行う。
なお、発注依頼10、上り電文11、下り電文12、及び通知データ13のそれぞれにおける項目の名称は、図3の(a)及び(b)に示したような名称そのものを表す文字列に限らず、項目の名称と対応付けられたコードであってもよい。
この種のサーバ装置6では、予め作成しておいた静的な定義に基づいて、下り電文12に含まれる取引結果を通知する端末装置5を特定する。しかしながら、従来のサーバ装置6において参照する静的な定義には、電文内の項目の値、売買システム4を識別する値、及び端末装置5を識別する値等が利用されている。このような項目等の値を利用した静的な定義に基づいて取引結果(通知データ13)の通知先となる端末装置5を特定する場合、値に変更が生じる毎に、都度サーバ装置6の動作を停止させ静的な定義を変更する必要がある。
これに対し、本実施形態に係るサーバ装置6では、以下のように、電文内の項目の名称を静的な定義として利用し取引結果を通知する端末装置5を特定する。
図4は、一実施形態に係るサーバ装置の機能的構成を示す図である。
図4のように、本実施形態に係るサーバ装置6は、上り電文処理部610と、下り電文処理部620と、データ送受信部630と、電文送受信部640と、記憶部690とを含む。
上り電文処理部610は、端末装置5からの発注依頼に基づいて売買システム4に送信する電文(上り電文)を作成するとともに、作成した上り電文についてのログを編集して記憶部690の電文ログ692に格納する。上り電文処理部610は、電文作成部611と、第1のログ編集部612とを含む。電文作成部611は、端末装置5からの発注依頼に基づいて、図3の(a)に示したような上り電文11を作成する。第1のログ編集部612は、記憶部690のマッチング定義691に格納された定義(項目の名称)に基づいて上り電文内の所定の項目の名称及び値を取り出す。また、第1のログ編集部612は、上り電文から取り出した項目の名称及び値と、発注依頼を送信した端末装置5を識別可能な項目の名称及び値とを含むログを電文ログ692に格納する。本実施形態では、図2のように、端末装置5を識別する項目の名称を「利用者番号」とする。
下り電文処理部620は、売買システム4から受信した電文(下り電文)についてのログを編集して電文ログ692に格納するとともに、受信した下り電文に含まれる取引結果を通知する端末装置5を特定し、更に下り電文から取引結果を抽出して端末装置5に通知する通知データを作成する。下り電文処理部620は、第2のログ編集部621と、通知データ作成部622とを含む。第2のログ編集部621は、マッチング定義691に格納された定義(項目の名称)に基づいて下り電文内の所定の項目の名称及び値を取り出す。また、第2のログ編集部621は、マッチング定義691に定義された項目の名称と下り電文から取り出した項目の値とに基づいて下り電文と対応する上り電文についてのログを電文ログ692から抽出し、該ログに含まれる端末装置5を示す項目の名称(利用者番号)及び値を取り出す。更に、第2のログ編集部621は、下り電文から取り出した項目の名称及び値と、電文ログ692から取り出した端末装置5を識別可能な項目の名称(利用者番号)及び値とを含むログを電文ログ692に格納する。加えて、第2のログ編集部621は、電文ログ692から取り出した項目(利用者番号)の値に基づいて、通知データを送信する端末装置5を特定する。
データ送受信部630は、端末装置5からの発注依頼の受信、及び端末装置5への通知データの送信を行う。電文送受信部640は、売買システム4への上り電文の送信、及び売買システム4からの下り電文の受信を行う。
記憶部690は、マッチング定義691及び電文ログ692を含む各種情報を記憶する。記憶部690は、マッチング定義691を格納する定義格納部(図示せず)、電文ログ692を格納するログ格納部(図示せず)、編集用バッファ693、及び通知先バッファ694を含む。マッチング定義691には、予め定められた、電文から取り出す項目の名称と電文ログから取り出す項目の名称との対応関係を示す定義が複数登録されている。電文ログ692は、電文から取り出した項目の名称及び値と、端末装置5を示す項目の名称及び値とを含むログが格納されている。編集用バッファ693は、電文ログ692に格納するログに含める項目の名称及び値を一時的に保持する保持部である。通知先バッファ694は、通知データ作成部622が作成した通知データを送信する(通知する)端末装置5を示す情報(通知先利用者番号)を一時的に保持する保持部である。
図5は、マッチング定義の例を示す図である。
本実施形態のサーバ装置6における第1のログ編集部612及び第2のログ編集部621が参照するマッチング定義691は、図5のように、電文内の項目の名称と、電文ログ内の項目の名称との対応関係を示す定義が複数登録されている。電文内の項目の名称は、電文ログ692に格納するログを編集する際に各電文から取り出す項目の名称である。ここで、マッチング定義691に登録する電文内の項目の名称は、図5のように、電文を一意に識別可能な値が割り当てられ、かつ該値が他の電文にも含まれる項目の名称とする。また、電文ログ内の項目の名称は、対応する電文内の項目の名称が電文に含まれる場合に電文ログから取り出す項目の名称である。電文ログ内の項目の名称は、第2のログ編集部621が端末装置5の利用者番号を含むログを電文ログ692内で探索する際に参照する。
なお、マッチング定義691は、電文ログ内の項目の名称が登録されていない定義と、電文ログ内の項目の名称が登録されている定義とを含む。例えば、図5のマッチング定義691に格納された第1の定義D1から第5の定義D5までの5個の定義のうち、第1の定義D1及び第4の定義D4は、電文ログ内の項目の名称が登録されていない。電文ログ内の項目の名称が登録されていない定義は、下記(1)の処理にのみ利用される。これに対し、第2の定義D2、第3の定義D3、及び第5の定義D5のように電文ログ内の項目の名称が登録されている定義は、下記(1)及び(2)の2つの処理に利用される。
(1)第1のログ編集部612及び第2のログ編集部621のそれぞれが行う、電文ログ692に格納する項目の名称及び値を電文内で探索する処理。
(2)第2のログ編集部621が行う、取引結果を通知する端末装置5の利用者番号を含むログを電文ログ692内で探索する処理。
例えば、「関連電文通番=送信電文通番」という第2の定義D2は、名称が「関連電文通番」である項目を上り電文内で探索する処理、及び名称が「関連電文通番」である項目を下り電文内で探索する処理に利用される。また、第2の定義D2は、名称が「送信電文通番」であり、かつ値が下り電文から取り出した「関連電文通番」という名称の項目の値である項目を含むログを電文ログ内で探索する処理に利用される。
なお、マッチング定義691における項目の名称は、図5に示した名称に限らず、取引システム1で送受信する電文に適用する通称、略称、及びコード等であってもよい。
図6は、電文ログの例を示す図である。
図6のように、本実施形態に係るサーバ装置6が保持する電文ログ692は、マッチング定義691に基づいて電文から取り出した項目の名称及び値と、該電文と対応する発注依頼を送信した端末装置5を示す項目の名称(利用者番号)及び値とを含むログL1,L2,及びLnが格納されている。なお、図6の電文ログ692は、左右方向に並んだ3個の項目についての項目の名称及び値の組が1つの電文に対するログとなっている。また、図6の電文ログ692内のログは、格納した順に並んでおり、1行目(最上位)のログL1が古いログとなっている。
例えば、図6の電文ログ692における1行目のログL1は、図3の(a)に示した上り電文11についてのログである。図3の(a)に示した上り電文11には、マッチング定義691に格納された5個の定義D1〜D5における電文内の項目の名称のうち、「送信電文通番」及び「注文ID」の2つの名称の項目が含まれる。また、上り電文11と対応する発注依頼を送信した端末装置5が図2の第1の端末装置5Aである場合、第1の端末装置5Aを識別する利用者番号の値は「1」である。このため、ログL1は、「送信電文通番=1」、「注文ID=P1_001」、及び「利用者番号=1」の、3個の項目についての項目の名称及び値を含む。
また、例えば、図6の電文ログ692におけるログLnは、図3の(b)に示した下り電文12についてのログである。図3の(b)に示した下り電文12には、マッチング定義691に格納された5個の定義D1〜D5における電文内の項目の名称のうち、「注文ID」及び「約定ID」の2つの名称の項目が含まれる。また、下り電文12における第4の項目1204は「注文ID=P1_001」となっている。更に、ログLnよりも前に電文ログ692に格納されたログのうち「注文ID=P1_001」という項目を含むログは1行目のログL1であり、該ログL1は「利用者番号=1」という項目を含む。このため、ログLnは、「注文ID=P1_001」、「約定ID=E001」、及び「利用者番号=1」の、3個の項目についての項目の名称及び値を含む。
本実施形態のサーバ装置6は、図2に示したように、端末装置5からの発注依頼を受け付けると、上り電文を作成して売買システム4に送信する処理を含む上り電文処理(ステップS2)を行う。また、本実施形態のサーバ装置6は、上り電文を作成すると、上記のように作成した上り電文についてのログを編集して電文ログ692に格納する。すなわち、本実施形態のサーバ装置6が行う上り電文処理は、作成した上り電文についてのログを編集して電文ログ692に格納する処理を含む。このため、本実施形態のサーバ装置6は、図2の上り電文処理(ステップS2)として、図7のフローチャートに沿った処理を行う。なお、図7のフローチャートに沿った上り電文処理は、サーバ装置6の上り電文処理部610と電文送受信部640とが連携して行う。
図7は、上り電文処理の内容を説明するフローチャートである。
サーバ装置6は、端末装置5から発注依頼を受け付けると、該発注依頼に対する上り電文処理を開始する。上り電文処理を開始したサーバ装置6は、図7のように、まず、編集用バッファ693内に項目の名称及び値を保持する領域を確保し該領域を初期化する(ステップS21)。ステップS21の処理は、例えば、サーバ装置6の上り電文処理部610における第1のログ編集部612が行う。
次に、上り電文処理部610は、受け付けた発注依頼に基づいて、売買システム4に送信する上り電文を作成する(ステップS22)。ステップS22の処理は、上り電文処理部610の電文作成部611が行う。電文作成部611は、既知の電文作成方法に従って、図3の(a)に示したような上り電文11を作成する。
上り電文の作成を終えると、サーバ装置6は、電文ログ692に格納するログを編集する上り電文ログ編集処理(ステップS23)を行う。ステップS23の上り電文ログ編集処理は、上り電文処理部610の第1のログ編集部612が行う。第1のログ編集部612が行う上り電文ログ編集処理は、マッチング定義691に基づいて上り電文内の項目の名称及び値を取り出し編集用バッファ693に追加する処理と、発注依頼を送信した端末装置5を識別する項目の名称(利用者番号)及び値を編集用バッファ693に追加する処理とを含む。
上り電文ログ編集処理を終えると、上り電文処理部610は、次に、編集用バッファ693で保持しているデータ(すなわち項目の名称及び値の組)を、上り電文に対する1個のログとして電文ログ692に格納する(ステップS24)。ステップS24の処理は、上り電文処理部610の第1のログ編集部612が行う。第1のログ編集部612は、例えば、送信電文通番、注文ID、及び利用者番号の3つの項目のそれぞれについての名称及び値が所定の順序で並ぶログを、電文ログ692に格納する(図6を参照)。
電文ログ692にログを格納した後、上り電文処理部610は、作成した上り電文を所定の宛先(売買システム4)に向けて送信する(ステップS25)。ステップS25の処理は、上り電文処理部610の電文作成部611と、電文送受信部640とが連携して行う。電文作成部611は、作成した上り電文を電文送受信部640に転送する。電文送受信部640は、例えば、端末装置5から発注依頼とともに送信される送信先情報(宛先情報)に基づいて、上り電文を送信する売買システム4を決定し、決定した売買システム4に向けて上り電文を送信する。上り電文を送信すると、サーバ装置6は、1つの発注依頼に対する上り電文処理を終了する。
なお、本実施形態のサーバ装置6における上り電文処理部610は、複数の端末装置5のそれぞれからの発注依頼を受け付ける毎に、それぞれの発注依頼に対する上り電文処理を行う。例えば、上り電文処理部610は、第1の端末装置5Aからの発注依頼に応じて上り電文処理を行っているときに第2の端末装置5Bからの発注依頼を受け付けた場合には、第1の端末装置5Aからの発注依頼に応じた上り電文処理と並行して、第2の端末装置5Bからの発注依頼に応じた上り電文処理を行う。
このように、本実施形態のサーバ装置6における上り電文処理部610は、上り電文を作成して売買システム4に送信する際に、マッチング定義691に基づいて該上り電文についてのログを編集する上り電文ログ編集処理(ステップS23)と、編集したログを電文ログ692に格納する処理(ステップS24)とを行う。本実施形態に係るサーバ装置6における上り電文処理部610は、上り電文ログ編集処理(ステップS23)として、図8のフローチャートに沿った処理を行う。なお、図8のフローチャートに沿った上り電文ログ編集処理は、サーバ装置6の上り電文処理部610における第1のログ編集部612が行う。
図8は、上り電文ログ編集処理の内容を説明するフローチャートである。
上り電文ログ編集処理を開始すると、上り電文処理部610の第1のログ編集部612は、まず、マッチング定義691に登録された電文内の項目の名称と名称が一致する、上り電文内の項目の名称及び値を取り出すループ処理(図8のステップS2301〜S2306)を行う。
該ループ処理において、第1のログ編集部612は、まず、マッチング定義691内の定義を1つ読み込む(ステップS2301)。ステップS2301の処理では、第1のログ編集部612は、マッチング定義691に登録された複数の定義のうち、現在行っている上り電文ログ編集処理においてまだ読み込みをしていない定義の1つ(1レコード)を選択して読み込む。なお、1つの上り電文に対する上り電文ログ編集処理において複数回行われるステップS2301の処理のうち2回目以降の処理では、第1のログ編集部612は、1回前のステップS2301の処理の際に読み込んだ定義を破棄した後、新たな定義を1つ読み込む。
次に、第1のログ編集部612は、現在マッチング定義691から読み込んでいる定義における電文内の項目の名称と名称が一致する項目を上り電文内で探索する探索処理(ステップS2302〜S2304)を行う。当該探索処理は、定義における電文内の項目の名称と名称が一致する項目を上り電文から検出した場合、或いは上り電文内の全ての項目の名称が定義における電文内の項目の名称と一致しなかった場合に終了する。
探索処理において、第1のログ編集部612は、上り電文から1つの項目の名称及び値を取り出し(ステップS2302)、上り電文から取り出した項目の名称が定義における電文内の項目の名称と一致するか否かを判定する(ステップS2303)。ステップS2302の処理では、第1のログ編集部612は、取り出しの対象となる上り電文内の複数の項目のうち、現在行っている探索処理においてまだ取り出していない項目の1つを選択して取り出す。なお、1つの上り電文に対する上り電文ログ編集処理において複数回行われるステップS2302の処理のうち2回目以降の処理では、第1のログ編集部612は、1回前のステップS2302の処理の際に取り出した項目の名称及び値を破棄した後、新たな項目の名称及び値を取り出す。
項目の名称が一致した場合(ステップS2303;YES)、第1のログ編集部612は、探索処理を終了し、現在上り電文から取り出されている項目の名称及び値を編集用バッファ693に追加する(ステップS2305)。ステップS2305の処理を行った場合、第1のログ編集部612は、次に、現在行っているループ処理において読み込みの対象となる、マッチング定義691内の全ての定義を読み込んだか否かを判定する(ステップS2306)。
これに対し、項目の名称が一致していない場合(ステップS2303;NO)、第1のログ編集部612は、次に、現在行っている探索処理において取り出しの対象となる、上り電文内の全ての項目の名称及び値を取り出したか否かを判定する(ステップS2304)。取り出していない項目の名称及び値がある場合(ステップS2304;NO)、第1のログ編集部612は、ステップS2302以降の処理を行う。一方、全ての項目の名称及び値を取り出した場合(ステップS2304;YES)、第1のログ編集部612は、探索処理を終了する。上り電文内の全ての項目の名称が定義における電文内の項目の名称と一致せずに探索処理を終了した場合、第1のログ編集部612は、ステップS2305の処理を行わずにステップS2306の判定を行う。
現在行っている上り電文ログ編集処理において、マッチング定義691内にまだ読み込んでいない定義がある場合(ステップS2306;NO)、第1のログ編集部612は、上記のように、ステップS2301以降のループ処理を続ける。全ての定義を読み込んだ場合(ステップS2306;YES)、第1のログ編集部612は、上り電文内の所定の項目の名称及び値を取り出すループ処理(ステップS2301〜S2306)を終了する。
上記のループ処理(ステップS2301〜S2306)を終了すると、第1のログ編集部612は、次に、発注依頼を送信した端末装置5を示す項目の名称(利用者番号)及び値を編集用バッファ693に追加する(ステップS2307)。ステップS2307の処理では、第1のログ編集部612は、発注依頼を送信した端末装置5に割り当てられた利用者番号(識別番号)の値を取得し、「利用者番号」という名称と端末装置5に割り当てられた利用者番号の値とを含む項目を、編集用バッファ693に追加する。ステップS2307の処理を終えると、第1のログ編集部612は、上り電文ログ編集処理を終了する。上り電文ログ編集処理が終了すると、第1のログ編集部612は、図7のように、編集用バッファ693で保持しているデータ(ログ)を電文ログ692に格納する処理(ステップS24)を行う。
第1のログ編集部612がステップS23及びS24の処理を終えると、上り電文処理部610は、電文送受信部640と連携して、作成した上り電文を売買システム4に送信する。
本実施形態のサーバ装置6は、作成した上り電文を売買システム4に送信した後、売買システム4からの下り電文を受信すると、下り電文についてのログを電文ログ692に格納するとともに、下り電文に含まれる取引結果を端末装置5に通知する下り電文処理(ステップS4)を行う。本実施形態のサーバ装置6は、ステップS4の下り電文処理として、図9のフローチャートに沿った処理を行う。なお、図9のフローチャートに沿った下り電文処理は、サーバ装置6の下り電文処理部620とデータ送受信部630とが連携して行う。
図9は、下り電文処理の内容を説明するフローチャートである。
サーバ装置6は、下り電文を受信すると、該下り電文に対する下り電文処理を開始する。下り電文処理を開始したサーバ装置6は、図9のように、まず、編集用バッファ693内に項目の名称及び値を保持する領域を確保し該領域を初期化する(ステップS41)。ステップS41の処理は、例えば、サーバ装置6の下り電文処理部620における第2のログ編集部621が行う。
次に、サーバ装置6は、通信先バッファ694内に通知先利用者番号を保持する領域を確保し該領域を初期化する(ステップS42)。ステップS42の処理は、下り電文処理部620の第2のログ編集部621が行う。ステップS42において、第2のログ編集部621は、通信先バッファ694内の確保した領域の値を、空白、null、或いは利用者番号として取り得る値とは異なる値等の、端末装置5が特定されない未定値する。
次に、サーバ装置6は、電文ログ692に格納するログを編集する下り電文ログ編集処理(ステップS43)を行う。ステップS43の下り電文ログ編集処理は、下り電文処理部620の第2のログ編集部621が行う。第2のログ編集部621が行う下り電文ログ編集処理は、下記(1)〜(4)の4つの処理を含む。
(1)マッチング定義691に基づいて下り電文内の所定の項目の名称及び値を取り出し編集用バッファ693に追加する処理。
(2)マッチング定義691から読み込んだ定義における電文内の項目の名称と名称が一致する下り電文内の項目の値と、該定義における電文ログ内の項目の名称とに基づいて、下り電文内の取引結果を通知する端末装置5を示す利用者番号が含まれるログを電文ログから取り出す処理。
(3)電文ログ692から取り出したログに含まれる端末装置5を識別する項目の名称(利用者番号)及び値を抽出し、該項目の名称及び値を編集用バッファ693に追加する処理。
(4)電文ログ692から抽出した利用者番号の値を通知先利用者番号694に格納する処理。
下り電文ログ編集処理を終えると、下り電文処理部620は、次に、編集用バッファ693で保持しているデータ(すなわち項目の名称及び値の組)を、下り電文に対する1個のログとして電文ログ692に格納する(ステップS44)。ステップS44の処理は、下り電文処理部620の第2のログ編集部621が行う。第2のログ編集部621は、例えば、注文ID、約定ID、及び利用者番号の3つの項目のそれぞれについての名称及び値が所定の順序で並ぶログを、電文ログ692に格納する(図6を参照)。
電文ログ692にログを格納した後、下り電文処理部620は、端末装置5に通知する通知データを作成して端末装置5に通知する(ステップS45)。ステップS45の処理は、下り電文処理部620の通知データ作成部622と、データ送受信部630とが連携して行う。通知データ作成部622は、取引結果として端末装置5に通知する項目の名称及び値の組を下り電文12から抽出して所定の順番に並べた通知データ13を作成する(図3の(b)を参照)。データ送受信部630は、通知データ作成部622が作成した通知データ13を、通知先バッファ694に格納された通知先利用者番号により特定される端末装置5に送信する。通知データ13を送信すると、サーバ装置6は、受信した1つの下り電文に対する下り電文処理を終了する。
なお、本実施形態のサーバ装置6は、下り電文を受信する毎に、それぞれの下り電文に対する下り電文処理を行う。例えば、下り電文処理部620は、第1の下り電文に対する下り電文処理を行っているときに第2の下り電文を受信した場合には、第1の下り電文に対する下り電文処理と並行して、第2の下り電文に対する下り電文処理を行う。
このように、本実施形態のサーバ装置6における下り電文処理部620は、マッチング定義691及び下り電文から取り出した項目の値に基づいて下り電文と対応する発注依頼を送信した端末装置5を示す項目の名称(利用者番号)及び値を電文ログ692から抽出する処理を含む下り電文ログ編集処理を行う。更に、本実施形態に係るサーバ装置6における下り電文処理部620は、下り電文編集処理において電文ログ692から抽出した端末装置5を示す項目の値に基づいて、下り電文に含まれる取引結果を通知する端末装置5を特定する。本実施形態に係るサーバ装置6の下り電文処理部620は、下り電文ログ編集処理(ステップS43)として、図10のフローチャートに沿った処理を行う。なお、図10のフローチャートに沿った下り電文ログ編集処理は、サーバ装置6の下り電文処理部620における第2のログ編集部621が行う。
図10は、下り電文ログ編集処理の内容を説明するフローチャートである。
下り電文ログ編集処理を開始すると、下り電文処理部620の第2のログ編集部621は、図10のように、まず、下り電文から電文ログ692に格納する項目の名称及び値を取り出す処理と、下り電文に含まれる取引結果を通知する端末装置5を示す利用者番号を特定する利用者番号特定処理(ステップS4306)とを含むループ処理(ステップS4301〜S4307)を行う。
該ループ処理において、第2のログ編集部621は、まず、マッチング定義691内の定義を1つ読み込む(ステップS4301)。ステップS4301の処理では、ログ編集部622は、マッチング定義691に登録された複数の定義のうち、現在行っている下り電文ログ編集処理においてまだ読み込みをしていない定義の1つ(1レコード)を選択して読み込む。なお、1つの下り電文に対する下り電文ログ編集処理において複数回行われるステップS4301の処理のうち2回目以降の処理では、第2のログ編集部621は、1回前のステップS4301の処理の際に読み込んだ定義を破棄した後、新たな定義を1つ読み込む。
次に、第2のログ編集部621は、現在マッチング定義691から読み込んでいる定義における電文内の項目の名称と名称が一致する項目を上り電文内で探索する探索処理(ステップS4302〜S4304)を行う。当該探索処理は、定義における電文内の項目の名称と名称が一致する項目を下り電文から検出した場合、或いは下り電文内の全ての項目の名称が定義における電文内の項目の名称と一致しなかった場合に終了する。
探索処理において、第2のログ編集部621は、下り電文から1つの項目の名称及び値を取り出し(ステップS4302)、下り電文から取り出した項目の名称がマッチング定義691から読み込んだ定義における電文内の項目の名称と一致するか否かを判定する(ステップS4303)。ステップS4302の処理では、第2のログ編集部621は、取り出しの対象となる下り電文内の複数の項目のうち、現在行っている探索処理においてまだ読み込みをしていない項目の1つを選択して読み込む。なお、1つの下り電文に対する探索処理において複数回行われるステップS4302の処理のうち2回目以降の処理では、第2のログ編集部621は、1回前のステップS4302の処理の際に読み込んだ項目の名称及び値を破棄した後、新たな項目の名称及び値を読み込む。
項目の名称が一致した場合(ステップS4303;YES)、第2のログ編集部621は、探索処理を終了する。項目の名称が一致したことにより探索処理を終了した場合、第2のログ編集部621は、次に、下り電文から取り出した項目の名称及び値を編集用バッファ693に追加し(ステップS4305)、利用者番号特定処理(ステップS4306)を行う。ステップS4306の利用者番号特定処理は、マッチング定義691と、下り電文から取り出した項目の名称及び値と、電文ログ692とに基づいて、下り電文内の取引結果を通知する端末装置5を示す利用者番号を特定する処理を含む。また、利用者番号特定処理は、特定した利用者番号を示す項目の名称及び値を編集用バッファ693に追加する処理と、特定した利用者番号を通知先バッファ694に格納する処理とを含む。利用者番号特定処理の内容は、後述する。ステップS4305及びS4306の処理を終えると、第2のログ編集部621は、次に、現在行っているループ処理において読み込みの対象となっている、マッチング定義内の全ての定義を読み込んだか否かを判定する(ステップS4307)。
これに対し、項目の名称が一致していない場合(ステップS4303:NO)、第2のログ編集部621は、次に、現在行っている探索処理において取り出しの対象となる、下り電文内の全ての項目の名称及び値を取り出したか否かを判定する(ステップS4304)。取り出していない項目の名称及び値がある場合(ステップS4304;NO)、第2のログ編集部621は、ステップS4302以降の処理を行う。全ての項目を取り出した場合(ステップS4304;YES)、第2のログ編集部621は、探索処理を終了する。下り電文内の全ての項目の名称が定義における電文内の項目の名称と一致せずに探索処理を終了した場合、第2のログ編集部621は、ステップS4305及びS4306の処理を行わずにステップS4307の判定を行う。
現在行っている下り電文ログ編集処理において、マッチング定義691内にまだ読み込んでいない定義がある場合(ステップS4307;NO)、第2のログ編集部621は、ステップS4301以降のループ処理を続ける。全ての定義を読み込んだ場合(ステップS4307;YES)、第2のログ編集部621は、下り電文内の所定の項目の名称及び値を取り出すループ処理(ステップS4301〜S4307)を終了する。
上記のループ処理(ステップS4301〜S4307)を終了すると、第2のログ編集部621は、次に、通知先バッファ694を参照し、通知先利用者番号が未定値であるか否かを判定する(ステップS4308)。通知先利用者番号は、下り電文ログ編集処理を開始する前に初期化されており(図9を参照)、下り電文ログ編集処理の開始時には未定値となっている。しかしながら、下り電文ログ編集処理に含まれる利用者番号特定処理(ステップS4306)において利用者番号が特定されると、第2のログ編集部621は、特定した利用者番号を通知先バッファ694に格納する。すなわち、ループ処理(ステップS4301〜S4307)が終了した後で行われるステップS4308の判定処理において通知先利用者番号が未定値である場合、利用者番号特定処理において利用者番号(通知データを送信する端末装置5)を特定することができなかったこととなる。このため、通知先利用者番号が未定値である場合(ステップS4308;YES)、第2のログ編集部621は、名称が利用者番号である項目の値を所定の値とし、項目の名称(利用者番号)及び値を編集用バッファ693に追加するとともに、通知先利用者番号を該所定の値とする(ステップS4309)。ステップS4309で利用する所定の利用者番号の値は、例えば、複数の端末装置5のうち所定の端末装置5を示す値とする。ステップS4309の処理を終えると、下り電文処理部620の第2のログ編集部621は、下り電文ログ編集処理を終了する。
このように、サーバ装置6の下り電文処理部620が行う下り電文ログ編集処理は、マッチング定義691における電文ログ内の項目の名称と、下り電文から取り出した項目の値と、電文ログ692とに基づいて、利用者番号を特定する利用者番号特定処理(ステップS4306)を含む。利用者番号特定処理は、下り電文処理部620の第2のログ編集部621が行う。第2のログ編集部621は、利用者番号特定処理として、図11のフローチャートに沿った処理を行う。
図11は、利用者番号特定処理の内容を説明するフローチャートである。
利用者番号特定処理を開始すると、下り電文処理部620の第2のログ編集部621は、まず、現在読み込まれている定義に電文ログ内の項目の名称が登録されており、かつ通知先利用者番号が未定値であるか否かを判定する(ステップS43061)。第2のログ編集部621は、マッチング定義691に登録された電文ログ内の項目の名称を利用して電文ログ692内のログを探索し、下り電文の取引結果を通知する端末装置5を示す利用者番号の値を抽出する。マッチング定義691における1つの定義は、電文内の項目の名称と電文ログ内の項目の名称との対応関係を示す情報であるが、上記のように、電文ログ内の項目の名称が登録されていない定義もある(図5を参照)。このため、現在読み込まれている定義に電文ログ内の項目の名称がない場合、第2のログ編集部621は、電文ログ692を探索して利用者番号の値を特定することができない。また、通知先利用者番号が未定値ではない場合、既に利用者番号が特定されているので、改めて利用者番号を特定する処理を行う必要はない。このため、現在読み込まれている定義に電文ログ内の項目の名称がない、或いは通知先利用者番号が未定値ではない場合(ステップS43061;NO)、下り電文処理部620の第2のログ編集部621は、ステップS43062以降の処理を省略して利用者番号特定処理を終了する。
一方、電文ログ内の項目の名称が定義されており、かつ通知先利用者番号が未定値である場合(ステップS43061;YES)、第2のログ編集部621は、次に、名称が現在読み込まれている定義における電文ログ内の項目の名称であり、かつ値が現在下り電文から取り出している項目の値である項目を含むログを、電文ログ692内で探索する探索処理(ステップS43062〜S43066)を行う。該探索処理は、名称が定義における電文ログ内の項目の名称であり、かつ値が下り電文から取り出した項目の値である項目を検出した場合、或いは上記の条件を満たす項目が電文ログ692から検出されなかった場合に終了する。
探索処理において、第2のログ編集部621は、まず、電文ログ692から1つの電文に対するログ(1レコード)を読み込む(ステップS43062)。ステップS43062の処理では、第2のログ編集部621は、電文ログ692(図5を参照)に格納された複数のログのうち、現在行っている利用者番号特定処理においてまだ読み込んでいないログを1つ選択して読み込む。なお、1回の利用者番号特定処理における探索処理では、ステップS43062の処理を複数回行うことがある。ステップS43062の処理が複数回行われる場合、2回目以降の処理では、第2のログ編集部621は、例えば、1回前のステップS43062の処理の際に読み込んだログを破棄した後、新たなログを読み込む。
次に、第2のログ編集部621は、読み込んだログ内に、名称が定義における電文ログ内の項目の名称と一致し、かつ値が下り電文から取り出した項目の値と一致する項目を、読み込んだログ内で探索する処理(ステップS43063〜S43065)を行う。項目を探索する処理は、上記の条件を満たす項目を検出した場合、或いは読み込んだログ内の全ての項目が上記の条件を満たしていない場合に終了する。
ログ内の項目を探索する処理において、第2のログ編集部621は、まず、読み込んだログから1つの項目の名称及び値を読み込む(ステップS43063)。ステップS43063の処理では、第2のログ編集部621は、電文ログ692から読み出した1つのログに含まれる複数の項目のうち、現在行っている利用者番号特定処理においてまだ読み込んでいない項目を1つ選択し、該項目の名称及び値を読み込む。なお、1回の利用者番号特定処理における探索処理では、ステップS43063の処理を複数回行うことがある。ステップS43063の処理が複数回行われる場合、2回目以降の処理では、第2のログ編集部621は、例えば、1回前のステップS43063の処理の際に読み込んだ項目の名称及び値を破棄した後、新たな項目の名称及び値を読み込む。
次に、第2のログ編集部621は、ログから取り出した項目の名称がマッチング定義691から読み込んだ定義における電文ログ内の項目の名称と一致し、かつログから取り出した項目の値が下り電文から取り出されている項目の値と一致するか否かを判定する(ステップS43064)。
項目の名称が一致し、かつ項目の値が一致した場合(ステップS43064;YES)、第2のログ編集部621は、探索処理(ステップS43062〜S43066)を終了し、次に、現在読み込まれているログ内の名称が利用者番号である項目の名称及び値を取り出して編集用バッファ693に追加する(ステップS43067)。その後、第2のログ編集部621は、通信先利用者番号をログから取り出した利用者番号の値とし(ステップS43068)、利用者番号特定処理を終了する。
これに対し、項目の名称、又は項目の値が一致していない場合(ステップS43064;NO)、第2のログ編集部621は、次に、現在読み込まれているログにおいて取り出しの対象となる、ログ内の全ての項目を取り出したか否かを判定する(ステップS43065)。言い換えると、ステップS43065の判定処理では、第2のログ編集部621は、現在読み込まれているログ内に、ステップS43064の判定を行っていない項目の名称及び値が残っているか否かを判定する。ログ内に取り出していない項目がある場合(ステップS43065;NO)、第2のログ編集部621は、ステップS43063以降の処理を行う。
現在読み込まれているログ内の全ての項目を取り出した場合(ステップS43065;YES)、第2のログ編集部621は、次に、現在行っている利用者番号特定処理において読み込みの対象となる、電文ログ692内の全てのログを読み込んだか否かを判定する(ステップS43066)。電文ログ692内に読み込んでいないログがある場合(ステップS43066;NO)、第2のログ編集部621は、ステップS43062以降の探索処理を続ける。一方、電文ログ692内の全てのログを読み込んだ場合(ステップS43066;YES)、第2のログ編集部621は、探索処理(ステップS43062〜S43066)を終了し、利用者番号特定処理を終了する。
このように、本実施形態のサーバ装置6が行う利用者番号特定処理では、マッチング定義691に格納された電文内の項目の名称と名称が一致する下り電文内の項目の値と、マッチング定義691において該電文内の項目の名称と対応付けられた電文ログ内の項目の名称との組み合わせと一致する項目の名称及び値を含むログを、電文ログ692内で探索する。ここで探索して抽出されるログは、該ログにより特定される電文と対応する発注依頼を送信した端末装置5を示す項目の名称(利用者番号)及び値を含む。このため、サーバ装置6の下り電文処理部620における第2のログ編集部621は、電文内の項目の名称による定義が登録されたマッチング定義と、下り電文と、電文ログとに基づいて、下り電文の取引結果を通知する端末装置5を示す利用者番号の値を特定することが可能となる。しかも、マッチング定義における電文内の項目の名称及び電文ログ内の項目の名称は、予め定められたものであり、取引システム1内の端末装置5の数や売買システム4の数が変更された場合にも不変である。また、マッチング定義における電文内の項目の名称及び電文ログ内の項目の名称は、端末装置5で取り扱う銘柄の種類や売買システム4で取り扱う銘柄の種類が変更された場合にも不変である。従って、本実施形態に係るサーバ装置6は、端末装置5の数や売買システム4の数が変更された場合や、端末装置5で取り扱う銘柄の種類や売買システム4で取り扱う銘柄の種類が変更された場合にも、同一のマッチング定義691を継続して利用可能となる。すなわち、本実施形態に係るサーバ装置6は、データの送信先の特定に利用する静的な定義を変更する作業の頻度を低減することが可能となる。よって、本実施形態の取引システムでは、静的な定義を変更する作業により生じる動作停止期間を低減することが可能となる。よって、本実施形態に係るサーバ装置6を含む取引システム1は、サーバ装置6を介した取引を行うことのできない期間が低減し、端末装置5を利用して取引を行う利用者に対する利便性が向上する。
以下、本実施形態のサーバ装置6における上り電文処理部610の第1のログ編集部612が行う処理、及び下り電文処理部620の第2のログ編集部621が行う処理について具体的に説明する。
まず、図12A〜図12Fを参照し、上り電文処理部610の第1のログ編集部612が行う処理を具体的に説明する。なお、ここで例示する処理は、上り電文処理部610の上り電文作成部611が図3の(a)に示した上り電文11を作成したときに、第1のログ編集部612が図4のマッチング定義691を参照して行う処理とする。
図12Aは、第1のログ編集部が行う処理の具体例を説明する図(その1)である。図12Bは、第1のログ編集部が行う処理の具体例を説明する図(その2)である。図12Cは、第1のログ編集部が行う処理の具体例を説明する図(その3)である。図12Dは、第1のログ編集部が行う処理の具体例を説明する図(その4)である。図12Eは、第1のログ編集部が行う処理の具体例を説明する図(その5)である。図12Fは、第1のログ編集部が行う処理の具体例を説明する図(その6)である。
上り電文処理部610の第1のログ編集部612は、上記のように、上り電文作成部611が作成した上り電文11についてのログを編集する上り電文ログ編集処理(図7のステップS23)、及び編集したログを電文ログ692に格納する処理(図7のステップS24)を行う。上り電文処理部610の第1のログ編集部612は、上り電文ログ編集処理として、図8のフローチャートに沿った処理を行う。すなわち、上り電文ログ編集処理を開始した第1のログ編集部612は、まず、マッチング定義691内の定義を1つ読み込む(ステップS2301)。このとき、第1のログ編集部612は、例えば、図12Aのように、まず、マッチング定義691における最上位の行に登録された第1の定義D1(「送信電文通番=」)を読み込む。
次に、第1のログ編集部612は、名称がマッチング定義691から読み込んだ定義における名称「送信電文通番」と一致する項目の名称及び値を上り電文11内で探索する探索処理(ステップS2302〜S2304)を行う。図12Aに示したように、上り電文11は、先頭(左端)に位置する第1の項目1101が「送信電文通番=1」という項目となっている。このため、第1のログ編集部612は、ステップS2302で第1の項目1101の名称及び値(「送信電文通番=1」)を取り出したときに、項目の名称が一致する(ステップS2303;YES)と判定し、探索処理を終了する。探索処理を終了した後、第1のログ編集部612は、上り電文11から取り出した第1の項目1101の名称及び値(「送信電文通番=1」)を、編集用バッファ693に追加する(ステップS2305)。
第1の項目1101の名称及び値を編集用バッファ693に追加した後、第1のログ編集部612は、読み込みの対象となるマッチング定義内の全ての定義を読み込んだか否かを判定する(ステップS2306)。このとき、マッチング定義691内にはまだ読み出していない定義が残っている(ステップS2306;NO)。このため、第1のログ編集部612は、2回目のステップS2301の処理を行う。2回目のステップS2301の処理では、第1のログ編集部612は、例えば、図12Bのように、マッチング定義691における上から2行目に登録された第2の定義D2(「関連電文通番=送信電文通番」という定義)を読み出す。
次に、第1のログ編集部612は、名称が「関連電文通番」である項目を上り電文11内で探索する探索処理(ステップS2302〜S2304)を行う。しかしながら、上り電文11には名称が「関連電文通番」である項目が存在しない。このため、第1のログ編集部612は、上り電文11の第1の項目1101から第6の項目1106までの全ての項目の名称が「関連電文通番」とは一致しないと判定し、探索処理を終了する。このとき、第1のログ編集部612は、項目の名称及び値を編集用バッファ693に追加する処理(ステップS2305)は行わない。
名称が「関連電文通番」である項目を上り電文11内で探索する探索処理を終えると、第1のログ編集部612は、ステップS2306の判定を行う。このときも、マッチング定義691内にはまだ読み込んでいない定義が残っているので、第1のログ編集部612は、3回目のステップS2301の処理を行う。3回目のステップS2301の処理では、第1のログ編集部612は、例えば、図12Cのように、マッチング定義691における上から3行目に登録された第3の定義D3(「注文ID=注文ID」)を読み出す。
次に、第1のログ編集部612は、名称が「注文ID」である項目を上り電文11内で探索する探索処理(ステップS2302〜S2304)を行う。図12Cに示したように、上り電文11は、先頭から3番目に位置する第3の項目1103の名称が「注文ID」となっている。このため、第1のログ編集部612は、ステップS2302において第3の項目1103を取り出したときに、項目の名称が一致する(ステップS2303;YES)と判定し、探索処理を終了する。探索処理を終了した後、第1のログ編集部612は、第3の項目1103の名称及び値(「注文ID=P1_001」)を編集用バッファ693に格納する(ステップS2305)。
第3の項目の名称及び値を編集用バッファ693に格納した後、第1のログ編集部612は、ステップS2306の判定を行う。このときも、マッチング定義691内にはまだ読み込んでいない定義が残っているので、第1のログ編集部612は、4回目のステップS2401の処理を行う。4回目のステップS2401の処理では、第1のログ編集部612は、例えば、マッチング定義691における上から4行目に登録された第4の定義D4(「約定ID=」)を読み込む。しかしながら、上り電文11には名称が「約定ID」である項目が存在しない。このため、第1のログ編集部612は、上り電文11の第1の項目1101から第6の項目1106までの全ての項目の名称が「約定ID」とは一致しないと判定し、探索処理を終了する。
名称が「約定ID」である項目を上り電文11内で探索する探索処理を終えると、第1のログ編集部612は、ステップS2306の判定を行う。このときも、マッチング定義691内にはまだ読み込んでいない定義が残っているので、第1のログ編集部612は、5回目のステップS2301の処理を行う。5回目のステップS2301の処理では、第1のログ編集部612は、例えば、図12Dのように、マッチング定義691における上から5行目に登録された第5の定義D5(「元約定ID=約定ID」)を読み込む。しかしながら、上り電文11には名称が「元約定ID」である項目が存在しない。このため、第1のログ編集部612は、上り電文11の第1の項目1101から第6の項目1106までの全ての項目の名称が「元約定ID」とは一致しないと判定し、探索処理を終了する。
名称が「元約定ID」である項目を上り電文11内で探索する探索処理を終えると、第1のログ編集部612は、ステップS2306の判定を行う。このとき、第1のログ編集部612は、既にマッチング定義691内の5つの定義D1〜D5を全て読み込んでいる(ステップS2306;YES)。このため、第1のログ編集部612は、上り電文11から電文ログ692に格納する項目の名称及び値を取り出すループ処理を終了する。よって、該ループ処理を終了した時点で、図12Dのように、編集用バッファ693は、上り電文11から取り出した「送信電文通番=1」という第1の項目LE1、及び「注文ID=P1_001」という第2の項目LE2を保持している。
ステップS2301〜S2306のループ処理を終了すると、第1のログ編集部612は、次に、図12Eのように、発注依頼を送信した端末装置5を示す項目の名称(利用者端末)及び値を編集用バッファ693に追加する(ステップS2307)。ステップS2307の処理では、第1のログ編集部612は、上り電文11の作成及び送信の依頼(すなわち発注依頼)を送信した端末装置5を識別する項目の名称(利用者番号)及び値を、編集用バッファ693に追加する。例えば、発注依頼を送信した端末装置5が図2の第1の端末装置5Aである場合、第1のログ編集部612は、図12Eのように「利用者番号=1」という第3の項目LE3を編集用バッファ693に追加する。
以上の処理により、第1のログ編集部612による上り電文ログ編集処理(図7のステップS23)が終了する。この後、第1のログ編集部612は、図12Fに示すように、編集用バッファ693で保持しているデータ(項目の名称及び値の組)Lを読み出し、上り電文11に対するログL1として電文ログ692に格納する(ステップS24)。
上記の手順で上り電文11に対するログL1を電文ログ692に格納した後、上り電文処理部610は、電文送受信部640と連携し、作成した上り電文11を売買システム4に送信する。
上り電文11を受信した売買システム4は、上り電文11内の第4の項目1104(「銘柄=6702」)、第5の項目1105(「数量=1000」)、及び第6の項目1106(「金額指定=成行」)に応じた証券の売買取引を行う。その後、売買システム4は、取引の結果を通知する下り電文12を作成してサーバ装置6に送信する。このとき、サーバ装置6は、例えば、図3の(b)に示したような下り電文12を受信する。下り電文12を受信したサーバ装置6は、下り電文処理部620において受信した下り電文12に対する下り電文処理を行い、取引の結果を端末装置5に通知する。
以下、図13A〜図13Eを参照し、下り電文処理部620の第2のログ編集部621が行う処理を具体的に説明する。なお、ここで例示する処理は、図3の(b)に示した下り電文12に対する下り電文処理において第2のログ編集部621が図4のマッチング定義691を参照して行う処理とする。
図13Aは、第2のログ編集部が行う処理の具体例を説明する図(その1)である。図13Bは、第2のログ編集部が行う処理の具体例を説明する図(その2)である。図13Cは、第2のログ編集部が行う処理の具体例を説明する図(その3)である。図13Dは、第2のログ編集部が行う処理の具体例を説明する図(その4)である。図13Eは、第2のログ編集部が行う処理の具体例を説明する図(その5)である。
下り電文処理部620の第2のログ編集部621は、上記のように、サーバ装置6が受信した下り電文12についてのログを編集する下り電文ログ編集処理(図9のステップS43)、及び編集したログを電文ログ692に格納する処理(図9のステップS44)を行う。
第2のログ編集部621は、下り電文ログ編集処理として、図10のフローチャートに沿った処理を行う。すなわち、下り電文ログ編集処理を開始した第2のログ編集部621は、まず、マッチング定義691内の定義を1つ読み込む(ステップS4301)。このとき、第2のログ編集部621は、例えば、図13Aのように、まず、マッチング定義691における最上位の行に登録された第1の定義D1(「送信電文通番=」)を読み込む。
次に、第2のログ編集部621は、名称がマッチング定義691から読み込んだ定義における名称と一致する項目を下り電文12内で探索する探索処理(ステップS4302〜S4304)を行う。しかしながら、図13Aに示したように、名称が「送信電文通番」である項目は下り電文12内に存在しない。このため、第2のログ編集部621は、下り電文12の第1の項目1201から第7の項目1207までの全ての項目の名称が「送信電文通番」とは一致しないと判定し、探索処理を終了する。
項目の名称が一致しなかったことにより探索処理を終了した場合、第2のログ編集部621は、項目の名称及び値を編集用バッファ693に追加する処理(ステップS4305)及び利用者番号特定処理(ステップS4306)を行わずにステップS4307の判定を行う。このとき、マッチング定義691内にはまだ読み込んでいない定義が残っている(ステップS4307;NO)。このため、第2のログ編集部621は、2回目のステップS4301の処理を行う。2回目のステップS4301の処理では、第2のログ編集部621は、例えば、マッチング定義691における上から2行目に登録された第2の定義D2(「関連電文通番=送信電文通番」)を読み込む。
次に、第2のログ編集部621は、名称が「関連電文通番」である項目を下り電文12内で探索する探索処理(ステップS4302〜S4304)を行う。しかしながら、図13Aに示したように、名称が「関連電文通番」である項目は下り電文12内に存在しない。このため、第2のログ編集部621は、下り電文12の第1の項目1201から第7の項目1207までの全ての項目の名称が「送信電文通番」とは一致しないと判定し、探索処理を終了する。探索処理を終了した後、第2のログ編集部621は、ステップS4307の判定を行う。このとき、マッチング定義691内にはまだ読み込んでいない定義が残っているので、第2のログ編集部621は、3回目のステップS4301の処理を行う。3回目のステップS4301の処理では、第2のログ編集部621は、例えば、図13Bのように、マッチング定義691における上から3行目に登録された第3の定義D3(「注文ID=注文ID」)を読み出す。
次に、第1のログ編集部612は、名称が「注文ID」である項目を下り電文12内で探索する探索処理(ステップS4302〜S4304)を行う。図13Bに示したように、下り電文12は、先頭から4番目の第4の項目1204の名称が「注文ID」となっている。このため、第2のログ編集部621は、ステップS4302において第4の項目1204を取り出したときに、項目の名称が一致する(ステップS4303;YES)と判定し、探索処理を終了する。探索処理を終了した後、第2のログ編集部621は、第4の項目1204の名称及び値(「注文ID=P1_001」)を編集用バッファ693に格納する(ステップS4305)。
ステップS4305の処理を終えると、下り電文処理部620の第2のログ編集部621は、次に、利用者番号特定処理(ステップS4306)を行う。利用者番号特定処理は、上記のように、下り電文12内の取引結果を通知する端末装置5を識別する値(利用者番号)を特定する処理である。第2のログ編集部621は、利用者番号特定処理として、図11のフローチャートに沿った処理を行う。
利用者番号特定処理を開始した第2のログ編集部621は、まず、現在読み込まれている定義に電文ログ内の項目の名称が登録されており、かつ通知先利用者番号が未定値であるか否かを判定する(ステップS43061)。現在読み込まれている定義は「注文ID=注文ID」という第3の定義D3であり、該定義における右辺の「注文ID」が電文ログ内の項目の名称である。また、現在行っている下り電文処理において、第2のログ編集部621は、ステップS42で通信先バッファ694内の通知先利用者番号を格納する領域を初期化した後、該領域に通知先利用者番号を格納していない。このため、ステップS43061の判定を行った時点では、図13Bのように、通信先バッファ694内の通知先利用者番号は未定値である。よって、第2のログ編集部621は、次に、下り電文12内の取引結果を通知する端末装置5を示す利用者番号が含まれるログを電文ログ692内で探索する探索処理(ステップS43062〜S43066)を行う。
探索処理(ステップS43062〜S43066)において、第2のログ編集部621は、まず、電文ログ692から1つの電文に対するログを読み込む(ステップS43062)。このとき、第2のログ編集部621は、例えば、図13Cのように、まず、電文ログ692における最上位の行に格納された第1のログL1を読み込む。
1つの電文に対するログを読み込んだ後、第2のログ編集部621は、名称が現在読み込まれている定義における電文ログ内の項目の名称であり、かつ値が下り電文12から取り出した項目の値である項目をログ内で探索する処理(ステップS43063〜S43065)を行う。図13Cに示したように、現在読み出されている定義における電文ログ内の項目の名称は「注文ID」であり、下り電文12から取り出した項目の値は「P1_001」である。このため、第2のログ編集部621は、電文ログ692から読み込んだ第1のログL1内で「注文ID=P1_001」という項目を探索する。図13Cに示したように、第1のログL1には「注文ID=P1_001」という項目が含まれる。このため、第2のログ編集部621は、ステップS43063の処理において第1のログL1内の「注文ID=P1_001」という項目を取り出したときに、項目の名称及び値が一致する(ステップS43064;YES)と判定し、ログ探索処理を終了する。名称が電文ログ内の項目の名称と一致し、かつ値が下り電文の項目の値と一致する項目を含むログが電文ログ692に存在したことによりログ探索処理を終了した場合、第2のログ編集部621は、次に、ログ内の名称が利用者番号である項目の名称及び値を取り出して編集用バッファ693に追加する(ステップS43067)。更に、第2のログ編集部621は、通知先利用者番号をログから取り出した利用者番号の値にする(ステップS43068)。図13Cに示すように、「注文ID=P1_001」という項目を含む第1のログL1における利用者番号に関する項目は、「利用者番号=1」という項目である。このため、第2のログ編集部621は、第1のログL1から「利用者番号=1」という項目の名称及び値を取り出し、編集用バッファ693に追加する。また、第2のログ編集部621は、第1のログL1から取り出した利用者番号の値(「1」)を、通知先利用者番号として通知先バッファ694に格納する。
ステップS43067及びS43068の処理を終えると、第2のログ編集部621は、利用者番号特定処理を終了し、図10のように、次に、マッチング定義691内の全ての定義を読み込んだか否かを判定する(ステップS4307)。このとき、マッチング定義691内にはまだ読み込んでいない定義が残っている(ステップS4307;NO)。このため、第2のログ編集部621は、4回目のステップS4301の処理を行う。4回目のステップS4301の処理では、第2のログ編集部621は、例えば、図13Dのように、マッチング定義691における上から4行目に登録された第4の定義D4(「約定ID=」)を読み出す。
次に、第1のログ編集部612は、名称が「約定ID」である項目を下り電文12内で探索する探索処理(ステップS4302〜S4304)を行う。図13Dに示したように、下り電文12は、先頭から3番目に位置する第3の項目1203の名称が「約定ID」となっている。このため、第2のログ編集部621は、ステップS4302において第3の項目1203を取り出したときに、項目の名称が一致する(ステップS4303;YES)と判定し、探索処理を終了する。探索処理を終了した後、第2のログ編集部621は、第3の項目1203の名称及び値(「約定ID=E001」)を編集用バッファ693に格納する(ステップS4305)。
ステップS4305の処理を終えると、下り電文処理部620の第2のログ編集部621は、次に、利用者番号特定処理(ステップS4306)を行う。しかしながら、現在マッチング定義691から読み込まれている定義は「約定ID=」という、電文ログ内の項目の名称が登録されていない定義である。しかも、通知先バッファ694には通知先利用者番号を示す値(「1」)が格納されている。このため、第2のログ編集部621は、図11の利用者番号特定処理におけるステップS43062以降の処理を省略し、利用者番号特定処理を終了する。利用者番号特定処理を終了すると、第2のログ編集部621は、次に、ステップS4307の判定を行う。このとき、マッチング定義691内にはまだ読み込んでいない定義が残っている(ステップS4307;NO)。このため、第2のログ編集部621は、5回目のステップS4301の処理を行う。5回目のステップS4301の処理では、第2のログ編集部621は、例えば、マッチング定義691における上から5行目に登録された第5の定義D5(「元約定ID=約定ID」)を読み込む。
次に、第1のログ編集部612は、名称が「元約定ID」である項目を下り電文12内で探索する探索処理(ステップS4302〜S4304)を行う。しかしながら、図13Dに示したように、名称が「元約定ID」である項目は下り電文12内に存在しない。このため、第2のログ編集部621は、下り電文12の第1の項目1201から第7の項目1207までの全ての項目の名称が「元約定ID」とは一致しない(ステップS4303;NO)と判定し、探索処理を終了する。
探索処理を終了した後、第2のログ編集部621は、ステップS4307の判定を行う。このとき、マッチング定義691内の定義は全て読み込まれている(ステップS4307;YES)。このため、第2のログ編集部621は、ステップS4301〜S4307のループ処理を終了し、次に、通知先利用者番号が未定値であるか否かを判定する(ステップS4308)。
第2のログ編集部621は、上記のように、マッチング定義691から第3の定義D3(「注文ID」=「注文ID」)を読み込んだときに行った利用者番号特定処理(ステップS4306)において、通知先バッファ694に通知先利用者番号を示す値(「1」)を格納している。すなわち、第2のログ編集部621がステップS4301〜S4307のループ処理を終えた時点で、通知先利用者番号は未定値ではなくなっている。従って、第2のログ編集部621は、通知先利用者番号が未定値ではない(ステップS4308;NO)と判定し、ステップS4309を省略して下り電文ログ編集処理を終了する。
下り電文ログ編集処理を終了した後、第2のログ編集部621は、図13Eに示すように、編集用バッファ693で保持しているデータ(項目の名称及び値の組)Lを読み出し、下り電文12についてのログLnとして電文ログ692に格納する(ステップS44)。
上記の手順で下り電文12についてのログLnを電文ログ692に格納した後、下り電文処理部620は、通知データ作成部622において端末装置5に送信する通知データを作成する。通知データ作成部622は、図3の(b)に示したように、下り電文12内の第3の項目1203(「約定ID=E001」)、第4の項目1204(「注文ID=P1_001」)、第5の項目1205(「銘柄=6702」)、第6の項目1206(「数量=1000」)、及び第7の項目1207(「金額=1500」)を抽出して通知データ13を作成する。通知データ13を作成した後、下り電文処理部620は、データ送受信部630と連携し、作成した通知データ13を、通知先バッファ694に格納された通知先利用者番号により特定される端末装置5に送信する。
このように、本実施形態に係るサーバ装置6は、電文から取り出した項目の名称及び値を格納した電文ログ692と、電文内の項目の名称と電文ログ内の項目の名称との対応関係が定義されたマッチング定義691とに基づいて、下り電文12に含まれる取引結果を通知する端末装置5を示す値(通知先利用者番号)を特定する。すなわち、サーバ装置6が参照する静的な定義(マッチング定義691)には、端末装置5の数、売買システム4の数、及び取扱い銘柄の種類等が変更された場合にも不変な、電文内で使用する項目の名称のみが登録されている。従って、本実施形態に係るサーバ装置6は、端末装置5の数、売買システム4の数、及び取扱い銘柄の種類等を変更する際にマッチング定義691を変更する必要がない。すなわち、本実施形態に係る取引システム1によれば、データの送信先の特定に利用する静的な定義を変更する作業の頻度を低減することが可能となる。よって、本実施形態の取引システム1では、静的な定義を変更する作業により生じる動作停止期間を低減することが可能となり、利用者システム3を利用して取引を行う利用者に対する利便性が向上する。
なお、本実施形態に係るサーバ装置6の下り電文処理部620における第2のログ編集部621は、サーバ装置6が下り電文12を受信する毎に、都度上記の処理を行い、下り電文12の識別に利用可能な項目の名称及び値と、下り電文12と対応する発注依頼を送信した端末装置5の特定に利用可能な項目の名称(利用者番号)及び値とを含むログを電文ログ692に格納する。更に、ログ編集部12は、下り電文12と対応する発注依頼を送信した端末装置5の特定に利用可能な利用者番号の値を、通知先利用者番号として通知用バッファ694に格納する。
ところで、本実施形態に係る取引システム1における売買システム4は、1つの上り電文11に対する下り電文を複数回作成し、サーバ装置6に送信することがある。例えば、売買システム4は、1つの上り電文11に応じた売買取引を行い図3の(b)のような下り電文12を送信した後、該上り電文11に応じた売買取引に対する新たな取引結果を通知する下り電文を作成して送信することがある。この場合、新たな取引結果を通知する下り電文は、注文IDの項目を含まないこともある。そこで、次に、図14A〜図14Fを参照し、1つの上り電文11に対する2通目以降の下り電文をサーバ装置6が受信したときに下り電文処理部620の第2のログ編集部621が行う処理を具体的に説明する。なお、ここで例示する処理は、図13Eに示した下り電文12に対する下り電文処理が終了した後で、新たな下り電文を受信したときに第2のログ編集部621が図4のマッチング定義691を参照して行う処理とする。
図14Aは、第2のログ編集部が行う処理の別の具体例を説明する図(その1)である。図14Bは、第2のログ編集部が行う処理の別の具体例を説明する図(その2)である。図14Cは、第2のログ編集部が行う処理の別の具体例を説明する図(その3)である。図14Dは、第2のログ編集部が行う処理の別の具体例を説明する図(その4)である。図14Eは、第2のログ編集部が行う処理の別の具体例を説明する図(その5)である。図14Fは、第2のログ編集部が行う処理の別の具体例を説明する図(その6)である。
図14Aに示した下り電文15は、図13Aの下り電文12を作成してサーバ装置6に送信した売買システム4が、注文ID=P1_001の注文に対する新たな取引結果を通知するためにサーバ装置6に送信した下り電文の一例である。図14Aに示したように、1つの注文(上り電文11)に対する2通目以降の下り電文15は、「約定ID」という名称の項目と、「元約定ID」という名称の項目を含む。下り電文15における約定IDの値は、新たな取引結果(約定)に対して売買システム4が採番した値である。また、下り電文15における元約定IDの値は、下り電文15よりも前にサーバ装置6に送信した同一の注文(上り電文11)に対する取引結果に対して売買システム4が採番した値(すなわち下り電文12における約定IDの値)である。更に、下り電文15は、該下り電文15と対応する上り電文11の特定に利用可能な注文IDの項目が存在しない。このような下り電文15を受信した場合、下り電文処理部620の第2のログ編集部621は、以下に説明するように、下り電文15と同一の注文に対する下り電文12についてのログLnに含まれる利用者番号の値に基づいて、下り電文15内の取引結果を通知する端末装置5を特定する。
サーバ装置6が下り電文15を受信すると、第2のログ編集部621は、下り電文15についてのログを編集する下り電文ログ編集処理(図9のステップS43)、及び編集したログを電文ログ692に格納する処理(図9のステップS44)を行う。
第2のログ編集部621は、下り電文ログ編集処理として、図10のフローチャートに沿った処理を行う。下り電文ログ編集処理において、第2のログ編集部621は、まず、マッチング定義691内の定義を1つ読み込む(ステップS4301)。このとき、第2のログ編集部621は、例えば、図14Aのように、まず、マッチング定義691における最上位の行に登録された第1の定義D1(「送信電文通番=」)を読み込む。
次に、第2のログ編集部621は、名称がマッチング定義691から読み込んだ定義における名称「送信電文通番」と一致する項目を下り電文15内で探索する探索処理(ステップS4302〜S4304)を行う。しかしながら、図14Aに示したように、名称が「送信電文通番」である項目は下り電文15内に存在しない。このため、第2のログ編集部621は、下り電文15の第1の項目1501から第7の項目1507までの全ての項目の名称が「送信電文通番」とは一致しないと判定し、探索処理(ステップS4302〜S4304)を終了する。探索処理を終了した後、第2のログ編集部621は、項目の名称及び値を編集用バッファ693に追加する処理(ステップS4305)及び利用者番号特定処理(ステップS4306)を行わずに、ステップS4307の判定を行う。このとき、マッチング定義691内にはまだ読み込んでいない定義が残っている(ステップS4307;NO)。このため、第2のログ編集部621は、2回目のステップS4301の処理を行う。2回目のステップS4301の処理では、第2のログ編集部621は、例えば、マッチング定義691における上から2行目に登録された第2の定義D2(「関連電文通番=送信電文通番」)を読み込む。
次に、第2のログ編集部621は、名称が「関連電文通番」である項目を下り電文15内で探索する探索処理(ステップS4302〜S4304)を行う。しかしながら、名称が「関連電文通番」である項目は下り電文15内に存在しない。このため、第2のログ編集部621は、下り電文15内の第1の項目1501から第7の項目1507までの全ての項目の名称が「関連電文通番」ではないと判定した後、探索処理を終了する。
探索処理を終了した後、第2のログ編集部621は、ステップS4305及びS4306を行わずにステップS4307の判定を行う。このとき、マッチング定義691内にはまだ読み込んでいない定義が残っている(ステップS4307;NO)。このため、第2のログ編集部621は、3回目のステップS4301の処理を行う。3回目のステップS4301の処理では、第2のログ編集部621は、例えば、図14Bのように、マッチング定義691における上から3行目に登録された第3の定義D3(「注文ID=注文ID」)を読み込む。
次に、第2のログ編集部621は、名称が「注文ID」である項目を下り電文15内で探索する探索処理(ステップS4302〜S4304)を行う。しかしながら、図14Bに示したように、下り電文15には名称が「注文ID」である項目が存在しない。このため、第2のログ編集部621は、下り電文15の第1の項目1201から第7の項目1207までの全ての項目の名称が「注文ID」とは一致しないと判定した後、探索処理(ステップS4302〜S4304)を終了する。
探索処理を終了した後、第2のログ編集部621は、ステップS4305及びS4306の処理を行わずに、ステップS4307の判定を行う。このとき、マッチング定義691内にはまだ読み込んでいない定義が残っている(ステップS4307;NO)。このため、第2のログ編集部621は、4回目のステップS4301の処理を行う。4回目のステップS4301の処理では、第2のログ編集部621は、例えば、図14Cのように、マッチング定義691における上から4行目に登録された第4の定義D4(「約定ID=」)を読み込む。
次に、第2のログ編集部621は、名称が「約定ID」である項目を下り電文15内で探索する探索処理(ステップS4302〜S4304)を行う。図14Cに示したように、下り電文15は、先頭から3番目に位置する第3の項目1503の名称が「約定ID」となっている。このため、第2のログ編集部621は、ステップS4302において第3の項目1503を取り出したときに、項目の名称が一致する(ステップS4303;YES)と判定し、探索処理を終了する。探索処理を終了した後、第2のログ編集部621は、第3の項目1503の名称及び値(「約定ID=E002」)を編集用バッファ693に格納する(ステップS4305)。
ステップS4305の処理を終えると、第2のログ編集部621は、次に、利用者番号特定処理(ステップS4306)を行う。しかしながら、図14Cのように、第2のログ編集部621が読み込んでいる定義は、電文ログ内の項目の名称が登録されていない第4の定義D4(「約定ID=」)である。従って、第2のログ編集部621は、図11のフローチャートにおけるステップS43062以降の処理を行わずに利用者特定処理を終了する。利用者番号特定処理を終了した後、第2のログ編集部621は、ステップS4307の判定を行う。このとき、マッチング定義691内にはまだ読み込んでいない定義が残っている(ステップS4307;NO)。このため、第2のログ編集部621は、5回目のステップS4301の処理を行う。5回目のステップS4301の処理では、第2のログ編集部621は、例えば、図14Dのようにマッチング定義691における上から5行目に登録された第5の定義D5(「元約定ID=約定ID」)を読み込む。
次に、第2のログ編集部621は、名称が「元約定ID」である項目を下り電文15内で探索する探索処理(ステップS4302〜S4304)を行う。図14Dに示したように、下り電文15は、先頭から4番目に位置する第4の項目1504の名称が「元約定ID」となっている。このため、第2のログ編集部621は、ステップS4302において第4の項目1504を取り出したときに、項目の名称が一致する(ステップS4303;YES)と判定し、探索処理を終了する。探索処理を終了した後、第2のログ編集部621は、第4の項目1504の名称及び値(「元約定ID=E001」)を編集用バッファ693に格納する(ステップS4305)。
ステップS4305の処理を終えると、第2のログ編集部621は、次に、利用者番号特定処理(ステップS4306)を行う。このとき、図14Dのように、第2のログ編集部621が読み込んでいる定義は電文ログ内の項目の名称が登録された第5の定義D5(「元約定ID=約定ID」)であり、通知先バッファ694の通知先利用者番号は未定値である。従って、利用者番号特定処理を開始した第2のログ編集部621は、次に、下り電文15内の取引結果を通知する端末装置5を示す利用者番号が含まれるログを電文ログ692内で探索する探索処理(ステップS43062〜S43066)を行う。
該探索処理では、第2のログ編集部621は、上記のように、名称が現在読み込んでいる定義における電文ログ内の項目の名称であり、かつ値が下り電文15から取り出した項目の値である項目(すなわち「約定ID=E001」という項目)を含むログを電文ログ692で探索する。図14Eに示すように、電文ログ692には「約定ID=E001」という項目を含むログLnが格納されている。従って、第2のログ編集部621は、ステップS43063でログLn内の「約定ID=E001」という項目を取り出したときに、項目の名称及び値が一致する(ステップS43064;YES)と判定し、探索処理を終了する。
探索処理を終了すると、第2のログ編集部621は、次に、ステップS43067及びS43068の処理を行う。すなわち、第2のログ編集部621は、図14Eのように、「約定ID=E001」という項目を含むログLnから「利用者番号=1」という項目の名称及び値を取り出し、編集用バッファ693に格納する。更に、第2のログ編集部621は、ログLnから取り出した利用者番号の値(「1」)を通知先利用者番号の値として通知先バッファ694に格納する。
ステップS43067及びS43068の処理を終えると、第2のログ編集部621は、利用者番号特定処理を終了し、ステップS4307の判定を行う。このとき、第2のログ編集部621は、マッチング定義691内の定義を全て読み込んでいる(ステップS4307;YES)。このため、第2のログ編集部621は、ループ処理(ステップS4301〜S4307)を終了し、次に、通知先利用者番号が未定値であるか否かを判定する(ステップS4308)。図14Eに示したように、通知先バッファ694には、通知先利用者番号を示す値(「1」)が格納されている(ステップS4308;NO)。このため、第2のログ編集部621は、ステップS4309の処理を行わずに下り電文ログ編集処理を終了する。
下り電文ログ編集処理を終了した後、第2のログ編集部621は、図14Fに示すように、編集用バッファ693で保持しているデータ(項目の名称及び値の組)Lを読み出し、下り電文15に対するログLmとして電文ログ692に格納する(ステップS44)。
上記の手順で下り電文15に対するログLmを電文ログ692に格納した後、下り電文処理部620は、通知データ作成部621において端末装置5に送信する通知データを作成する。通知データ作成部621は、下り電文15内の第3の項目1503(「約定ID=E002」)、第4の項目1504(「元約定ID=E001」)、第5の項目1505(「銘柄=6702」)、第6の項目1506(「数量=800」)、及び第7の項目1507(「金額=1500」)を抽出して通知データを作成する。通知データを作成した後、下り電文処理部620は、データ送受信部630と連携し、作成した通知データを、通知先バッファ694に格納された通知先利用者番号により特定される端末装置5に送信する。
このように、マッチング定義691には、電文内の項目の名称と電文ログ内の項目の名称との対応関係(定義)として、同一の上り電文に対する下り電文の特定に利用可能な名称の対応関係を登録することが可能である。このため、本実施形態に係るサーバ装置6では、下り電文内に、該下り電文と対応する上り電文の特定に利用可能な項目(例えば注文ID等)が存在しない場合にも、電文ログ692内に格納されたログに基づいて、下り電文の取引結果を通知する端末装置5を特定することが可能である。従って、本実施形態に係るサーバ装置6によれば、売買システム4が1つの上り電文に対し2通以上の下り電文を作成して送信する場合にも、各下り電文の通知先を正しく特定することが可能となる。
なお、図3の(a)等に示した上り電文11及び図3の(b)等に示した下り電文12は、それぞれ、上り電文11及び下り電文12の一例に過ぎない。上り電文11及び下り電文12に含まれる項目及び各項目の並び順は、取引システム1において適用する電文の様式に応じて適宜変更可能である。また、上り電文11及び下り電文12は、それぞれ、項目の名称が略称、或いは数値等のコードであってもよい。項目の名称にコードを利用した電文を送受信する場合、例えば、図5のマッチング定義691における各項目の名称は、それぞれ、電文内で使用するコードとする。同様に、項目の名称にコードを利用した電文を送受信する場合、例えば、図6の電文ログ692における各項目の名称は、それぞれ、電文内で使用するコードとする。
また、マッチング定義691に登録する定義は、図5に示した5個の定義に限らず、適宜変更可能である。
また、図8のフローチャートは、本実施形態に係るサーバ装置6が行う上り電文ログ編集処理の一例に過ぎない。本実施形態に係るサーバ装置6が行う上り電文ログ編集処理は、本実施形態の要旨を逸脱しない範囲において、適宜変更可能である。
また、図10及び図11のフローチャートは、本実施形態に係るサーバ装置6が行う下り電文ログ編集処理及び利用者番号特定処理の一例に過ぎない。本実施形態に係るサーバ装置6が行う下り電文ログ編集処理は、本実施形態の要旨を逸脱しない範囲において、適宜変更可能である。同様に、本実施形態に係るサーバ装置6が行う利用者番号特定処理は、本実施形態の要旨を逸脱しない範囲において、適宜変更可能である。
更に、本実施形態に係るサーバ装置6は、証券の取引(売買)を行う取引システム1に限らず、第1の装置から第2の装置への要求と該要求に対する第2の装置から第1の装置への応答を中継する中継装置として、各種の通信システムに適用可能である。
加えて、本実施形態に係るサーバ装置6における上記の各機能は、例えば、コンピュータと、上記の上り電文処理及び下り電文処理をコンピュータに実行させるプログラムとにより実現可能である。以下、図15を参照し、コンピュータとプログラムとにより実現されるサーバ装置6について説明する。
図15は、サーバ装置のハードウェア構成図である。
図15に示すように、サーバ装置6として利用可能なコンピュータは、CPU(Central Processing Unit)2001と、ROM(Read Only Memory)2002と、RAM(Random Access Memory)2003と、HDD(Hard Disk Drive)2004と、入力インタフェース2005と、グラフィック処理装置2006と、通信インタフェース2007とを備える。サーバ装置6におけるこれらの要素2001〜2007は、バス2010により相互に接続されており、要素間でのデータの受け渡しが可能になっている。
CPU 2001は、オペレーティングシステムを含む各種のプログラムを実行することによりサーバ装置6(コンピュータ)の全体の動作を制御する。例えば、CPU 2001は、図7及び図8を参照して説明した上り電文処理と、図9〜図11を参照して説明した下り電文処理とを含むデータ送受信プログラムを実行する。
ROM 2002には、例えば、コンピュータ20の起動時にCPU 2001が読み出す所定の基本制御プログラム等が予め記録されている。また、RAM 2003は、CPU 2001が、各種のプログラムを実行する際に必要に応じて作業用記憶領域として使用する。RAM 2003は、例えば、発注依頼10、上り電文11、下り電文12、通知データ13、マッチング定義691、及び電文ログ692等の記憶に利用可能である。また、RAM 2003は、上り電文ログ編集処理において上り電文11から取り出した項目の名称及び値、下り電文ログ編集処理において下り電文12及び15から取り出した項目の名称及び値、通知先利用者番号等の記憶に利用可能である。
HDD 2004は、補助記憶装置の1つであり、CPU 2001によって実行される各種のプログラムや各種のデータ等を記憶させることができる。HDD 2004は、例えば、図7及び図8を参照して説明した上り電文処理と図9〜図11を参照して説明した下り電文処理とを含むデータ送受信プログラム等の記憶に利用可能である。また、HDD 2004は、例えば、マッチング定義691及び電文ログ692等の記憶に利用可能である。
入力インタフェース2005は、キーボード装置21及びマウス装置22等の入力装置からの各種情報の入力を受け付ける。キーボード装置21等の入力装置は、例えば、マッチング定義691の編集等に利用可能である。
グラフィック処理装置2006は、表示装置23の画面表示に関する各種処理を行う。
通信インタフェース2007は、端末装置5との通信、及び通信ネットワーク2を介した売買システム4との通信を行う。
図15のサーバ装置6(コンピュータ)は、CPU 2001がHDD 2004に記憶させた図7及び図8を参照して説明した上り電文処理と図9〜図11を参照して説明した下り電文処理とを含むデータ送受信プログラムを読み込み実行することにより、上述したサーバ装置6として動作する。データ送受信プログラムを実行している間、CPU 2001は、図4のサーバ装置6における上り電文処理部610及び下り電文処理部620として機能する(動作する)。また、データ送受信プログラムを実行している間、通信インタフェース2007は、図4のサーバ装置6におけるデータ送受信部630及び電文送受信部640として機能する(動作する)。更に、データ送受信プログラムを実行している間、RAM 2003及びHDD 2004は、図4のサーバ装置6における記憶部690として機能する(動作する)。
なお、サーバ装置6(コンピュータ)は、図15に示した要素2001〜2007に限らず、他の要素を含むものであってもよい。例えば、サーバ装置6は、可搬型記憶媒体に記録されているプログラムやデータの読み出し、HDD 2004等に記憶されたデータ等の可搬型記憶媒体への書き込みを行う媒体駆動装置を含んでもよい。可搬型記憶媒体としては、例えば、Secure Digital(SD)規格のメモリカード(フラッシュメモリ)がある。可搬型記録媒体は、上記のデータ送受信プログラム、マッチング定義691、及び電文ログ692等の記憶に利用可能である。また、サーバ装置6が媒体駆動装置として利用可能な光ディスクドライブを搭載している場合、当該光ディスクドライブで認識可能な各種の光ディスクを可搬型記録媒体として利用可能である。可搬型記録媒体として利用可能な光ディスクには、例えば、Compact Disc(CD)、Digital Versatile Disc(DVD)、Blu-ray Disc(Blu-rayは登録商標)等がある。