JP5732926B2 - リモートプロシージャコール処理方法 - Google Patents

リモートプロシージャコール処理方法 Download PDF

Info

Publication number
JP5732926B2
JP5732926B2 JP2011051102A JP2011051102A JP5732926B2 JP 5732926 B2 JP5732926 B2 JP 5732926B2 JP 2011051102 A JP2011051102 A JP 2011051102A JP 2011051102 A JP2011051102 A JP 2011051102A JP 5732926 B2 JP5732926 B2 JP 5732926B2
Authority
JP
Japan
Prior art keywords
procedure
execution
identification information
data representation
server
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2011051102A
Other languages
English (en)
Other versions
JP2012190102A (ja
Inventor
聡 横手
聡 横手
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2011051102A priority Critical patent/JP5732926B2/ja
Publication of JP2012190102A publication Critical patent/JP2012190102A/ja
Application granted granted Critical
Publication of JP5732926B2 publication Critical patent/JP5732926B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Computer And Data Communications (AREA)

Description

本発明はリモートプロシージャコール処理方法に関する。
近年、堅牢性を重視したメインフレームとは対照的に、オープンサーバでは実行性能の向上が継続されており、優れたサービスを提供する多数のソフトウエアが実現されている。
メインフレームの業務アプリケーションから、オープンサーバのソフトウエアをプロシージャとして遠隔実行することにより、メインフレームの業務アプリケーションをオープンサーバに移植することなく、機能の拡張が可能になる。
外部サーバのプロシージャを遠隔実行する既存技術のひとつに、RPC(Remote Procedure Call)がある。
一般的なRPC技術では、プロセス間やサーバ間の通信を介した遠隔実行において、ローカルの手続き呼び出しと同じ形式でプロシージャを実行できるようにするスタブと呼ばれるプログラムを使用する。
プロシージャを呼び出す側は、クライアントスタブを経由して遠隔実行を要求し、プロシージャを実行する側は、サーバスタブを経由して実行要求を受け付ける構成である。
クライアントスタブは、クライアントプラットフォームに依存したデータ表現形式の引数を、プラットフォーム非依存の形式に変換する(整列化するとも言う)機能と、変換後の引数を含む実行要求をネットワークに送信する機能と、遠隔サーバのサーバスタブから戻り値を含む実行応答を受信する機能と、実行応答に含まれる戻り値をクライアントプラットフォームのデータ表現形式に変換する(非整列化するとも言う)機能とを備えている。
また、サーバスタブは、クライアントスタブから受信した実行要求に含まれる引数を、サーバのプラットフォームのデータ表現形式に変換する機能と、変換後の引数を使用して要求されたプロシージャを実行する機能と、プロシージャ実行結果の戻り値をプラットフォーム非依存のデータ表現形式に変換する機能と、変換後の戻り値を含む実行応答をクライアントスタブへ送信する機能とを備えている。
他方、RPCの処理の一部を、プロシージャ要求側およびプロシージャ実行側間に介在するRPC要求代行処理装置に代行させる技術が特許文献1に記載されている。特許文献1に記載のRPC要求代行処理装置は、プロシージャ要求側およびプロシージャ実行側に関するデータ表現形式情報を記憶するクライアント/サーバディレクトリを有する。RPC要求代行処理装置は、クライアントからRPC要求を受信すると、上記のクライアント/サーバディレクトリに記載されたプロシージャ要求側およびプロシージャ実行側に関するデータ表現形式情報に基づき、プロシージャの引数をクライアント側のデータ表現形式からサーバ側のデータ表現形式に変換し、サーバにプロシージャの実行を依頼する。また、RPC要求代行処理装置は、サーバからRPC実行結果の要求を受信すると、上記のクライアント/サーバディレクトリに記載されたプロシージャ要求側およびプロシージャ実行側に関するデータ表現形式情報に基づき、プロシージャの戻り値をサーバ側のデータ表現形式からクライアント側のデータ表現形式に変換し、クライアントに返却する。
特開平5−113959号公報
メインフレームからRPC技術を使用してプロシージャの遠隔実行を要求する場合、クライアントとなるメインフレームには、クライアントスタブを配置し、プロシージャを実行するサーバには、サーバスタブを配置する。クライアントスタブとサーバスタブはともに、データ表現形式の変換とネットワークを介した送受信の処理とを行う。これらの処理のクライアントスタブとサーバスタブのCPU使用量は同程度である。従って、クライアントとサーバの実行性能が同程度であれば、両者の負荷がバランスするため、システムの実行効率は高い。しかし、サーバと比較して、クライアントとなるメインフレームの実行性能が低く、両者の性能差が大きい場合は、クライアントの処理がボトルネックとなり、システム全体の実行効率が低下する。
一方、特許文献1に記載の技術によれば、プロシージャの引数および戻り値のデータ表現形式の変換をRPC要求代行処理装置が行うため、クライアントおよびサーバの負荷が軽減される。しかしながら、特許文献1では、一つのクライアントは或る特定の1種類のデータ表現形式を使用することを前提としている。このため、一つのクライアントに、例えばC言語ベースの業務プログラムとCOBOL言語ベースの業務プログラムといった複数の業務プログラムが存在し、その結果として複数種類のデータ表現形式が存在する場合には、RPC要求代行処理装置によるRPC処理の代行は行えない。従って、そのような場合には、一般的なRPC技術と同様にクライアント側およびサーバ側でデータ表現形式の変換を行う必要があり、上述したと同様にクライアントの処理がボトルネックとなり、システム全体の実行効率が低下する。
本発明の目的は、上述したような課題、すなわち、リモートプロシージャコールでは、データ表現形式の変換のためにクライアントの負荷が増大する、という課題を解決するリモートプロシージャコール処理方法を提供することにある。
本発明の一形態にかかるリモートプロシージャコール処理方法は、
業務プログラムとクライアントスタブとを有するクライアント装置と、プロシージャ要求側およびプロシージャ実行側のデータ表現形式情報を記憶する記憶手段とサーバスタブとを有するサーバ装置とが、ネットワークを介して接続されたコンピュータシステムにおけるリモートプロシージャ処理方法であって、
上記業務プログラムが、プロシージャの識別情報とプロシージャの引数とを含む要求を送信すると、上記クライアントスタブが上記業務プログラムの言語の識別情報と上記要求中のプロシージャの識別情報とプロシージャの引数とを含む実行要求電文を上記ネットワークを経由して上記サーバスタブへ送信し、
上記サーバスタブが、受信した実行要求電文に含まれる上記言語の識別情報と上記プロシージャの識別情報との組合せに対応して上記記憶手段に記憶されているプロシージャ要求側のデータ表現形式情報と、自サーバスタブの言語の識別情報と上記プロシージャの識別情報との組合せに対応して上記記憶手段に記憶されているプロシージャ実行側のデータ表現形式情報とに基づいて、上記実行要求電文に含まれる上記引数をプロシージャ要求側のデータ表現形式からプロシージャ実行側のデータ表現形式に変換し、上記プロシージャの識別情報で特定されるプロシージャを実行する、
といった構成を採る。
本発明は上述したような構成を有するため、データ表現形式の変換をクライアント側で実施する必要がなく、クライアントの負荷を軽減することができる。
本発明の第1の実施形態のブロック図である。 本発明の第2の実施形態におけるクライアントのブロック図である。 本発明の第2の実施形態におけるサーバのブロック図である。 本発明の第3の実施形態におけるサーバのブロック図である。
次に本発明の実施の形態について図面を参照して詳細に説明する。
[第1の実施形態]
図1を参照すると、本発明の第1の実施形態は、クライアント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に含まれるプロシージャの識別情報で特定されるプロシージャ(図示せず)を実行する機能を有する。プロシージャは、サーバ6上に存在するプロシージャであってもよいし、サーバ6に接続されたデータベースシステム上に存在するプロシージャであってもよい。
応答電文生成手段65は、記憶手段61に記憶されたデータ表現形式情報に基づいて、プロシージャの戻り値をプロシージャ実行側のデータ表現形式からプロシージャ要求側のデータ表現形式に逆変換し、この逆変換した戻り値を含む応答電文51b2、52b2をネットワーク7経由でクライアント5へ送信する機能を有する。
次に本実施形態の動作を説明する。
今、業務プログラム51、52が利用するプロシージャの識別情報をFUNC1とする。このとき、サーバ装置6の記憶手段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の負荷を軽減することができる。その理由は、サーバ6の記憶手段61に、業務プログラムの言語の識別情報とプロシージャの識別情報との組合せに対応付けてデータ表現形式情報を保持しているため、同じクライアント5に種類の異なるデータ表現形式が存在しても対応できるためである。
また、本実施形態によれば、言語の識別情報とプロシージャの識別情報との組合せに対応付けてデータ表現形式情報を保持するため、引数として構造体型の引数を使用している場合でも対応が可能である。すなわち、複数のデータ型で構成される構造体データは、構造体内の変数の開始オフセットを最適化するために、実装言語によっては、変数と変数の間にダミーの領域(パディング)が挿入されるが、このダミーの領域に関する情報をデータ表現形式情報に含めておくことによって、構造体データに対応することができる。
[第2の実施形態]
[構成の説明]
図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の間で取り決めておけば、数値の形式でも、文字列の形式でもよく、本実施形態では数値の形式とする。例えば、プロシージャの実行が完了した場合は「0」を、プロシージャが登録されておらず実行できなかった場合は「1」を、プロシージャの実行中に例外が発生した場合は「2」を、パラメータ構造体の変換に失敗してプロシージャを実行できなかった場合は「3」を、プロシージャ実行後のパラメータ構造体の変換に失敗した場合は「4」を割り当てる。なお、数値のエンディアンは、クライアント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言語の構造体の対応する変数のオフセットにコピーする。
パラメータ構造体に定義された全ての変数について変換が成功した場合は、変換したパラメータ構造体を返却する。また、変換に失敗した場合は、プロシージャの実行状態を識別する情報として、パラメータ構造体の変換に失敗してプロシージャを実行できなかったことを意味する値「3」を返却する。
なお、パラメータ構造体の変換に失敗するケースには、例えば、業務プログラム13とプロシージャ23が使用するパラメータ構造体の変数の数が合わない場合や、数値を表す文字で構成されていない文字列を、数値型の変数に変換しようとした場合などがある。
サーバスタブ22は、要求電文解析手段221でパラメータ構造体の変換に失敗した場合、プロシージャの実行状態を識別する情報と、応答電文生成手段223を使用して、クライアント1に実行応答電文を送信する。その後、要求電文解析手段221を使用して、次の実行要求電文を待ち合わせに戻る。
要求電文解析手段221でパラメータ構造体の変換に成功した場合、プロシージャを識別する情報と、要求電文解析手段221で変換したパラメータ構造体のデータと、プロシージャ実行手段222を使用して、実行要求されたプロシージャを実行する。
プロシージャ実行手段222は、プロシージャを識別する情報をキーにしてプロシージャ登録テーブル24を検索する。対応するレコードがなければ、プロシージャの実行状態を識別する情報として、プロシージャが登録されておらず実行できなかったことを意味する値「1」を返却する。対応するレコードがあれば、該当レコードに登録されているプロシージャのアドレスを示す関数ポインタを使用して、プロシージャ23を実行する。プロシージャ23の引数となるパラメータ構造体のデータは、プロシージャ23の内部で更新できるように参照渡しとする。なお、引数となるパラメータ構造体は、パラメータ定義ソース111で定義しているため、プロシージャ23のソースとあわせてコンパイルすることにより、プロシージャ23は、パラメータ構造体をローカル変数としてアクセスできる。
プロシージャ23の実行中に例外が発生した場合は、プロシージャの実行状態を識別する情報として、プロシージャの実行中に例外が発生したことを意味する値「2」を返却する。
プロシージャ23の実行が完了した場合は、プロシージャの実行状態を識別する情報として、プロシージャの実行が完了したことを意味する値「0」と、プロシージャ23によって更新されたパラメータ構造体のデータを返却する。
サーバスタブ22は、プロシージャの実行状態を識別する情報と、プロシージャ23によって更新されたパラメータ構造体のデータと、応答電文生成手段223を使用して、クライアント1に実行応答電文を送信する。
応答電文生成手段223は、プロシージャの実行状態を識別する情報が、プロシージャの実行が完了したことを意味する値「0」でない場合、プロシージャの実行がなんらかの理由で失敗しているため、プロシージャの実行状態を識別する情報のみを含む実行応答電文を作成して、ネットワークを介して、クライアント1に送信する。その後、要求電文解析手段221を使用して、次の実行要求電文を待ち合わせに戻る。
応答電文生成手段223は、プロシージャの実行状態を識別する情報が、プロシージャの実行が完了したことを意味する値「0」の場合、プロシージャ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進数で表現したときの各桁を、クライアントプラットフォームの文字コードで、数値を表す文字に変換して、コピー原文の対応するオフセットにコピーする。
パラメータ構造体に定義された全ての変数について変換が成功した場合は、変換したパラメータ構造体と、プロシージャの実行状態を識別する情報として、プロシージャの実行が完了したことを意味する値「0」を含む実行応答電文を作成する。実行応答電文は、ネットワークを介して、クライアント1に送信する。その後、要求電文解析手段221を使用して、次の実行要求電文を待ち合わせに戻る。
また、変換に失敗した場合は、プロシージャの実行状態を識別する情報として、プロシージャ実行後のパラメータ構造体の変換に失敗したことを意味する値「4」を含む実行応答電文を作成する。その後、要求電文解析手段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の実施形態]
図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のファイルシステムに構築する。
本実施形態の動作を説明する。
第2の実施形態と比較して、クライアント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の動作を説明する。第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オブジェクトに変換する。
パラメータ構造体に定義された全ての入力および、入出力の変数について、オブジェクトへの変換が成功した場合は、変換したオブジェクトを返却する。変換に失敗した場合は、ストアドプロシージャの実行状態を識別する情報として、パラメータ構造体の変換に失敗してストアドプロシージャを実行できなかったことを意味する値「3」を返却する。
プロシージャ実行手段222は、ストアドプロシージャを識別する情報であるストアドプロシージャ名と、要求電文解析手段221で変換した入力および、入出力パラメータとなるJavaオブジェクトと、データベースアクセス手段25とを使用して、データベースサーバ3のデータベース管理手段31に、ストアドプロシージャ32の実行要求を行う。
データベースアクセス手段25を使用して実行要求するとき、ストアドプロシージャのパラメータの個数の情報と、入力および、入出力パラメータとして指定するJavaオブジェクトが、それぞれ何番目のパラメータとなるかの指定が必要である。パラメータの個数は、パラメータ構造体に定義された変数の数とする。Javaオブジェクトのパラメータの順序は、Javaオブジェクトに対応するパラメータ構造体の変数の定義順とする。
データベース管理手段31は、データベースアクセス手段25からの実行要求に応じてストアドプロシージャ32を実行する。ストアドプロシージャ32は、プロシージャ実行手段222が指定した、入力および、入出力パラメータを参照して処理を行い、出力および、入出力パラメータを更新する。
ストアドプロシージャ32の実行が失敗した場合、プロシージャ実行手段222は、データベースアクセス手段25から、例外情報を受け取るので、ストアドプロシージャの実行状態を識別する情報として、プロシージャの実行中に例外が発生したことを意味する値「2」を返却する。なお、ストアドプロシージャの実行が失敗するケースには、例えば、ストアドプロシージャがデータベース管理手段31に登録されていなかった場合や、プロシージャ実行手段222が実行要求のときに指定したパラメータの個数や、入出力の方向が、実行するストアドプロシージャ32と一致しなかった場合などがある。
ストアドプロシージャ32の処理が完了すると、プロシージャ実行手段222は、データベースアクセス手段25から、ストアドプロシージャの出力および、入出力パラメータを、Javaオブジェクトの形式で受けとる。ストアドプロシージャの実行状態を識別する情報として、ストアドプロシージャの実行が完了したことを意味する値「0」と、ストアドプロシージャ32の実行結果のJavaオブジェクトを返却する。
応答電文生成手段223は、ストアドプロシージャの実行状態を識別する情報が、ストアドプロシージャの実行が完了したことを意味する値「0」でない場合、ストアドプロシージャの実行がなんらかの理由で失敗しているため、ストアドプロシージャの実行状態を識別する情報のみを含む実行応答電文を作成して、ネットワークを介して、クライアント1に送信する。その後、要求電文解析手段221を使用して、次の実行要求電文を待ち合わせに戻る。
応答電文生成手段223は、ストアドプロシージャの実行状態を識別する情報が、ストアドプロシージャの実行が完了したことを意味する値「0」の場合、ストアドプロシージャ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オブジェクトの場合、文字列を、クライアントプラットフォームの文字コードに変換して、コピー原文の対応するオフセットにコピーする。
全ての出力および、入出力パラメータのオブジェクトについて変換が成功した場合は、変換したパラメータ構造体と、プロシージャの実行状態を識別する情報として、プロシージャの実行が完了したことを意味する値「0」を含む実行応答電文を作成する。実行応答電文は、ネットワークを介して、クライアント1に送信する。その後、要求電文解析手段221を使用して、次の実行要求電文を待ち合わせに戻る。
また、オブジェクトの変換に失敗した場合は、プロシージャの実行状態を識別する情報として、プロシージャ実行後のパラメータ構造体の変換に失敗したことを意味する値「4」を含む実行応答電文を作成する。実行応答電文は、ネットワークを介して、クライアント1に送信する。その後、要求電文解析手段221を使用して、次の実行要求電文を待ち合わせに戻る。
本実施形態の効果は、クライアント1にデータベースアクセス手段を実装することなく、データベースサーバ3のストアドプロシージャ23を実行できることである。サーバ2に閉じたプロシージャの実行だけではなく、データベースへのアクセスを業務プログラム13に提供できる。その理由は、サーバ2が代理で、データベースアクセス手段23を使用して、データベースサーバ3にアクセスする構成だからである。
以上本発明を幾つかの実施形態を挙げて説明したが、本発明は以上の実施形態にのみ限定されず、その他各種の付加変更が可能である。また、本発明で必要な機能はコンピュータとプログラムとで実現することができる。プログラムは、磁気ディスクや半導体メモリ等のコンピュータ可読記録媒体に記録されて提供され、コンピュータの立ち上げ時などにコンピュータに読み取られ、そのコンピュータの動作を制御することにより、そのコンピュータを前述した各実施の形態におけるクライアントスタブ、サーバスタブ、データベースアクセス手段等として機能させる。
1、5…クライアント
2、6…サーバ
3…データベースサーバ
4、7…ネットワーク

