(57)【特許請求の範囲】
【請求項１】
業務プログラムとクライアントスタブとを有するクライアント装置と、言語の識別情報とプロシージャの識別情報との組合せに対応付けてデータ表現形式情報を記憶する記憶手段とサーバスタブとを有するサーバ装置とが、ネットワークを介して接続されたコンピュータシステムにおけるリモートプロシージャ処理方法であって、
前記業務プログラムが、プロシージャの識別情報とプロシージャの引数とを含む要求を送信すると、前記クライアントスタブが前記業務プログラムの言語の識別情報と前記要求中のプロシージャの識別情報とプロシージャの引数とを含む実行要求電文を前記ネットワークを経由して前記サーバスタブへ送信し、
前記サーバスタブが、受信した実行要求電文に含まれる前記言語の識別情報と前記プロシージャの識別情報との組合せに対応して前記記憶手段に記憶されているプロシージャ要求側のデータ表現形式情報と、自サーバスタブの言語の識別情報と前記プロシージャの識別情報との組合せに対応して前記記憶手段に記憶されているプロシージャ実行側のデータ表現形式情報とに基づいて、前記実行要求電文に含まれる前記引数をプロシージャ要求側のデータ表現形式からプロシージャ実行側のデータ表現形式に変換し、前記プロシージャの識別情報で特定されるプロシージャを実行し、
前記サーバスタブが、前記変換に使用した前記データ表現形式情報に基づいて、前記プロシージャの戻り値をプロシージャ実行側のデータ表現形式からプロシージャ要求側のデータ表現形式に逆変換し、応答電文を前記ネットワーク経由で前記クライアントスタブへ送信する
ことを特徴とするリモートプロシージャコール処理方法。
【請求項２】
前記プロシージャの引数および戻り値は構造体であり、前記サーバスタブは引数の構造体の値を書き換えて前記クライアントスタブに返却する
ことを特徴とする請求項１に記載のリモートプロシージャコール処理方法。
【請求項３】
前記プロシージャは、前記サーバ装置に接続されるデータベースシステム上に存在する
ことを特徴とする請求項１または２に記載のリモートプロシージャコール処理方法。
【請求項４】
前記プロシージャは、前記サーバ装置上に存在する
ことを特徴とする請求項１または２に記載のリモートプロシージャコール処理方法。
【請求項５】
言語の識別情報とプロシージャの識別情報との組合せに対応付けてデータ表現形式情報を記憶する記憶手段と、
サーバスタブとを有し、
前記サーバスタブは、
業務プログラムの言語の識別情報とプロシージャの識別情報とプロシージャの引数とを含む実行要求電文をクライアント装置のクライアントスタブから受信すると、該受信した実行要求電文に含まれる前記言語の識別情報と前記プロシージャの識別情報との組合せに対応して前記記憶手段に記憶されているプロシージャ要求側のデータ表現形式情報と、自サーバスタブの言語の識別情報と前記プロシージャの識別情報との組合せに対応して前記記憶手段に記憶されているプロシージャ実行側のデータ表現形式情報とに基づいて、前記実行要求電文に含まれる前記引数をプロシージャ要求側のデータ表現形式からプロシージャ実行側のデータ表現形式に変換する要求電文解析手段と、
前記変換後の引数を使用して、前記プロシージャの識別情報で特定されるプロシージャを実行するプロシージャ実行手段と、
前記変換に使用した前記データ表現形式情報に基づいて、前記プロシージャの戻り値をプロシージャ実行側のデータ表現形式からプロシージャ要求側のデータ表現形式に逆変換し、応答電文を前記ネットワーク経由で前記クライアントスタブへ送信する応答電文生成手段と
を有することを特徴とするサーバ装置。
【請求項６】
前記プロシージャの引数および戻り値は構造体であり、前記サーバスタブは引数の構造体の値を書き換えて前記クライアントスタブに返却する
ことを特徴とする請求項５に記載のサーバ装置。
【請求項７】
言語の識別情報とプロシージャの識別情報との組合せに対応付けてデータ表現形式情報を記憶する記憶手段を有するコンピュータを、
業務プログラムの言語の識別情報とプロシージャの識別情報とプロシージャの引数とを含む実行要求電文をクライアント装置のクライアントスタブから受信すると、該受信した実行要求電文に含まれる前記言語の識別情報と前記プロシージャの識別情報との組合せに対応して前記記憶手段に記憶されているプロシージャ要求側のデータ表現形式情報と、自サーバスタブの言語の識別情報と前記プロシージャの識別情報との組合せに対応して前記記憶手段に記憶されているプロシージャ実行側のデータ表現形式情報とに基づいて、前記実行要求電文に含まれる前記引数をプロシージャ要求側のデータ表現形式からプロシージャ実行側のデータ表現形式に変換する要求電文解析手段と、
前記変換後の引数を使用して、前記プロシージャの識別情報で特定されるプロシージャを実行するプロシージャ実行手段と、
前記変換に使用した前記データ表現形式情報に基づいて、前記プロシージャの戻り値をプロシージャ実行側のデータ表現形式からプロシージャ要求側のデータ表現形式に逆変換し、応答電文を前記ネットワーク経由で前記クライアントスタブへ送信する応答電文生成手段と
して機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はリモートプロシージャコール処理方法に関する。
【背景技術】
【０００２】
近年、堅牢性を重視したメインフレームとは対照的に、オープンサーバでは実行性能の向上が継続されており、優れたサービスを提供する多数のソフトウエアが実現されている。
【０００３】
メインフレームの業務アプリケーションから、オープンサーバのソフトウエアをプロシージャとして遠隔実行することにより、メインフレームの業務アプリケーションをオープンサーバに移植することなく、機能の拡張が可能になる。
【０００４】
外部サーバのプロシージャを遠隔実行する既存技術のひとつに、RPC(Remote Procedure Call)がある。
【０００５】
一般的なRPC技術では、プロセス間やサーバ間の通信を介した遠隔実行において、ローカルの手続き呼び出しと同じ形式でプロシージャを実行できるようにするスタブと呼ばれるプログラムを使用する。
【０００６】
プロシージャを呼び出す側は、クライアントスタブを経由して遠隔実行を要求し、プロシージャを実行する側は、サーバスタブを経由して実行要求を受け付ける構成である。
【０００７】
クライアントスタブは、クライアントプラットフォームに依存したデータ表現形式の引数を、プラットフォーム非依存の形式に変換する（整列化するとも言う）機能と、変換後の引数を含む実行要求をネットワークに送信する機能と、遠隔サーバのサーバスタブから戻り値を含む実行応答を受信する機能と、実行応答に含まれる戻り値をクライアントプラットフォームのデータ表現形式に変換する（非整列化するとも言う）機能とを備えている。
【０００８】
また、サーバスタブは、クライアントスタブから受信した実行要求に含まれる引数を、サーバのプラットフォームのデータ表現形式に変換する機能と、変換後の引数を使用して要求されたプロシージャを実行する機能と、プロシージャ実行結果の戻り値をプラットフォーム非依存のデータ表現形式に変換する機能と、変換後の戻り値を含む実行応答をクライアントスタブへ送信する機能とを備えている。
【０００９】
他方、RPCの処理の一部を、プロシージャ要求側およびプロシージャ実行側間に介在するRPC要求代行処理装置に代行させる技術が特許文献１に記載されている。特許文献１に記載のRPC要求代行処理装置は、プロシージャ要求側およびプロシージャ実行側に関するデータ表現形式情報を記憶するクライアント／サーバディレクトリを有する。RPC要求代行処理装置は、クライアントからRPC要求を受信すると、上記のクライアント／サーバディレクトリに記載されたプロシージャ要求側およびプロシージャ実行側に関するデータ表現形式情報に基づき、プロシージャの引数をクライアント側のデータ表現形式からサーバ側のデータ表現形式に変換し、サーバにプロシージャの実行を依頼する。また、RPC要求代行処理装置は、サーバからRPC実行結果の要求を受信すると、上記のクライアント／サーバディレクトリに記載されたプロシージャ要求側およびプロシージャ実行側に関するデータ表現形式情報に基づき、プロシージャの戻り値をサーバ側のデータ表現形式からクライアント側のデータ表現形式に変換し、クライアントに返却する。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開平５−１１３９５９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
メインフレームからRPC技術を使用してプロシージャの遠隔実行を要求する場合、クライアントとなるメインフレームには、クライアントスタブを配置し、プロシージャを実行するサーバには、サーバスタブを配置する。クライアントスタブとサーバスタブはともに、データ表現形式の変換とネットワークを介した送受信の処理とを行う。これらの処理のクライアントスタブとサーバスタブのCPU使用量は同程度である。従って、クライアントとサーバの実行性能が同程度であれば、両者の負荷がバランスするため、システムの実行効率は高い。しかし、サーバと比較して、クライアントとなるメインフレームの実行性能が低く、両者の性能差が大きい場合は、クライアントの処理がボトルネックとなり、システム全体の実行効率が低下する。
【００１２】
一方、特許文献１に記載の技術によれば、プロシージャの引数および戻り値のデータ表現形式の変換をRPC要求代行処理装置が行うため、クライアントおよびサーバの負荷が軽減される。しかしながら、特許文献１では、一つのクライアントは或る特定の１種類のデータ表現形式を使用することを前提としている。このため、一つのクライアントに、例えばC言語ベースの業務プログラムとCOBOL言語ベースの業務プログラムといった複数の業務プログラムが存在し、その結果として複数種類のデータ表現形式が存在する場合には、RPC要求代行処理装置によるRPC処理の代行は行えない。従って、そのような場合には、一般的なRPC技術と同様にクライアント側およびサーバ側でデータ表現形式の変換を行う必要があり、上述したと同様にクライアントの処理がボトルネックとなり、システム全体の実行効率が低下する。
【００１３】
本発明の目的は、上述したような課題、すなわち、リモートプロシージャコールでは、データ表現形式の変換のためにクライアントの負荷が増大する、という課題を解決するリモートプロシージャコール処理方法を提供することにある。
【課題を解決するための手段】
【００１４】
本発明の一形態にかかるリモートプロシージャコール処理方法は、
業務プログラムとクライアントスタブとを有するクライアント装置と、プロシージャ要求側およびプロシージャ実行側のデータ表現形式情報を記憶する記憶手段とサーバスタブとを有するサーバ装置とが、ネットワークを介して接続されたコンピュータシステムにおけるリモートプロシージャ処理方法であって、
上記業務プログラムが、プロシージャの識別情報とプロシージャの引数とを含む要求を送信すると、上記クライアントスタブが上記業務プログラムの言語の識別情報と上記要求中のプロシージャの識別情報とプロシージャの引数とを含む実行要求電文を上記ネットワークを経由して上記サーバスタブへ送信し、
上記サーバスタブが、受信した実行要求電文に含まれる上記言語の識別情報と上記プロシージャの識別情報との組合せに対応して上記記憶手段に記憶されているプロシージャ要求側のデータ表現形式情報と、自サーバスタブの言語の識別情報と上記プロシージャの識別情報との組合せに対応して上記記憶手段に記憶されているプロシージャ実行側のデータ表現形式情報とに基づいて、上記実行要求電文に含まれる上記引数をプロシージャ要求側のデータ表現形式からプロシージャ実行側のデータ表現形式に変換し、上記プロシージャの識別情報で特定されるプロシージャを実行する、
といった構成を採る。
【発明の効果】
【００１５】
本発明は上述したような構成を有するため、データ表現形式の変換をクライアント側で実施する必要がなく、クライアントの負荷を軽減することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の第１の実施形態のブロック図である。
【図２】本発明の第２の実施形態におけるクライアントのブロック図である。
【図３】本発明の第２の実施形態におけるサーバのブロック図である。
【図４】本発明の第３の実施形態におけるサーバのブロック図である。
【発明を実施するための形態】
【００１７】
次に本発明の実施の形態について図面を参照して詳細に説明する。
[第１の実施形態]
図１を参照すると、本発明の第１の実施形態は、クライアント5とサーバ6とがネットワーク7を介して相互に通信可能に接続されたコンピュータシステムである。
【００１８】
クライアント5は、メインフレームなどのコンピュータであり、業務プログラム51、52と、クライアントスタブ53とを有する。
【００１９】
業務プログラム51、52は、その処理の過程で外部のプロシージャを利用する。業務プログラム51と業務プログラム52とは、C言語とCOBOL言語のように、互いに言語が相違している。以下では、業務プログラム51の言語をG1、業務プログラム52の言語をG2と記す。業務プログラム51、52は、外部のプロシージャを利用する際、自業務プログラムの言語の識別情報とプロシージャの識別情報とプロシージャの引数とを含む要求51a1、52a1をクライアントスタブ53に送信する機能を有する。引数は、構造体型の引数であってもよいし、そうでなくてもよい。
【００２０】
クライアントスタブ53は、業務プログラム51、52から要求51a1、52a1を受信すると、その要求中の業務プログラムの言語の識別情報とプロシージャの識別情報とプロシージャの引数とを含む実行要求電文51a2、52a2をネットワーク7を通じてサーバ装置6へ送信する機能を有する。また、クライアントスタブ53は、サーバ装置6からネットワーク7経由で、実行要求電文51a2、52a2に対する応答電文51b2、52b2を受信すると、その応答電文中のプロシージャの戻り値を含む応答51b1、52b1を業務プログラム51、52に返却する機能を有する。
【００２１】
サーバ6は、オープンサーバなどのコンピュータであり、記憶手段61とサーバスタブ62とを有する。
【００２２】
記憶手段61は、言語の識別情報とプロシージャの識別情報との組合せに対応付けて、データ表現形式情報を記憶する機能を有する。データ表現形式情報は、プロシージャの引数および戻り値のデータサイズ、データ型などを表す情報である。
【００２３】
サーバスタブ62は、要求電文解析手段63と、プロシージャ実行手段64と、応答電文生成手段65とを有する。
【００２４】
要求電文解析手段63は、クライアント5からネットワーク7経由で受信した実行要求電文51a2、52a2に含まれる引数を、記憶手段61に記憶されたデータ表現形式情報を参照して、プロシージャ要求側のデータ表現形式からプロシージャ実行側のデータ表現形式に変換する機能を有する。
【００２５】
プロシージャ実行手段64は、要求電文解析手段63による変換後の引数を使用して、実行要求電文51a2、52a2に含まれるプロシージャの識別情報で特定されるプロシージャ（図示せず）を実行する機能を有する。プロシージャは、サーバ６上に存在するプロシージャであってもよいし、サーバ６に接続されたデータベースシステム上に存在するプロシージャであってもよい。
【００２６】
応答電文生成手段65は、記憶手段61に記憶されたデータ表現形式情報に基づいて、プロシージャの戻り値をプロシージャ実行側のデータ表現形式からプロシージャ要求側のデータ表現形式に逆変換し、この逆変換した戻り値を含む応答電文51b2、52b2をネットワーク7経由でクライアント5へ送信する機能を有する。
【００２７】
次に本実施形態の動作を説明する。
【００２８】
今、業務プログラム51、52が利用するプロシージャの識別情報をFUNC1とする。このとき、サーバ装置６の記憶手段61には、業務プログラム51の言語G1とプロシージャの識別情報FUNC1との組合せに対応付けて、プロシージャ実行側の引数および戻り値がどのようなデータ表現形式であるかを定義したデータ表現形式情報G1-FUNC1が記憶され、また、業務プログラム52の言語G2とプロシージャの識別情報FUNC1との組合せに対応付けて、プロシージャ要求側の引数および戻り値がどのようなデータ表現形式であるかを定義したデータ表現形式情報G2-FUNC1が記憶され、さらに、サーバスタブ62の言語（G3と記す）の識別情報とプロシージャの識別情報FUNC1との組合せに対応付けて、プロシージャ実行側の引数および戻り値がどのような形式であるかを定義したデータ表現形式情報G3-FUNC1が記憶されている。
【００２９】
クライアント5の業務プログラム51から要求51a1が送信されると、クライアントスタブ53がそれを受信し、実行要求電文51a2をネットワーク7経由でサーバ装置6に送信する。サーバ装置6のサーバスタブ62における要求電文解析手段63は、実行要求電文51a2を受信すると、その電文中の言語G1の識別情報とプロシージャの識別情報FUNC1との組合せに対応するデータ表現形式情報G1-FUNC1と、サーバスタブ62の言語G3の識別情報とプロシージャの識別情報FUNC1との組合せに対応するデータ表現形式情報G3-FUNC1とを記憶手段61から読み出し、これらのデータ表現形式情報G1-FUNC1、G3-FUNC1に基づいて、実行要求電文51a2中のプロシージャの引数のデータ表現形式を、プロシージャ要求側のデータ表現形式からプロシージャ実行側のデータ表現形式に変換する。そして、要求電文解析手段63は、変換後の引数とプロシージャの識別情報FUNC1とをプロシージャ実行手段64に通知する。プロシージャ実行手段64は、通知された識別情報FUNC1で特定されるプロシージャを上記変換後の引数を使用して実行する。
【００３０】
プロシージャ実行手段64は、プロシージャの実行完了後、その戻り値を応答電文生成手段65に通知する。応答電文生成手段65は、記憶手段61からデータ表現形式情報G1-FUNC1、G3-FUNC1を読み出し、これらのデータ表現形式情報G1-FUNC1、G3-FUNC1に基づいて、プロシージャの戻り値のデータ表現形式を、プロシージャ実行側のデータ表現形式からプロシージャ要求側のデータ表現形式に変換する。そして、応答電文生成手段65は、変換後の戻り値を含む応答電文51b2を生成し、ネットワーク7経由でクライアント5へ返却する。クライアント5のクライアントスタブ53は、受信した応答電文51b2に含まれる戻り値を含む応答51b1を業務プログラム51に返却する。
【００３１】
クライアント5の業務プログラム52から要求52a1が送信されたときの動作は、業務プログラム51から要求51a1が送信されたときの動作とほぼ同じである。ただし、サーバ6の要求電文解析手段63は、記憶手段61から言語G2の識別情報とプロシージャの識別情報FUNC1との組合せに対応するデータ表現形式情報G2-FUNC1と、サーバスタブ62の言語G3の識別情報とプロシージャの識別情報FUNC1との組合せに対応するデータ表現形式情報G3-FUNC1とを読み出し、これらのデータ表現形式情報G2-FUNC1、G3-FUNC1に基づいて、実行要求電文52a2中のプロシージャの引数のデータ表現形式を、プロシージャ要求側のデータ表現形式からプロシージャ実行側のデータ表現形式に変換する。また、応答電文生成手段65は、記憶手段61中のデータ表現形式情報G2-FUNC1、G3-FUNC1に基づいて、プロシージャの戻り値のデータ表現形式を、プロシージャ実行側のデータ表現形式からプロシージャ要求側のデータ表現形式に変換する。
【００３２】
このように本実施形態によれば、一つのクライアント5に複数種類のデータ表現形式が存在する場合であっても、データ表現形式の変換をクライアント5側で実施する必要がなく、クライアント5の負荷を軽減することができる。その理由は、サーバ６の記憶手段６１に、業務プログラムの言語の識別情報とプロシージャの識別情報との組合せに対応付けてデータ表現形式情報を保持しているため、同じクライアント5に種類の異なるデータ表現形式が存在しても対応できるためである。
【００３３】
また、本実施形態によれば、言語の識別情報とプロシージャの識別情報との組合せに対応付けてデータ表現形式情報を保持するため、引数として構造体型の引数を使用している場合でも対応が可能である。すなわち、複数のデータ型で構成される構造体データは、構造体内の変数の開始オフセットを最適化するために、実装言語によっては、変数と変数の間にダミーの領域（パディング）が挿入されるが、このダミーの領域に関する情報をデータ表現形式情報に含めておくことによって、構造体データに対応することができる。
【００３４】
[第２の実施形態]
[構成の説明]
図2を参照すると、クライアント1は、パラメータ定義ソース格納領域11と、クライアントスタブ12と、業務プログラム13で構成されるコンピュータシステムである。
【００３５】
クライアント1は、軽量でシンプルな構造のクライアントスタブ12によるプロシージャの遠隔実行を要求するクライアントであり、メインフレームのようなCPU使用量と開発コストを抑えたいプラットフォームへの適用を想定している。
【００３６】
業務プログラム13は、プロシージャの遠隔実行を要求するプログラムである。COBOLやC言語など、任意の言語で実装されていて、処理する業務に応じて存在し、同時に実行される可能性がある。
【００３７】
パラメータ定義ソース格納領域11は、パラメータ定義ソース111を格納する領域であり、クライアント1のファイルシステムに構築する。パラメータ定義ソース111は、業務プログラム13が、プロシージャを実行要求するときに指定するパラメータを定義するプログラムソースであり、実行要求するプロシージャと業務プログラム13の実装言語ごとに用意する。さらに、図3の実行要求を処理するサーバ2のプロシージャ23のパラメータ定義にも使用するため、プロシージャ23の実装言語に対応するプログラムソースも用意する。
【００３８】
パラメータ定義ソース111は、業務プログラム本体のソースとは分離可能かつ、業務プログラムのコンパイル時には本体のソースにマージ可能な形式とする。例えば、業務プログラムがCOBOLの場合は、コピー原文が相当し、C言語の場合は、ヘッダファイルが相当する。
【００３９】
本実施形態では、実行要求するプロシージャと、パラメータ定義ソースのファイルとを対応づけるために、パラメータ定義ソースの拡張子を除いたファイル名は、対応づけるプロシージャ名と同名とする。さらに、ひとつのプロシージャに、複数の言語のパラメータ定義ソースが対応するため、言語別にパラメータ定義ソースの格納ディレクトリを作成する。
【００４０】
例えば、業務プログラムがC言語で実装されていて、「FUNC1」とう名前のプロシージャに対応するパラメータ定義ソースの場合、ファイルのパスは「〜/C/FUNC1.h」である。また、業務プログラムがCOBOLで実装されていて、「FUNC1」とう名前のプロシージャに対応するパラメータ定義ソースの場合、ファイルのパスは「〜/COBOL/FUNC1.CBL」である。
【００４１】
パラメータ定義ソース111は、IDLのようなインタフェース記述言語を使用して、汎用インタフェース定義から自動生成してもよいし、プログラマがプロシージャのパラメータ形式にあわせて記述してもよい。
【００４２】
ひとつのパラメータ定義ソースには、対応するプロシージャのパラメータを、ひとつの構造体で記述する。このパラメータ構造体は、入力と出力を兼ねたものであり、プロシージャは、業務プログラムが構造体にセットした値を入力パラメータとして参照し、構造体の値を書き換えて、出力パラメータとして業務プログラムに返却する。
【００４３】
例えば、C言語の整数と文字列のパラメータ定義は次のとおりである。
struct param {
int param1;
char param2[100];
};
typedef struct param param;
【００４４】
また、COBOLの整数と文字列のパラメータ定義は次のとおりである。
01 PARAM.
02 PARAM1 PIC S9(10).
02 PARAM2 PIC X(100).
【００４５】
クライアントスタブ12は、業務プログラム13から、実行要求するプロシージャを識別する情報と、プロシージャのパラメータ構造体のデータとを受け取り、業務プログラム13の実装言語を識別する情報を付加したうえで、実行要求手段121を使用して、サーバ2にプロシージャの遠隔実行を要求する手段である。複数のプログラム言語に対応するために、複数の言語のインタフェースを持つ。業務プログラム13は、実装言語に対応するインタフェースをリンクして使用する。
【００４６】
実行要求手段121は、業務プログラム13の実装言語を識別する情報と、実行要求するプロシージャを識別する情報と、実行要求のパラメータ構造体のデータとを含む実行要求電文を、ネットワーク4を経由して、サーバ2に送信する。さらに、その応答として、プロシージャの実行状態を識別する情報と、プロシージャの実行により更新された構造体データを含む実行応答電文を受信して、業務プログラム13に結果を返却する手段である。
【００４７】
図3を参照すると、サーバ2は、パラメータ定義ソース格納領域21と、サーバスタブ22と、プロシージャ23と、プロシージャ登録テーブル24とで構成されるコンピュータシステムである。
【００４８】
サーバ2は、クライアント1からのプロシージャの実行要求を処理するサーバであり、クライアント1より実行性能の高いプラットフォームへの適用を想定している。
【００４９】
パラメータ定義ソース格納領域21は、パラメータ定義ソース211を格納する領域であり、サーバ2のファイルシステムに構築する。クライアント1のパラメータ定義ソース格納領域11と同じディレクトリ構成とし、クライアント1のパラメータ定義ソース111と同じ名前かつ、同じ内容のファイルを、パラメータ定義ソース211として格納する。なお、パラメータ定義ソース格納領域21は、クライアント1とサーバ2の共有ディスクに配置して、それぞれが同一の領域を参照する構成でもよい。
【００５０】
サーバスタブ22は、電文解析手段221と、プロシージャ実行手段222と、応答電文生成手段223と、パラメータ定義ソース解析手段224とを備えて、クライアント1からのプロシージャ実行要求を受け付け、プロシージャ23を実行して応答を返却するプログラムである。
【００５１】
要求電文解析手段221は、クライアント1から、業務プログラム13の実装言語を識別する情報と、実行要求するプロシージャを識別する情報と、実行要求のパラメータ構造体のデータとを含む実行要求電文を、ネットワーク4を介して受信し、パラメータ定義ソース解析手段224を使用して、実行要求されたプロシージャに対応するパラメータ構造体の構造とデータ形式を明らかにして、実行要求電文のパラメータ構造体のデータを、サーバプラットフォームの形式に変換する手段である。
【００５２】
プロシージャ実行手段222は、プロシージャ登録テーブル24を参照して実行するプロシージャ23を特定し、特定したプロシージャ23を、要求電文解析手段221で変換したパラメータ構造体のデータを使用して実行し、プロシージャ23によって更新されたパラメータ構造体のデータを実行結果として取得する手段である。
【００５３】
応答電文生成手段223は、パラメータ定義ソース解析手段224を使用して、実行要求されたプロシージャに対応するパラメータ構造体の構造とデータ形式を明らかにして、プロシージャ実行手段222が取得したパラメータ構造体のデータを、クライアントプラットフォームの形式に変換する。さらに、プロシージャの実行状態を識別する情報と、変換したパラメータ構造体のデータを含む要求応答電文を生成し、ネットワーク4を介して、クライアント1に要求応答電文を送信する手段である。
【００５４】
パラメータ定義ソース解析手段224は、パラメータ定義ソース211に定義されているパラメータ構造体の構造とデータ形式を解析する手段である。処理効率化のため、一度解析したパラメータ構造体の解析結果は、ファイルやメモリにキャッシュしてもよい。同じパラメータ定義ソースに対して複数回の解析を行うことなく、キャッシュに保存した解析結果を使用すると効率がよい。
【００５５】
プロシージャ23は、クライアント1からの要求により実行する手続きであり、複数あってもよく、サーバスタブ22と同じ言語で実装する。
【００５６】
プロシージャ登録テーブル24は、プロシージャ名と実行するプロシージャ23を対応づけるテーブルであり、サーバスタブ22と同じ言語で記述する。実行するプロシージャを識別する情報と、実行に必要なプロシージャのアドレスの組を1レコードとして、複数のレコードで構成する。
【００５７】
本実施形態では、サーバスタブ22と、プロシージャ23と、プロシージャ登録テーブル24の実装言語をC言語とする。
【００５８】
プロシージャ登録テーブル24のプロシージャを識別する情報にはプロシージャ名を示す文字列を格納し、プロシージャのアドレスには関数ポインタを格納する。
【００５９】
なお、C言語は、コンパイル時に実行する手続きを確定する必要があるため、プロシージャ23と、プロシージャ23の関数ポインタを格納するプロシージャ登録テーブル24は、同時にコンパイルする必要がある。コンパイルしたプロシージャ23と、プロシージャ登録テーブル24は、サーバスタブ22にリンクして、サーバスタブ22から、プロシージャ名を使用してプロシージャ23を呼び出せる構成にする。
【００６０】
なお、Javaのリフレクションのように、名前から動的に手続きを実行できる仕組みを備えた言語でサーバスタブ22を実装する場合は、事前のリンクやプロシージャ登録テーブル24は不要である。
【００６１】
[動作の説明]
図2を使用してクライアント1の動作を説明する。
【００６２】
業務プログラム13は、実行要求するプロシージャを識別する情報と、プロシージャのパラメータ構造体のデータを入力にして、クライアントスタブ12の手続きを呼び出す。
【００６３】
プロシージャを識別する情報は、クライアント1とサーバ2の間で取り決めておけば、数値の形式でも、文字列の形式でもよい。本実施形態では、サーバ2において、プロシージャ登録テーブル24のプロシージャを識別する情報と、プロシージャ23とパラメータ定義ソース211との対応づけにプロシージャ名を使用するため、プロシージャを識別する情報は文字列の形式とする。文字コードについては、クライアント1とサーバ2の間で取り決めておけば任意であるが、クライアント1のCPU使用量を抑えることが本実施形態の主目的なので、クライアント1がローカルに使用する文字コードを使用する。
【００６４】
なお、実行要求するプロシージャのパラメータ構造体は、パラメータ定義ソース111で定義しているため、業務プログラム13のソースとあわせてコンパイルすることにより、業務プログラム13は、パラメータ構造体をローカル変数としてアクセスできる。
【００６５】
クライアントスタブ12は、業務プログラム13の実装言語を識別する情報と、実行要求するプロシージャを識別する情報と、プロシージャのパラメータ構造体のデータを入力にして実行要求手段121を呼び出す。業務プログラム13の言語を識別する情報は、クライアント1とサーバ2の間で取り決めておけば、数値の形式でも、文字列の形式でもよい。本実施形態では、サーバ2において、プロシージャとパラメータ定義ソースの対応づけに、実装言語の名前を使用するため、実装言語を識別する情報は文字列の形式とする。文字列コードについては、クライアント1とサーバ2の間で取り決めておけば任意であるが、クライアント1のCPU使用量を抑えることが本実施形態の主目的なので、クライアント1がローカルに使用する文字コードを使用する。
【００６６】
実行要求手段121は、業務プログラム13の言語を識別する情報と、実行要求するプロシージャを識別する情報と、プロシージャのパラメータ構造体のデータを含む実行要求電文を作成する。実行要求電文の形式は、クライアント1とサーバ2の間で取り決めておく。なお、パラメータ構造体のデータは整列化（データ表現形式変換）しないため、クライアント1の業務プログラム13の実装言語のデータ形式となっている。
【００６７】
作成した実行要求電文は、ネットワークを経由してサーバ2に送信し、サーバ2のプロシージャ23の実行状態を識別する情報と、プロシージャ23が更新したパラメータ構造体のデータとを含む実行応答電文の受信を待ち合わせる。実行要電文の形式は、クライアント1とサーバ2の間で取り決めておく。
【００６８】
実行応答電文を受信すると、電文からプロシージャの実行状態を識別する情報と、プロシージャの実行によって更新されたパラメータ構造体を取り出す。プロシージャの実行状態を識別する情報は、クライアント1とサーバ2の間で取り決めておけば、数値の形式でも、文字列の形式でもよく、本実施形態では数値の形式とする。例えば、プロシージャの実行が完了した場合は「０」を、プロシージャが登録されておらず実行できなかった場合は「１」を、プロシージャの実行中に例外が発生した場合は「２」を、パラメータ構造体の変換に失敗してプロシージャを実行できなかった場合は「３」を、プロシージャ実行後のパラメータ構造体の変換に失敗した場合は「４」を割り当てる。なお、数値のエンディアンは、クライアント1とサーバ2の間で取り決めておけば任意であるが、クライアント1のCPU使用量を抑えることが本実施形態の主目的なので、クライアント1がローカルに使用するエンディアンを使用する。
【００６９】
電文から取り出したプロシージャの実行状態を識別する情報は、クライアント1がローカルに使用するエンディアンで格納されているため、業務プログラム13にそのまま返却する。また、電文から取り出したパラメータ構造体のデータは、サーバ2でクライアント1の業務プログラム13の実装言語のデータ形式に変換されているため、業務プログラム13にそのまま返却する。
【００７０】
返却されたパラメータ構造体は、パラメータ定義ソース111で定義しているため、業務プログラム13のソースとあわせてコンパイルすることにより、業務プログラム13は、パラメータ構造体を、ローカル変数としてアクセスできる。
【００７１】
図3を使用してサーバ2の動作を説明する。
【００７２】
サーバスタブ22は、要求電文解析手段221を使用して、クライアント1からの実行要求電文の受信を待ち合わせる。実行要求電文を受信すると、要求電文解析手段221は、クライアント1とサーバ2の間の取り決めに従って、クライアント1の業務プログラム13の実装言語を識別する情報と、実行要求されたプロシージャを識別する情報と、プロシージャのパラメータ構造体のデータとを実行要求電文から取り出す。
【００７３】
要求電文解析手段221は、業務プログラム13の実装言語を識別する情報と、実行要求されたプロシージャ23を識別する情報から、業務プログラム13が使用するパラメータ定義ソース211を特定する。
【００７４】
また、サーバスタブ22の実装言語を識別する情報と、実行要求されたプロシージャ23を識別する情報から、プロシージャ23が使用するパラメータ定義ソース211を特定する。
【００７５】
業務プログラム13が使用するパラメータ定義ソース211と、プロシージャ23が使用するパラメータ定義ソース211を、パラメータ定義ソース解析手段224を使用してそれぞれ解析する。解析によって、それぞれの構造体に定義されている各変数について、構造体データの先頭からの開始オフセットとデータサイズ、および、データ形式を明らかにする。開始オフセットとデータサイズを明らかにする理由は、実装言語のデータ型によって異なる変数のサイズや、実装言語によって異なる構造体のパディングの違いを吸収するためである。変数のデータ形式を明らかにする理由は、実装言語のデータ型によって異なる格納形式の違いを吸収するためである。
【００７６】
例えば、COBOLの数値を格納する変数には複数のデータ型が存在し、データ型によって数値の格納形式が異なる。外部10進数で格納されていたり、内部10進数で格納されていたり、2進数で格納されていたりするため、それぞれに対応した変換ルールでサーバプラットフォームの形式に変換する必要がある。
【００７７】
また、COBOLの文字列を格納する変数には複数のデータ型が存在し、データ型によって文字列の格納形式が異なる。全てANK文字で構成されていたり、ANK文字と2バイト文字が混在して、ANK文字と2バイト文字が漢字INコードと漢字OUTコードで区切られる形式で構成されていたり、全て2バイト文字で構成されていて、漢字INコードと漢字OUTコードが付加されない形式で構成されていたりするため、それぞれに対応したルールでサーバプラットフォームの文字コードに変換する必要がある。
【００７８】
パラメータ定義ソースの構造を明らかにした上で、業務プログラム13が使用するパラメータ定義ソース211の形式で格納されているデータを、プロシージャ23が使用するパラメータ定義ソース211の形式に変換する。業務プログラム13とプロシージャ23のパラメータ定義ソースの構造体に定義されている各変数は、それぞれ定義順に対応しているとみなして、変数ごとに変換する。
【００７９】
例えば、業務プログラム13の実装言語がCOBOLで、サーバスタブ22の実装言語がC言語で、COBOLのコピー原文の変数が外部10進数で、対応するC言語の構造体の変数がchar型の配列の場合、外部10進数の各桁を、数値を表す文字に変換して、C言語の構造体の対応する変数のオフセットにコピーする。
【００８０】
また、COBOLのコピー原文の変数が外部10進数で、対応するC言語の構造体の変数がint型の場合、外部10進数を、サーバプラットフォームのエンディアンの4バイト2進数の形式に変換して、C言語の構造体の対応する変数のオフセットにコピーする。
【００８１】
また、COBOLのコピー原文の変数が内部10進数で、対応するC言語の構造体の変数がchar型の配列の場合、内部10進数の各桁を、数値を表す文字に変換して、C言語の構造体の対応する変数のオフセットにコピーする。
【００８２】
また、COBOLのコピー原文の変数が内部10進数で、対応するC言語の構造体の変数がint型の場合、内部10進数を、サーバプラットフォームのエンディアンの4バイト2進数の形式に変換して、C言語の構造体の対応する変数のオフセットにコピーする。
【００８３】
また、COBOLのコピー原文の変数が2進数で、対応するC言語の構造体の変数がchar型の配列の場合、2進数を10進数で表現したときの各桁を、数値を表す文字に変換して、C言語の構造体の対応する変数のオフセットにコピーする。
【００８４】
また、COBOLのコピー原文の変数が2進数で、対応するC言語の構造体の変数がint型の場合、2進数を、サーバプラットフォームのエンディアンの4バイト2進数の形式に変換して、C言語の構造体の対応する変数のオフセットにコピーする。
【００８５】
また、COBOLのコピー原文の変数が文字列で、対応するC言語の構造体の変数がchar型の配列の場合、文字列を、サーバプラットフォームの文字コードに変換して、C言語の構造体の対応する変数のオフセットにコピーする。
【００８６】
また、COBOLのコピー原文の変数が文字列で、対応するC言語の構造体の変数がint型の配列の場合、文字列が数値を表す文字で構成されていれば、文字列の各桁を数値とみなして、サーバプラットフォームのエンディアンの4バイト2進数の形式に変換して、C言語の構造体の対応する変数のオフセットにコピーする。
【００８７】
パラメータ構造体に定義された全ての変数について変換が成功した場合は、変換したパラメータ構造体を返却する。また、変換に失敗した場合は、プロシージャの実行状態を識別する情報として、パラメータ構造体の変換に失敗してプロシージャを実行できなかったことを意味する値「３」を返却する。
【００８８】
なお、パラメータ構造体の変換に失敗するケースには、例えば、業務プログラム13とプロシージャ23が使用するパラメータ構造体の変数の数が合わない場合や、数値を表す文字で構成されていない文字列を、数値型の変数に変換しようとした場合などがある。
【００８９】
サーバスタブ22は、要求電文解析手段221でパラメータ構造体の変換に失敗した場合、プロシージャの実行状態を識別する情報と、応答電文生成手段223を使用して、クライアント1に実行応答電文を送信する。その後、要求電文解析手段221を使用して、次の実行要求電文を待ち合わせに戻る。
【００９０】
要求電文解析手段221でパラメータ構造体の変換に成功した場合、プロシージャを識別する情報と、要求電文解析手段221で変換したパラメータ構造体のデータと、プロシージャ実行手段222を使用して、実行要求されたプロシージャを実行する。
【００９１】
プロシージャ実行手段222は、プロシージャを識別する情報をキーにしてプロシージャ登録テーブル24を検索する。対応するレコードがなければ、プロシージャの実行状態を識別する情報として、プロシージャが登録されておらず実行できなかったことを意味する値「１」を返却する。対応するレコードがあれば、該当レコードに登録されているプロシージャのアドレスを示す関数ポインタを使用して、プロシージャ23を実行する。プロシージャ23の引数となるパラメータ構造体のデータは、プロシージャ23の内部で更新できるように参照渡しとする。なお、引数となるパラメータ構造体は、パラメータ定義ソース111で定義しているため、プロシージャ23のソースとあわせてコンパイルすることにより、プロシージャ23は、パラメータ構造体をローカル変数としてアクセスできる。
【００９２】
プロシージャ23の実行中に例外が発生した場合は、プロシージャの実行状態を識別する情報として、プロシージャの実行中に例外が発生したことを意味する値「２」を返却する。
【００９３】
プロシージャ23の実行が完了した場合は、プロシージャの実行状態を識別する情報として、プロシージャの実行が完了したことを意味する値「０」と、プロシージャ23によって更新されたパラメータ構造体のデータを返却する。
【００９４】
サーバスタブ22は、プロシージャの実行状態を識別する情報と、プロシージャ23によって更新されたパラメータ構造体のデータと、応答電文生成手段223を使用して、クライアント1に実行応答電文を送信する。
【００９５】
応答電文生成手段223は、プロシージャの実行状態を識別する情報が、プロシージャの実行が完了したことを意味する値「０」でない場合、プロシージャの実行がなんらかの理由で失敗しているため、プロシージャの実行状態を識別する情報のみを含む実行応答電文を作成して、ネットワークを介して、クライアント1に送信する。その後、要求電文解析手段221を使用して、次の実行要求電文を待ち合わせに戻る。
【００９６】
応答電文生成手段223は、プロシージャの実行状態を識別する情報が、プロシージャの実行が完了したことを意味する値「０」の場合、プロシージャ23によって更新されたパラメータ構造体のデータ変換を行う。
【００９７】
要求電文解析手段221と同様に、パラメータ定義ソース解析手段224を使用して、業務プログラム13が使用するパラメータ定義ソース211と、プロシージャ23が使用するパラメータ定義ソース211とをそれぞれ解析する。
【００９８】
解析によって、それぞれの構造体に定義されている各変数について、構造体データの先頭からの開始オフセットとデータサイズ、および、データ形式を明らかにする。
【００９９】
パラメータ定義ソースの構造を明らかにした上で、プロシージャ23が使用するパラメータ定義ソース211の形式で格納されているデータを、業務プログラム13が使用するパラメータ定義ソース211の形式に変換する。業務プログラム13とプロシージャ23のパラメータ定義ソースの構造体に定義されている各変数は、それぞれ定義順に対応しているとみなして、変数ごとに変換する。
【０１００】
例えば、業務プログラム13の実装言語がCOBOLで、サーバスタブ22の実装言語がC言語で、COBOLのコピー原文の変数が外部10進数で、対応するC言語の構造体の変数がchar型の配列の場合、char型の配列が数値を表す文字で構成されていれば、char型の配列の各桁の文字を数値とみなし、COBOLの外部10進数の形式に変換して、コピー原文の対応するオフセットにコピーする。
【０１０１】
また、COBOLのコピー原文の変数が外部10進数で、対応するC言語の構造体の変数がint型の配列の場合、int型を10進数で表現したときの各桁を、外部10進数の形式に変換して、コピー原文の対応するオフセットにコピーする。
【０１０２】
また、COBOLのコピー原文の変数が内部10進数で、対応するC言語の構造体の変数がchar型の配列の場合、char型の配列が数値を表す文字で構成されていれば、char型の配列の各桁の文字を数値とみなし、COBOLの内部10進数の形式に変換して、コピー原文の対応するオフセットにコピーする。
【０１０３】
また、COBOLのコピー原文の変数が内部10進数で、対応するC言語の構造体の変数がint型の配列の場合、int型を10進数で表現したときの各桁を、内部10進数の形式に変換して、コピー原文の対応するオフセットにコピーする。
【０１０４】
また、COBOLのコピー原文の変数が2進数で、対応するC言語の構造体の変数がchar型の配列の場合、char型の配列が数値を表す文字で構成されていれば、char型の配列の各桁の文字を数値とみなし、クライアントプラットフォームのエンディアンで、COBOLの2進数の形式に変換して、コピー原文の対応するオフセットにコピーする。
【０１０５】
また、COBOLのコピー原文の変数が2進数で、対応するC言語の構造体の変数がint型の配列の場合、int型をクライアントプラットフォームのエンディアンで、COBOLの2進数の形式に変換して、コピー原文の対応するオフセットにコピーする。
【０１０６】
また、COBOLのコピー原文の変数が文字列で、対応するC言語の構造体の変数がchar型の配列の場合、文字列を、クライアントプラットフォームの文字コードに変換して、コピー原文の対応するオフセットにコピーする。
【０１０７】
また、COBOLのコピー原文の変数が文字列で、対応するC言語の構造体の変数がint型の配列の場合、int型を10進数で表現したときの各桁を、クライアントプラットフォームの文字コードで、数値を表す文字に変換して、コピー原文の対応するオフセットにコピーする。
【０１０８】
パラメータ構造体に定義された全ての変数について変換が成功した場合は、変換したパラメータ構造体と、プロシージャの実行状態を識別する情報として、プロシージャの実行が完了したことを意味する値「０」を含む実行応答電文を作成する。実行応答電文は、ネットワークを介して、クライアント1に送信する。その後、要求電文解析手段221を使用して、次の実行要求電文を待ち合わせに戻る。
【０１０９】
また、変換に失敗した場合は、プロシージャの実行状態を識別する情報として、プロシージャ実行後のパラメータ構造体の変換に失敗したことを意味する値「４」を含む実行応答電文を作成する。その後、要求電文解析手段221を使用して、次の実行要求電文を待ち合わせに戻る。
【０１１０】
[効果の説明]
第1の効果は、サーバと比較してクライアントの実行性能が低く、両者の性能差が大きいシステムにおいて、クライアントの処理がボトルネックになり難く、全体の実行効率が一般的なRPC技術に比べて高くなる点である。その理由は、クライアントスタブ12において、パラメータの整列化と非整列化（パラメータのデータ表現形式の変換と逆変換）を行わないため、クライアント1の処理は、データの移送とネットワークへのデータ送信のみとなり、一般的なRPC技術より、クライアントのCPU使用量が少ない構成を実現できるからである。サーバ2にパラメータ定義ソース解析手段224が必要になるが、サーバ2の実行性能の方が優れている前提なので問題にならない。
【０１１１】
第2の効果は、CPU利用量に応じて課金される料金体系のクライアントにおいて、一般的なRPC技術に比べて、CPU利用量が少なくなり運用コストを抑えられる点である。その理由は、クライアントスタブ12において、パラメータの整列化と非整列化（パラメータのデータ表現形式の変換と逆変換）を行わないため、クライアント1の処理は、データの移送とネットワークへのデータ送信のみとなり、一般的なRPC技術より、クライアントのCPU使用量が少ない構成を実現できるからである。
【０１１２】
第3の効果は、ソフトウエア開発の生産性が低いクライアントにおいて、一般的なRPC技術に比べて、クライアントスタブ12の開発コストを抑えられる点である。その理由は、クライアントスタブ12において、パラメータの整列化と非整列化（パラメータのデータ表現形式の変換と逆変換）を行わないため、クライアント1の処理は、データの移送とネットワークへのデータ送信のみとなり、一般的なRPC技術より、シンプルな構成を実現できるからである。
【０１１３】
第4の効果は、クライアントの業務アプリケーションの実装言語を特定せず、様々な実装言語に対応できる点である。その理由は、実行要求のパラメータ構造体のデータの解析に、業務アプリケーションのソースプログラムを使用するからである。ソースを使用して構造体のデータを解析することにより、実装言語によって異なる構造体のパディングの違いや、データの表現形式の違いを吸収できる。
【０１１４】
[第３の実施形態]
図3の構成では、実行できる手続きは、サーバ2のプロシージャに限られている。近年のオープンサーバには、優れたDBMS(DataBase Management System)が実現されており、メインフレームの業務プログラムから、これらのデータベースをダイレクトにアクセスするニーズが高まっている。本実施形態では、図2のクライアントの構成を変えずに、データベースサーバのストアドプロシージャを実行できるようにする。
【０１１５】
図4を参照すると、本実施形態は、第2の実施形態におけるサーバ2のプロシージャ23とプロシージャ登録テーブル24を、データベースアクセス手段25に置き換えている。また、サーバ2には、データベースサーバ3がネットワークを介して接続されている。
【０１１６】
サーバ2のデータベースアクセス手段25は、ネットワークを経由して、データベースサーバ3のデータベース管理手段31に、データベース33のアクセスや、ストアドプロシージャ32の実行を要求する手段である。本実施形態では、プロシージャ実行手段222から、データベースサーバ3のストアドプロシージャ32の実行を要求するために使用する。サーバスタブ22の実装言語をJava（登録商標）とし、データベースアクセス手段25は、JDBCドライバを使用する。
【０１１７】
データベースサーバ3は、データベース管理手段31と、ストアドプロシージャ32と、データベース33を備えるコンピュータシステムである。
【０１１８】
データベース管理手段31は、一般的なDBMSが相当する。データベース33を管理し、データ形式やアクセス手段を標準化して、特定のアプリケーションからデータを独立させる役割や、データのアクセス要求に応じて、必要なデータをデータベース33から取得して返却する機能を持つ。本実施形態では、データのアクセス要求として、ストアドプロシージャ32の実行要求を処理する。
【０１１９】
ストアドプロシージャ32は、データベースに対する一連の処理をまとめた手続きであり、処理のなかで、データベース33をアクセスすることができる。
【０１２０】
データベース33は、データベース管理手段31によって標準化されたデータを保持する領域であり、データベースサーバ3のファイルシステムに構築する。
【０１２１】
本実施形態の動作を説明する。
【０１２２】
第２の実施形態と比較して、クライアント1の動作に相違点はない。クライアント1の業務プログラム13は、実行要求するストアドプロシージャを識別する情報と、プロシージャのパラメータ構造体のデータを入力にして、クライアントスタブ12の手続きを呼び出し、ストアドプロシージャの実行が完了すると、ストアドプロシージャの実行状態を識別する情報とストアドプロシージャが更新したパラメータ構造体のデータを受け取る。
【０１２３】
なお、ストアドプロシージャの実行には、パラメータの入力と出力の方向を明確にする必要があるため、クライアント1とサーバ2の間で、方向を指定する方法を取り決める必要がある。本実施形態では、パラメータ定義ソースのパラメータ構造体の変数の名前によって方向を指定する。変数が入力の場合、変数名の先頭に「IN_」という文字列を付加する。変数が出力の場合、変数名の先頭に「OU_」という文字列を付加する。変数が入出力の場合、変数名の先頭に「IO_」という文字列を付加する。
【０１２４】
例えば、パラメータ定義ソースがCOBOLのコピー原文の場合、入力パラメータである整数と、出力パラメータである整数と、入出力パラメータである整数は、それぞれ次のように定義する。
01 PARAM.
02 IN_PARAM1 PIC S9(10).
02 OU_PARAM2 PIC S9(10).
02 IO_PARAM3 PIC S9(10).
【０１２５】
図4を参照してサーバ2の動作を説明する。第２の実施形態との相違点は、要求電文解析手段221と、プロシージャ実行手段222と、応答電文生成手段223の動作である。
【０１２６】
要求電文解析手段221は、業務プログラム13の実装言語を識別する情報と、実行要求されたストアドプロシージャを識別する情報から、業務プログラム13が使用するパラメータ定義ソース211を特定して、パラメータ定義ソース解析手段224を使用して解析する。
【０１２７】
パラメータ定義ソースの構造を明らかにした上で、業務プログラム13が使用するパラメータ定義ソース211の形式で格納されているデータを、サーバスタブ22の実装言語であるJavaのオブジェクトに変換する。ここでは、要求電文解析手段221はJavaのオブジェクトのデータ表現形式情報を保持していることを前提としているが、第2の実施形態と同様にプロシージャ実行側の言語の識別情報とプロシージャの識別情報との組合せに対応するパラメータ定義ソース211をパラメータ定義ソース解析手段224で解析して、Javaのオブジェクトのデータ表現形式情報を取得するようにしても良い。後述する応答電文生成手段223の場合も同様である。
【０１２８】
パラメータ構造体の入力および、入出力の変数について、定義順にオブジェクトに変換する。例えば、業務プログラム13の実装言語がCOBOLで、コピー原文の変数が外部10進数や、内部10進数や、2進数など、数値変数の場合、COBOLの数値形式を解析してBigDecimalオブジェクトに変換する。また、コピー原文の変数が文字列の場合、クライアント1の文字コードから、Javaの文字コードであるUNICODEへの文字コード変換を行い、Stringオブジェクトに変換する。
【０１２９】
パラメータ構造体に定義された全ての入力および、入出力の変数について、オブジェクトへの変換が成功した場合は、変換したオブジェクトを返却する。変換に失敗した場合は、ストアドプロシージャの実行状態を識別する情報として、パラメータ構造体の変換に失敗してストアドプロシージャを実行できなかったことを意味する値「３」を返却する。
【０１３０】
プロシージャ実行手段222は、ストアドプロシージャを識別する情報であるストアドプロシージャ名と、要求電文解析手段221で変換した入力および、入出力パラメータとなるJavaオブジェクトと、データベースアクセス手段25とを使用して、データベースサーバ3のデータベース管理手段31に、ストアドプロシージャ32の実行要求を行う。
【０１３１】
データベースアクセス手段25を使用して実行要求するとき、ストアドプロシージャのパラメータの個数の情報と、入力および、入出力パラメータとして指定するJavaオブジェクトが、それぞれ何番目のパラメータとなるかの指定が必要である。パラメータの個数は、パラメータ構造体に定義された変数の数とする。Javaオブジェクトのパラメータの順序は、Javaオブジェクトに対応するパラメータ構造体の変数の定義順とする。
【０１３２】
データベース管理手段31は、データベースアクセス手段25からの実行要求に応じてストアドプロシージャ32を実行する。ストアドプロシージャ32は、プロシージャ実行手段222が指定した、入力および、入出力パラメータを参照して処理を行い、出力および、入出力パラメータを更新する。
【０１３３】
ストアドプロシージャ32の実行が失敗した場合、プロシージャ実行手段222は、データベースアクセス手段25から、例外情報を受け取るので、ストアドプロシージャの実行状態を識別する情報として、プロシージャの実行中に例外が発生したことを意味する値「２」を返却する。なお、ストアドプロシージャの実行が失敗するケースには、例えば、ストアドプロシージャがデータベース管理手段31に登録されていなかった場合や、プロシージャ実行手段222が実行要求のときに指定したパラメータの個数や、入出力の方向が、実行するストアドプロシージャ32と一致しなかった場合などがある。
【０１３４】
ストアドプロシージャ32の処理が完了すると、プロシージャ実行手段222は、データベースアクセス手段25から、ストアドプロシージャの出力および、入出力パラメータを、Javaオブジェクトの形式で受けとる。ストアドプロシージャの実行状態を識別する情報として、ストアドプロシージャの実行が完了したことを意味する値「０」と、ストアドプロシージャ32の実行結果のJavaオブジェクトを返却する。
【０１３５】
応答電文生成手段223は、ストアドプロシージャの実行状態を識別する情報が、ストアドプロシージャの実行が完了したことを意味する値「０」でない場合、ストアドプロシージャの実行がなんらかの理由で失敗しているため、ストアドプロシージャの実行状態を識別する情報のみを含む実行応答電文を作成して、ネットワークを介して、クライアント1に送信する。その後、要求電文解析手段221を使用して、次の実行要求電文を待ち合わせに戻る。
【０１３６】
応答電文生成手段223は、ストアドプロシージャの実行状態を識別する情報が、ストアドプロシージャの実行が完了したことを意味する値「０」の場合、ストアドプロシージャ23の実行結果のJavaオブジェクトの変換を行う。
【０１３７】
要求電文解析手段221と同様に、パラメータ定義ソース解析手段224を使用して、業務プログラム13が使用するパラメータ定義ソース211を解析する。
【０１３８】
パラメータ定義ソースの構造を明らかにした上で、ストアドプロシージャ23の実行結果のJavaオブジェクトを、業務プログラム13が使用するパラメータ定義ソース211の形式に変換する。
【０１３９】
例えば、業務プログラム13の実装言語がCOBOLで、コピー原文の変数が外部10進数で、対応するJavaオブジェクトがBigDecimalオブジェクトの場合、BigDecimalオブジェクトの値を、COBOLの外部10進数の形式に変換して、コピー原文の対応するオフセットにコピーする。
【０１４０】
また、コピー原文の変数が外部10進数で、対応するJavaオブジェクトがStringオブジェクトの場合、文字列の各桁の文字を数値とみなし、COBOLの外部10進数の形式に変換して、コピー原文の対応するオフセットにコピーする。
【０１４１】
また、コピー原文の変数が内部10進数で、対応するJavaオブジェクトがBigDecimalオブジェクトの場合、BigDecimalオブジェクトの値を、COBOLの内部10進数の形式に変換して、コピー原文の対応するオフセットにコピーする。
【０１４２】
また、コピー原文の変数が内部10進数で、対応するJavaオブジェクトがStringオブジェクトの場合、文字列の各桁の文字を数値とみなし、COBOLの内部10進数の形式に変換して、コピー原文の対応するオフセットにコピーする。
【０１４３】
また、コピー原文の変数が2進数で、対応するJavaオブジェクトがBigDecimalオブジェクトの場合、BigDecimalオブジェクトの値を、クライアントプラットフォームのエンディアンで、COBOLの2進数の形式に変換して、コピー原文の対応するオフセットにコピーする。
【０１４４】
また、コピー原文の変数が2進数で、対応するJavaオブジェクトがStringオブジェクトの場合、文字列の各桁の文字を数値とみなし、クライアントプラットフォームのエンディアンで、COBOLの2進数の形式に変換して、コピー原文の対応するオフセットにコピーする。
【０１４５】
また、COBOLのコピー原文の変数が文字列で、対応するJavaオブジェクトがBigDecimalオブジェクトの場合、BigDecimalオブジェクトの値を10進数で表現したときの各桁を、クライアントプラットフォームの文字コードで、数値を表す文字に変換して、
コピー原文の対応するオフセットにコピーする。
【０１４６】
また、COBOLのコピー原文の変数が文字列で、対応するJavaオブジェクトがStringオブジェクトの場合、文字列を、クライアントプラットフォームの文字コードに変換して、コピー原文の対応するオフセットにコピーする。
【０１４７】
全ての出力および、入出力パラメータのオブジェクトについて変換が成功した場合は、変換したパラメータ構造体と、プロシージャの実行状態を識別する情報として、プロシージャの実行が完了したことを意味する値「０」を含む実行応答電文を作成する。実行応答電文は、ネットワークを介して、クライアント1に送信する。その後、要求電文解析手段221を使用して、次の実行要求電文を待ち合わせに戻る。
【０１４８】
また、オブジェクトの変換に失敗した場合は、プロシージャの実行状態を識別する情報として、プロシージャ実行後のパラメータ構造体の変換に失敗したことを意味する値「４」を含む実行応答電文を作成する。実行応答電文は、ネットワークを介して、クライアント1に送信する。その後、要求電文解析手段221を使用して、次の実行要求電文を待ち合わせに戻る。
【０１４９】
本実施形態の効果は、クライアント1にデータベースアクセス手段を実装することなく、データベースサーバ3のストアドプロシージャ23を実行できることである。サーバ2に閉じたプロシージャの実行だけではなく、データベースへのアクセスを業務プログラム13に提供できる。その理由は、サーバ2が代理で、データベースアクセス手段23を使用して、データベースサーバ3にアクセスする構成だからである。
【０１５０】
以上本発明を幾つかの実施形態を挙げて説明したが、本発明は以上の実施形態にのみ限定されず、その他各種の付加変更が可能である。また、本発明で必要な機能はコンピュータとプログラムとで実現することができる。プログラムは、磁気ディスクや半導体メモリ等のコンピュータ可読記録媒体に記録されて提供され、コンピュータの立ち上げ時などにコンピュータに読み取られ、そのコンピュータの動作を制御することにより、そのコンピュータを前述した各実施の形態におけるクライアントスタブ、サーバスタブ、データベースアクセス手段等として機能させる。
【符号の説明】
【０１５１】
１、５…クライアント
２、６…サーバ
３…データベースサーバ
４、７…ネットワーク
【図１】
0005732926.tif 000002
【図２】
0005732926.tif 000003
【図３】
0005732926.tif 000004
【図４】
0005732926.tif 000005