Claims (7)

  1. 業務プログラムとクライアントスタブとを有するクライアント装置と、言語の識別情報とプロシージャの識別情報との組合せに対応付けてデータ表現形式情報を記憶する記憶手段とサーバスタブとを有するサーバ装置とが、ネットワークを介して接続されたコンピュータシステムにおけるリモートプロシージャ処理方法であって、
    前記業務プログラムが、プロシージャの識別情報とプロシージャの引数とを含む要求を送信すると、前記クライアントスタブが前記業務プログラムの言語の識別情報と前記要求中のプロシージャの識別情報とプロシージャの引数とを含む実行要求電文を前記ネットワークを経由して前記サーバスタブへ送信し、
    前記サーバスタブが、受信した実行要求電文に含まれる前記言語の識別情報と前記プロシージャの識別情報との組合せに対応して前記記憶手段に記憶されているプロシージャ要求側のデータ表現形式情報と、自サーバスタブの言語の識別情報と前記プロシージャの識別情報との組合せに対応して前記記憶手段に記憶されているプロシージャ実行側のデータ表現形式情報とに基づいて、前記実行要求電文に含まれる前記引数をプロシージャ要求側のデータ表現形式からプロシージャ実行側のデータ表現形式に変換し、前記プロシージャの識別情報で特定されるプロシージャを実行し、
    前記サーバスタブが、前記変換に使用した前記データ表現形式情報に基づいて、前記プロシージャの戻り値をプロシージャ実行側のデータ表現形式からプロシージャ要求側のデータ表現形式に逆変換し、応答電文を前記ネットワーク経由で前記クライアントスタブへ送信する
    ことを特徴とするリモートプロシージャコール処理方法。
  2. 前記プロシージャの引数および戻り値は構造体であり、前記サーバスタブは引数の構造体の値を書き換えて前記クライアントスタブに返却する
    ことを特徴とする請求項1に記載のリモートプロシージャコール処理方法。
  3. 前記プロシージャは、前記サーバ装置に接続されるデータベースシステム上に存在する
    ことを特徴とする請求項1または2に記載のリモートプロシージャコール処理方法。
  4. 前記プロシージャは、前記サーバ装置上に存在する
    ことを特徴とする請求項1または2に記載のリモートプロシージャコール処理方法。
  5. 言語の識別情報とプロシージャの識別情報との組合せに対応付けてデータ表現形式情報を記憶する記憶手段と、
    サーバスタブとを有し、
    前記サーバスタブは、
    業務プログラムの言語の識別情報とプロシージャの識別情報とプロシージャの引数とを含む実行要求電文をクライアント装置のクライアントスタブから受信すると、該受信した実行要求電文に含まれる前記言語の識別情報と前記プロシージャの識別情報との組合せに対応して前記記憶手段に記憶されているプロシージャ要求側のデータ表現形式情報と、自サーバスタブの言語の識別情報と前記プロシージャの識別情報との組合せに対応して前記記憶手段に記憶されているプロシージャ実行側のデータ表現形式情報とに基づいて、前記実行要求電文に含まれる前記引数をプロシージャ要求側のデータ表現形式からプロシージャ実行側のデータ表現形式に変換する要求電文解析手段と、
    前記変換後の引数を使用して、前記プロシージャの識別情報で特定されるプロシージャを実行するプロシージャ実行手段と
    前記変換に使用した前記データ表現形式情報に基づいて、前記プロシージャの戻り値をプロシージャ実行側のデータ表現形式からプロシージャ要求側のデータ表現形式に逆変換し、応答電文を前記ネットワーク経由で前記クライアントスタブへ送信する応答電文生成手段と
    を有することを特徴とするサーバ装置。
  6. 前記プロシージャの引数および戻り値は構造体であり、前記サーバスタブは引数の構造体の値を書き換えて前記クライアントスタブに返却する
    ことを特徴とする請求項に記載のサーバ装置。
  7. 言語の識別情報とプロシージャの識別情報との組合せに対応付けてデータ表現形式情報を記憶する記憶手段を有するコンピュータを、
    業務プログラムの言語の識別情報とプロシージャの識別情報とプロシージャの引数とを含む実行要求電文をクライアント装置のクライアントスタブから受信すると、該受信した実行要求電文に含まれる前記言語の識別情報と前記プロシージャの識別情報との組合せに対応して前記記憶手段に記憶されているプロシージャ要求側のデータ表現形式情報と、自サーバスタブの言語の識別情報と前記プロシージャの識別情報との組合せに対応して前記記憶手段に記憶されているプロシージャ実行側のデータ表現形式情報とに基づいて、前記実行要求電文に含まれる前記引数をプロシージャ要求側のデータ表現形式からプロシージャ実行側のデータ表現形式に変換する要求電文解析手段と、
    前記変換後の引数を使用して、前記プロシージャの識別情報で特定されるプロシージャを実行するプロシージャ実行手段と
    前記変換に使用した前記データ表現形式情報に基づいて、前記プロシージャの戻り値をプロシージャ実行側のデータ表現形式からプロシージャ要求側のデータ表現形式に逆変換し、応答電文を前記ネットワーク経由で前記クライアントスタブへ送信する応答電文生成手段と
    して機能させるためのプログラム。
JP2011051102A 2011-03-09 2011-03-09 リモートプロシージャコール処理方法 Active JP5732926B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011051102A JP5732926B2 (ja) 2011-03-09 2011-03-09 リモートプロシージャコール処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011051102A JP5732926B2 (ja) 2011-03-09 2011-03-09 リモートプロシージャコール処理方法

Publications (2)

Publication Number Publication Date
JP2012190102A JP2012190102A (ja) 2012-10-04
JP5732926B2 true JP5732926B2 (ja) 2015-06-10

Family

ID=47083217

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011051102A Active JP5732926B2 (ja) 2011-03-09 2011-03-09 リモートプロシージャコール処理方法

Country Status (1)

Country Link
JP (1) JP5732926B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6472368B2 (ja) * 2015-11-25 2019-02-20 キヤノン株式会社 情報処理装置、情報処理装置の制御方法、及びプログラム

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001167059A (ja) * 1999-12-09 2001-06-22 Hitachi Ltd サービス要求装置およびデータ変換方法およびクライアントオブジェクトを有する計算機
US7275079B2 (en) * 2000-08-08 2007-09-25 International Business Machines Corporation Common application metamodel including C/C++ metamodel
JP2003084992A (ja) * 2001-09-07 2003-03-20 Fujitsu Ltd クライアントサーバ間のrpc接続プログラム

Also Published As

Publication number Publication date
JP2012190102A (ja) 2012-10-04

Similar Documents

Publication Publication Date Title
JP5400305B2 (ja) 式の処理を改良した方法、装置、およびコンピュータプログラム
US6418448B1 (en) Method and apparatus for processing markup language specifications for data and metadata used inside multiple related internet documents to navigate, query and manipulate information from a plurality of object relational databases over the web
US7689709B2 (en) Native format tunneling
US20020099738A1 (en) Automated web access for back-end enterprise systems
US8145608B2 (en) Method and system for rapidly processing and transporting large XML files
US7240101B2 (en) Method and apparatus for efficiently reflecting complex systems of objects in XML documents
JP2005018777A (ja) 共通問い合わせ実行時システムおよびアプリケーションプログラミングインターフェイス
EP1390861A2 (en) Service provision system and method
JP2007249785A (ja) コンパイルプログラム、仮想データベースリモートアクセス用プログラムの製造方法、及び仮想データベースのリモートアクセス方法
CN102395950A (zh) 与数据存储系统的通信
US20070198973A1 (en) Computer-implemented method, system, and program product for deployment time optimization of a distributed application
US6766350B1 (en) Shared management of data objects in a communication network
JP2008165340A (ja) 遠隔手続呼出方式
US6516354B2 (en) Method and apparatus for efficient representation of variable length identifiers in a distributed object system
US20080098346A1 (en) Mapping Web Services Description Language documents to XQuery functions
US20070156737A1 (en) Application integration systems and methods
US8250587B2 (en) Non-persistent and persistent information setting method and system for inter-process communication
US20070106778A1 (en) Information and status and statistics messaging method and system for inter-process communication
JP5732926B2 (ja) リモートプロシージャコール処理方法
AU2019425532B2 (en) System and methods for loading objects from hash chains
EP1122644A1 (en) A method and system for dynamically dispatching function calls from a first execution environment to a second execution environment
US11966719B2 (en) Event consumption for high-level programing language platform
US20240036946A1 (en) Event provisioning for high-level programing language platform
Clark et al. A Harness Language for Cooperative Information Systems
Saeed et al. REST with Jakarta EE REST API

Legal Events

Date Code Title Description
RD07 Notification of extinguishment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7427

Effective date: 20120719

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140207

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20141029

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141111

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150105

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150317

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150330

R150 Certificate of patent or registration of utility model

Ref document number: 5732926

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150