JP2012128581A - 通信コード生成装置および関数利用コンピュータおよび関数公開コンピュータおよびコンピュータシステムおよび通信コード生成方法およびプログラム - Google Patents

通信コード生成装置および関数利用コンピュータおよび関数公開コンピュータおよびコンピュータシステムおよび通信コード生成方法およびプログラム Download PDF

Info

Publication number
JP2012128581A
JP2012128581A JP2010278408A JP2010278408A JP2012128581A JP 2012128581 A JP2012128581 A JP 2012128581A JP 2010278408 A JP2010278408 A JP 2010278408A JP 2010278408 A JP2010278408 A JP 2010278408A JP 2012128581 A JP2012128581 A JP 2012128581A
Authority
JP
Japan
Prior art keywords
function
code
communication
computer
unit
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.)
Pending
Application number
JP2010278408A
Other languages
English (en)
Inventor
Akihiro Miura
昭浩 三浦
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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric 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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2010278408A priority Critical patent/JP2012128581A/ja
Publication of JP2012128581A publication Critical patent/JP2012128581A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Transfer Between Computers (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】コンピュータ間の通信において、処理毎に通信相手先からの応答を待つことが必要な為に通信処理に時間がかかる。
【解決手段】通信コード生成装置100において、ソースプログラム解析処理部108が、コンピュータ間の通信に用いられる通信コードのインタフェース仕様と、通信コードの呼出し処理を実装したソースプログラムとを解析した上で通信相手先からの複数の応答を一つにまとめて受け取れる箇所を抽出し、その解析結果に基づいてユーザプログラム編集部111が通信相手先からの応答を減らしたユーザプログラムを生成する。また、ユーザプログラム編集部111が生成したユーザプログラムに対応する通信コードを関数利用通信コード編集部112と関数公開通信コード編集部113とにより生成する。そして、通信相手先からの応答を減らすことでコンピュータ間の通信性能を向上することが出来る。
【選択図】図4

Description

この発明は、互いに通信を行う関数利用コンピュータおよび関数公開コンピュータ、および関数利用コンピュータと関数公開コンピュータとの通信に用いられる通信コードを生成する通信コード生成装置、および通信コード生成方法、およびプログラムに関する。
一般にコンピュータは、オペレーティングシステム(以下OSと称する)を備え、OSを用いて様々な動作を行う。そして、例えば、複数の種類の異なるオペレーティングシステム(マルチオペレーティングシステム。以下、マルチOSと称する)を備える組込みシステムや、クライアント/サーバシステムなどのコンピュータシステムは、種類の異なるオペレーティングシステム間の通信を行う。(クライアント/サーバ間の通信においては、主にメッセージ通信を行う)。コンピュータシステムは、異なるOS間の通信を、インタフェース仕様やデータ長といった定義情報に基づいて生成された通信コードをユーザプログラム内から呼び出すことで実現している。(定義情報とは、例えばサーバ側にてクライアント向けに公開している関数のインタフェース仕様をIDL(アイディーエル、インタフェース記述言語)にて定義された情報である)。
ここで、通信コードとは、ユーザプログラムを作成するユーザが種類の異なるOS間の通信仕様(手段や手順)を理解しなくても種類の異なるOS間の通信の処理を実現出来るようにしたプログラムである。そして、通信コードとは、異なるOS間の通信の処理を実現出来るように所定の関数のインタフェース定義から、コンパイラにより生成したOS間の通信の処理を実装したプログラムのことである。
また以下、所定の関数を公開するコンピュータを関数公開コンピュータ、関数公開コンピュータが公開した関数を利用するコンピュータを関数利用コンピュータと称する。関数公開コンピュータは、例えばサーバであり、関数利用コンピュータは例えばクライアント端末やユーザ端末である。
また、マルチOSにおいて、関数公開コンピュータが備えるオペレーティングシステムを関数公開オペレーティングシステム(以下、関数公開OSと称する)、関数利用コンピュータが備えるオペレーティングシステムを関数利用オペレーティングシステム(以下、関数利用OSと称する)。
また、以下の説明において、関数公開コンピュータが備える通信コードを関数公開通信コード、関数利用コンピュータが備える通信コードを関数利用通信コードと表記するが、特にコンピュータの区別が必要無い場合は、前述と同様に単に「通信コード」と表記する。同様に後述する「通信スタブコード」についても、関数公開コンピュータが備える通信スタブコードを関数公開通信スタブコード、関数利用コンピュータが備える通信スタブコードを関数利用通信スタブコードと表記するが、特にコンピュータの区別が必要無い場合は、単に「通信スタブコード」と表記する。なお、ここで「通信スタブコード」とは「通信コード」を生成するにあたり、基となる暫定的な通信コードを意味する。
また、通信コード生成装置が生成する「通信コード」と「通信スタブコード」とは、例えばC言語などのプログラム言語で記述されたソースコードである。(ここで、プログラム言語は、C言語に限定されるものでは無い)。そして、ユーザプログラムが実行された際に、関数公開コンピュータおよび関数利用コンピュータが使用する「通信コード」と「通信スタブコード」とは、コンパイラによりコンパイルされたオブジェクトコードである。(「通信コードの実行コード」もしくは「通信スタブコードの実行コード」である)。
通信コードは、所定の関数毎に生成される。そして、関数利用OS(関数利用コンピュータ)は、関数公開OS(関数公開コンピュータ)が公開した所定の関数を利用する場合に、所定の関数毎の通信コードを用いて、所定の関数の処理に用いる引数を関数公開OSに送信する。そして、関数利用OSは、関数公開OSが所定の関数の処理を行った結果の応答の受信を所定の関数の利用毎に待機する。この為、OS間の応答(例えばメッセージの送受信)の数が多くなり、OS間の通信性能を低下させる。
IDLは、関数利用OSに対して、予め関数の処理結果の応答を返す又は返さない、いずれかの処理を固定して通信コードを生成することが可能である。しかし、この場合ユーザが通信コードをユーザプログラムから呼び出す場合に、関数の処理結果の応答の有無を意識して、ユーザプログラムを作成しなければならず、ユーザの作業負荷が高くなる。また、この方法は、同じ通信コードを用いて、ユーザプログラム内のある処理では応答を必ず待つようにし、別の処理では応答を待たないようにしたい場合には、対応出来ない。
OS間の通信性能を向上させる方法としては、公開する関数の粒度を大きくすることで、関数利用OS(関数利用コンピュータ)から通信コードを呼び出す回数を減らす方法がある(例えば、特許文献1参照)。
しかし、関数利用OS(関数利用コンピュータ、クライアント)に公開する関数(通信コード)の粒度を大きくして提供する方法でも、複数の関数(通信コード)を連続して呼び出したような場合、関数利用OSは、通信コード実行時に必ず関数公開OS(関数公開コンピュータ、サーバ)からの応答を待つことになる。そして、関数利用OSと関数公開OSとの通信処理における性能は、低下する。例えば、関数利用OS側の通信コードでは要求メッセージ生成と要求メッセージの送信、および応答メッセージの受信/解釈を行い、関数公開OS側では要求メッセージの受信/解釈と関数の実行、および応答メッセージの生成、応答メッセージの返信を毎回行っている。その為、関数利用OSと関数公開OSとの通信処理は、処理時間がかかる問題がある。
特開2008−234535号公報
この発明の実施の形態は、例えば、コンピュータ間における通信性能を向上させることを目的とする。
この発明に係る通信コード生成装置は、
関数の計算依頼情報を送信して関数を計算した計算結果情報を受信する関数利用コンピュータで実行されるユーザプログラムと関数利用通信コードと、前記関数の計算依頼情報を受信して関数を計算し前記関数を計算した計算結果情報を関数利用コンピュータに送信する関数公開コンピュータで実行される関数公開通信コードとを生成する通信コード生成装置において、
関数を呼び出す呼び出し命令が記述されたソースプログラムを記憶装置に記憶するソースプログラム記憶部と、
前記呼び出し命令を受け取り前記関数の計算依頼情報を生成して前記関数公開コンピュータに前記計算依頼情報を送信して前記関数を計算した計算結果情報を前記関数公開コンピュータから受信する処理を前記関数利用コンピュータに行わせる命令が記述された関数利用通信スタブコードを予め記憶装置に記憶する関数利用通信スタブコード記憶部と、
前記関数利用コンピュータから関数の計算依頼情報を受信し、関数の計算を実行させ前記関数を計算した計算結果情報を前記関数利用コンピュータへ送信する処理を前記関数公開コンピュータに行わせる命令が記述された関数公開通信スタブコードを予め記憶装置に記憶する関数公開通信スタブコード記憶部と、
前記ユーザプログラムを記憶装置に記憶するユーザプログラム記憶部Aと、
関数利用通信コードを記憶装置に記憶する関数利用通信コード記憶部Aと、
関数公開通信コードを記憶装置に記憶する関数公開通信コード記憶部Aと、
前記ソースプログラム記憶部に記憶されたソースプログラムを読み込んでソースプログラムに記述された呼び出し命令が連続して呼び出され、かつ、連続して呼び出された呼び出し命令が、互いに独立した第1の関数の呼び出し命令と第2の関数の呼び出し命令とで記述されているか否かを解析するソースプログラム解析処理部と、
前記ソースプログラム解析処理部が解析した結果、呼び出し命令が連続して呼び出され、かつ、連続して呼び出された呼び出し命令が、互いに独立した第1の関数の呼び出し命令と第2の関数の呼び出し命令とで記述されている場合に、前記第1の関数の呼び出し命令を、第1の関数名と第1の関数の計算結果情報の送信の保留を前記関数公開コンピュータに対して指示する保留識別符号とを含む第1の呼び出し命令に書き換え、前記第2の関数の呼び出し命令を、第2の関数名と前記第1の関数の計算結果情報と第2の関数の計算結果情報との送信を前記関数公開コンピュータに対して指示する送信識別符号とを含む第2の呼び出し命令に書き換えて編集したソースプログラムをユーザプログラムとしてユーザプログラム記憶部Aに記憶するユーザプログラム編集部と、
前記関数利用通信スタブコード記憶部に記憶された関数利用通信スタブコードを読み込んで、前記関数利用コンピュータが実行するユーザプログラムから前記第1の呼び出し命令を受け取り前記第1の関数名を含む第1の関数の計算依頼情報と前記保留識別符号とを前記関数公開コンピュータに送信し、前記第1の関数の計算結果情報の受信を待たずに前記関数利用コンピュータが実行するユーザプログラムから前記第2の呼び出し命令を受け取り前記第2の関数名を含む第2の関数の計算依頼情報と前記送信識別符号とを前記関数公開コンピュータに送信し、前記第1の関数の計算結果情報と前記第2の関数の計算結果情報とを前記関数公開コンピュータから受信するように関数利用通信スタブコードを編集し、編集した関数利用通信スタブコードを関数利用通信コードとして関数利用通信コード記憶部Aに記憶する関数利用通信コード編集部と、
前記関数公開通信スタブコード記憶部に記憶された関数公開通信スタブコードを読み込んで、前記関数利用コンピュータから前記第1の関数の計算依頼情報と前記第2の関数の計算依頼情報とを受信した場合に、前記第1の関数名に基づいて第1の関数コードを呼び出して第1の関数の計算を実行させ、かつ、前記第2の関数名に基づいて第2の関数コードを呼び出して第2の関数の計算を実行させるとともに、前記第1の関数の計算依頼情報とともに前記第1の関数の計算結果情報の送信の保留を指示する前記保留識別符号を受信したか判断して、前記保留識別符号を受信した場合に前記第1の関数の計算結果情報の送信を保留し、前記関数利用コンピュータから前記第2の関数の計算依頼情報とともに前記第2の関数の計算結果情報の送信を指示する前記送信識別符号を受信したか判断して、前記送信識別符号を受信した場合に保留していた前記第1の関数の計算結果情報と前記第2の関数の計算結果情報とを前記関数利用コンピュータへ送信するように関数公開通信スタブコードを編集し、編集した関数公開通信スタブコードを関数公開通信コードとして関数公開通信コード記憶部Aに記憶する関数公開通信コード編集部と
を備えたことを特徴とする。
この発明に係る通信コード生成装置は、コンピュータ間における通信性能を向上させることが可能となる。特にこの発明に係る通信コード生成装置は、異なるオペレーティングシステムを備えるコンピュータ間における通信性能を向上させることが可能となる。
実施の形態1を示す図で、通信コード生成装置100の外観の一例を示す図。 実施の形態1を示す図で、通信コード生成装置100のハードウェア資源の一例を示す図。 実施の形態1を示す図で、コンピュータシステム500の構成を示す図。 実施の形態1を示す図で、通信コード生成装置100の構成を示す図。 実施の形態1を示す図で、関数利用コンピュータ200の構成を示す図。 実施の形態1を示す図で、関数公開コンピュータ300の構成を示す図。 実施の形態1を示す図で、関数利用通信スタブコードとソースプログラムを基に関数利用通信コードとユーザプログラムを作成する際の手順を示すフロー図。 実施の形態1を示す図で、インタフェース定義の例を示す図。 実施の形態1を示す図で、関数利用通信スタブコードの例を示す図。 実施の形態1を示す図で、ソースプログラムの例を示す図。 実施の形態1を示す図で、ソースプログラムを実行した場合の処理シーケンスを示す図。 実施の形態1を示す図で、関数利用通信コードの例を示す図。 実施の形態1を示す図で、ユーザプログラムの例を示す図。 実施の形態1を示す図で、ユーザプログラムを実行した場合の処理シーケンスを示す図。 実施の形態2を示す図で、編集ログの記録部を有する通信コード生成装置100の構成を示す図。 実施の形態2を示す図で、編集ログの具体例を示す図。 実施の形態3を示す図で、編集ログの情報を利用してユーザプログラムを編集前の処理に編集(復元)するための復元部を有する通信コード生成装置100の構成を示す図。 実施の形態3を示す図で、ユーザが編集(復元)箇所を指定した例を示す図。 実施の形態3を示す図で、ユーザプログラム復元部122が編集(復元)したユーザプログラムの例を示す図。 実施の形態4を示す図で、転送データの受け渡し方法を変更するユーザプログラム通信方式変更部124と通信コード通信方式変更部126とを有する通信コード生成装置100の構成を示す図。
実施の形態1.
本実施の形態では、異なるオペレーティングシステムを備えるコンピュータ間における通信に用いられる通信性能を向上させた通信コードを生成する通信コード生成装置の例を説明する。また通信コード生成装置が生成した通信コードを用いたコンピュータシステムの例を説明する。
最初に、図1、図2、図3を用いて通信コード生成装置100とコンピュータシステム500との概要を説明する。
図1は、実施の形態1における通信コード生成装置100の外観の一例を示す図である。
図2は、実施の形態1における通信コード生成装置100のハードウェア資源の一例を示す図である。
図3は、コンピュータシステム500の構成を示す図である。
図1において、通信コード生成装置100は、システムユニット910、CRT(Cathode・Ray・Tube)やLCD(液晶)の表示画面を有する表示装置901、キーボード902(Key・Board:K/B)、マウス903、FDD904(Flexible・Disk・ Drive)、コンパクトディスク装置905(CDD)、プリンタ装置906、スキャナ装置907などのハードウェア資源を備え、これらはケーブルや信号線で接続されている。
システムユニット910は、コンピュータであり、ファクシミリ機932、電話器931とケーブルで接続され、また、ローカルエリアネットワーク942(LAN)、ゲートウェイ941を介してインターネット940に接続されている。
図2において、通信コード生成装置100は、プログラムを実行するCPU911(Central・Processing・Unit、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう)を備えている。CPU911は、バス912を介してROM913、RAM914、通信ボード915、表示装置901、キーボード902、マウス903、FDD904、CDD905、プリンタ装置906、スキャナ装置907、磁気ディスク装置920と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置920の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。
RAM914は、揮発性メモリの一例である。ROM913、FDD904、CDD905、磁気ディスク装置920の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。
通信ボード915、キーボード902、スキャナ装置907、FDD904などは、入力部、入力装置の一例である。
また、通信ボード915、表示装置901、プリンタ装置906などは、出力部、出力装置の一例である。
通信ボード915は、ファクシミリ機932、電話器931、LAN942等に接続されている。通信ボード915は、LAN942に限らず、インターネット940、ISDN等のWAN(ワイドエリアネットワーク)などに接続されていても構わない。インターネット940或いはISDN等のWANに接続されている場合、ゲートウェイ941は不用となる。
磁気ディスク装置920には、オペレーティングシステム921(OS)、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。プログラム群923のプログラムは、CPU911、オペレーティングシステム921、ウィンドウシステム922により実行される。
上記プログラム群923には、以下に述べる実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、CPU911により読み出され実行される。
ファイル群924には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の計算結果」、「〜の処理結果」として説明する情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してCPU911によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのCPUの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のCPUの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、RAM914のメモリ、FDD904のフレキシブルディスク、CDD905のコンパクトディスク、磁気ディスク装置920の磁気ディスク、その他光ディスク、ミニディスク、DVD(Digital・Versatile・Disk)等の記録媒体に記録される。また、データや信号は、バス912や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
また、以下に述べる実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」、「手段」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ROM913に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVD等の記録媒体に記憶される。プログラムはCPU911により読み出され、CPU911により実行される。すなわち、プログラムは、以下に述べる「〜部」としてコンピュータを機能させるものである。あるいは、以下に述べる「〜部」の手順や方法をコンピュータに実行させるものである。
なお、以上は通信コード生成装置100について説明したが、関数利用コンピュータ200および関数公開コンピュータ300も通信コード生成装置100と同様のハードウェア資源を備える。(同様である為、説明は省略する)。
図3において、コンピュータシステム500は、通信コード生成装置100と関数利用コンピュータ200と関数公開コンピュータ300とを備える。関数利用コンピュータ200は、例えばクライアント/サーバシステムにおけるクライアントである。関数公開コンピュータ300は、例えばクライアント/サーバシステムにおけるサーバである。関数利用コンピュータ200と関数公開コンピュータ300とは、通信コード生成装置100が生成した通信コード及びユーザプログラムを用いて通信を行う。
また、コンピュータシステム500において、ユーザプログラムは関数利用コンピュータ200が備えるオペレーティングシステムである関数利用オペレーティングシステムにより動作する。また、関数コードは関数公開コンピュータ300が備えるオペレーティングシステムである関数公開オペレーティングシステムにより動作する。そして、関数利用オペレーティングシステムと関数公開オペレーティングシステムとは異なるオペレーティングシステムであることも可能である。
なお、ここで関数コードとは、関数を計算する為のプログラムである。また、関数コードは関数公開コンピュータ300が公開する関数毎に準備され、関数公開コンピュータ300の記憶装置に記憶されている。(以後、関数公開コンピュータ300が公開する関数を「公開関数」と称する)。また、関数コードは関数公開コンピュータ300(関数公開OS)が実行可能なオブジェクトコードである。
次に、図4を用いて通信コード生成装置100の構成を説明する。
図4は、通信コード生成装置100の構成を示す図である。
入力部101は、ユーザがマウスやキーボード等を用いて既に定義済みであるインタフェース定義から通信コードを生成したい関数の選択やソースプログラム、ユーザプログラムの解析などを指示するためのもの情報を入力するである。
ここで、ソースプログラムを基に後述のユーザプログラム編集部111が編集を施したプログラムを「ユーザプログラム」と称し、ユーザプログラム編集部111が編集を施す以前のプログラムを「ソースプログラム」と称する。また、通信コード生成装置100(ユーザプログラム編集部111)が編集を行う「ユーザプログラム」と「ソースプログラム」とは、例えばC言語などプログラム言語で記述されたソースコードである。(ここで、プログラム言語はC言語に限定されるものでは無い)。そして、関数利用コンピュータが実行する「ユーザプログラム」とは、コンパイラによりコンパイルされたオブジェクトコードである。(「ユーザプログラムの実行コード」もしくは「ソースプログラムの実行コード」である)。
インタフェース定義格納部102は、関数利用OSに対して公開している関数公開OS側の関数のインタフェース仕様(戻り値や引数のデータ型、引数の入出力タイプなど)を定義したインタフェース定義を管理する。
インタフェース定義抽出部103は、インタフェース定義格納部102に格納されているインタフェース定義(関数のリスト)を抽出する。
インタフェース定義一覧表示部104は、インタフェース定義抽出部103で抽出したインタフェース定義を一覧表示する。そして、ユーザは、インタフェース定義一覧表示部104に表示されたインタフェース定義から通信コードを生成したい関数をユーザが入力部101を用いて選択する。
通信コード自動生成処理部105は、インタフェース定義格納部102に記憶された関数のインタフェース仕様のうちユーザに選択された関数のインタフェース仕様に基づいて関数利用OSで利用可能な関数利用通信スタブコードと関数公開OSで利用可能な関数公開通信スタブコードとを自動生成する。
関数利用通信スタブコード記憶部109は、通信コード自動生成処理部105が生成した関数利用通信スタブコードを記憶する。
関数公開通信スタブコード記憶部110は、通信コード自動生成処理部105が生成した関数公開通信スタブコードを記憶する。
ソースプログラム解析実行指示部106は、通信コード自動生成処理部105にて自動生成した通信スタブコード(関数利用通信スタブコード)を実装したソースプログラムの解析を指示する。
ソースプログラム記憶部117は、通信スタブコード(関数利用通信スタブコード)の呼び出し処理を実装したソースプログラムを記憶する。(ソースプログラムは、例えばユーザによって予め作成されている)。
ソースプログラム読込み処理部107は、ソースプログラム解析実行指示部106からのソースプログラムの解析要求指示に従い、ソースプログラムの読み込みをソースプログラム記憶部117から行う。ここで、ソースプログラムは、入力部101を用いて指定された通信スタブコード(関数利用通信スタブコード)の呼び出し処理を実装したものである。
ソースプログラム解析処理部108は、ソースプログラム読込み処理部107にて読み込まれたソースプログラム内で呼び出されている通信スタブコード(関数利用通信スタブコード)に対してインタフェース定義抽出部103より抽出したインタフェース定義を基にソースプログラムを解析する。(解析内容の詳細は後述する)。
関数利用通信コード編集部112は、ソースプログラム解析処理部108による解析結果を基に、通信コード自動生成処理部105にて自動生成された関数利用通信スタブコードを、関数利用通信コードとして通信性能を向上するように編集する。(編集内容の詳細は後述する)。
関数公開通信コード編集部113は、ソースプログラム解析処理部108による解析結果を基に、通信コード自動生成処理部105にて自動生成された関数公開通信スタブコードを、関数公開通信コードとして通信性能を向上するように編集する。(編集内容の詳細は後述する)。
関数利用通信コード記憶部A114は、関数利用通信コード編集部112で編集された関数利用通信コードを記憶する。
関数公開通信コード記憶部A115は、関数公開通信コード編集部113で編集された関数公開通信コードを記憶する。
ユーザプログラム編集部111は、ソースプログラム解析処理部108による解析結果と関数利用通信コード編集部112にて編集された関数利用通信コードを基に、通信性能を向上させる為にソースプログラムの関数利用通信スタブコードを呼び出す箇所を編集する。そして、ユーザプログラム編集部111は、編集したソースプログラムをユーザプログラムとして生成する。(ユーザプログラム編集部111が編集したソースプログラムをユーザプログラムと称する)。
ユーザプログラム記憶部A116は、ユーザプログラム編集部111が生成(編集)したユーザプログラムを記憶する。
ここで、通信コード生成装置100の概要を述べる。
通信コード生成装置100は、関数の計算依頼情報を送信して関数を計算した計算結果情報を受信する関数利用コンピュータ200で実行されるユーザプログラムと関数利用通信コードと、関数の計算依頼情報を受信して関数を計算し関数を計算した計算結果情報を関数利用コンピュータ200に送信する関数公開コンピュータ300で実行される関数公開通信コードとを生成する。
そして、通信コード生成装置100は、関数を呼び出す呼び出し命令が記述されたソースプログラムを記憶装置に記憶するソースプログラム記憶部117を備える。
そして、通信コード生成装置100は、呼び出し命令を受け取り関数の計算依頼情報を生成して関数公開コンピュータ300に計算依頼情報を送信して関数を計算した計算結果情報を関数公開コンピュータ300から受信する処理を関数利用コンピュータ200に行わせる命令が記述された関数利用通信スタブコードを予め記憶装置に記憶する関数利用通信スタブコード記憶部109を備える。
そして、通信コード生成装置100は、関数利用コンピュータ200から関数の計算依頼情報を受信し、関数の計算を実行させ関数を計算した計算結果情報を関数利用コンピュータ200へ送信する処理を関数公開コンピュータ300に行わせる命令が記述された関数公開通信スタブコードを予め記憶装置に記憶する関数公開通信スタブコード記憶部110を備える。
そして、通信コード生成装置100は、ユーザプログラムを記憶装置に記憶するユーザプログラム記憶部A116と、関数利用通信コードを記憶装置に記憶する関数利用通信コード記憶部A114と、関数公開通信コードを記憶装置に記憶する関数公開通信コード記憶部A115とを備える。
そして、通信コード生成装置100は、ソースプログラム記憶部117に記憶されたソースプログラムを読み込んでソースプログラムに記述された呼び出し命令が連続して呼び出され、かつ、連続して呼び出された呼び出し命令が、互いに独立した第1の関数の呼び出し命令と第2の関数の呼び出し命令とで記述されているか否かを解析するソースプログラム解析処理部108を備える。
そして、通信コード生成装置100は、ソースプログラム解析処理部108が解析した結果、呼び出し命令が連続して呼び出され、かつ、連続して呼び出された呼び出し命令が、互いに独立した第1の関数の呼び出し命令と第2の関数の呼び出し命令とで記述されている場合に、第1の関数の呼び出し命令を、第1の関数名と第1の関数の計算結果情報の送信の保留を関数公開コンピュータ300に対して指示する保留識別符号とを含む第1の呼び出し命令に書き換え、第2の関数の呼び出し命令を、第2の関数名と第1の関数の計算結果情報と第2の関数の計算結果情報との送信を関数公開コンピュータ300に対して指示する送信識別符号とを含む第2の呼び出し命令に書き換えて編集したソースプログラムをユーザプログラムとしてユーザプログラム記憶部A116に記憶するユーザプログラム編集部111を備える。
そして、通信コード生成装置100は、関数利用通信スタブコード記憶部109に記憶された関数利用通信スタブコードを読み込んで、関数利用コンピュータ200が実行するユーザプログラムから第1の呼び出し命令を受け取り第1の関数名を含む第1の関数の計算依頼情報と保留識別符号とを関数公開コンピュータ300に送信し、第1の関数の計算結果情報の受信を待たずに関数利用コンピュータ200が実行するユーザプログラムから第2の呼び出し命令を受け取り第2の関数名を含む第2の関数の計算依頼情報と送信識別符号とを関数公開コンピュータ300に送信し、第1の関数の計算結果情報と第2の関数の計算結果情報とを関数公開コンピュータ300から受信するように関数利用通信スタブコードを編集し、編集した関数利用通信スタブコードを関数利用通信コードとして関数利用通信コード記憶部A114に記憶する関数利用通信コード編集部112を備える。
そして、通信コード生成装置100は、関数公開通信スタブコード記憶部110に記憶された関数公開通信スタブコードを読み込んで、関数利用コンピュータ200から第1の関数の計算依頼情報と第2の関数の計算依頼情報とを受信した場合に、第1の関数名に基づいて第1の関数コードを呼び出して第1の関数の計算を実行させ、かつ、第2の関数名に基づいて第2の関数コードを呼び出して第2の関数の計算を実行させるとともに、第1の関数の計算依頼情報とともに第1の関数の計算結果情報の送信の保留を指示する保留識別符号を受信したか判断して、保留識別符号を受信した場合に第1の関数の計算結果情報の送信を保留し、関数利用コンピュータ200から第2の関数の計算依頼情報とともに第2の関数の計算結果情報の送信を指示する送信識別符号を受信したか判断して、送信識別符号を受信した場合に保留していた第1の関数の計算結果情報と第2の関数の計算結果情報とを関数利用コンピュータ200へ送信するように関数公開通信スタブコードを編集し、編集した関数公開通信スタブコードを関数公開通信コードとして関数公開通信コード記憶部A115に記憶する関数公開通信コード編集部113を備える。
更に、ソースプログラム解析処理部108は、ソースプログラムに記述された呼び出し命令が連続して呼び出され、かつ、連続して呼び出された呼び出し命令が、互いに独立した3つ以上の呼び出し命令である場合に、互いに独立した3つ以上の呼び出し命令の内、最後に呼び出される呼び出し命令を第2の関数の呼び出し命令と判断し、その他の呼び出し命令を第1の関数の呼び出し命令と判断する。
次に、図5を用いて関数利用コンピュータ200の構成を説明する。
図5は、関数利用コンピュータ200の構成を示す図である。
ユーザプログラム記憶部B210は、通信コード生成装置100のユーザプログラム記憶部A116が記憶したユーザプログラムと同じユーザプログラムを記憶する。
関数利用通信コード記憶部B220は、通信コード生成装置100の関数利用通信コード記憶部A114が記憶した関数利用通信コードと同じ関数利用通信コードを記憶する。
ユーザプログラム実行部230は、ユーザプログラム記憶部B210が記憶したユーザプログラムを実行する。
関数利用通信部240は、ユーザプログラム実行部230が実行したユーザプログラムの実行に伴って、関数公開コンピュータ300と通信を行う。
ここで、関数利用コンピュータ200の概要を述べる。
関数利用コンピュータ200は、関数の計算依頼情報を受信し関数を計算して計算結果情報を送信する関数公開コンピュータ300に対して計算依頼情報を送信して計算結果情報を受信する。
そして、関数利用コンピュータ200は、第1の関数名と、第1の関数の計算結果情報の送信の保留を関数公開コンピュータ300に対して指示する保留識別符号とを含む第1の呼び出し命令と、第2の関数名と保留されている第1の関数の計算結果情報と第2の関数の計算結果情報との送信を関数公開コンピュータ300に対して指示する送信識別符号とを含む第2の呼び出し命令とを有するユーザプログラムを記憶装置に記憶するユーザプログラム記憶部B210を備える。
そして、関数利用コンピュータ200は、ユーザプログラムから第1の呼び出し命令を受け取り第1の関数名を含む第1の関数の計算依頼情報と保留識別符号とを関数公開コンピュータ300に送信し、第1の関数の計算結果情報の受信を待たずにユーザプログラムから第2の呼び出し命令を受け取り第2の関数名を含む第2の関数の計算依頼情報と送信識別符号とを関数公開コンピュータ300に送信し、第1の関数の計算結果情報と第2の関数の計算結果情報とを関数公開コンピュータ300から受信する処理をCPUに行わせる命令が記述された関数利用通信コードを記憶装置に記憶する関数利用通信コード記憶部B220を備える。
そして、関数利用コンピュータ200は、関数公開コンピュータ300と通信を行う関数利用通信部240を備える。
そして、関数利用コンピュータ200は、ユーザプログラム記憶部B210が記憶するユーザプログラムを読み込み、ユーザプログラムが有する第1の呼び出し命令と第2の呼び出し命令とを実行し、第1の呼び出し命令と第2の呼び出し命令とに基づいて関数利用通信コード記憶部B220が記憶する関数利用通信コードを実行して、関数利用通信部240により第1の関数の計算依頼情報と第2の関数の計算依頼情報とを関数公開コンピュータ300に送信し、関数利用通信部240により第1の関数の計算結果情報と第2の関数の計算結果情報とを関数公開コンピュータ300から受信するユーザプログラム実行部230を備える。
次に、図6を用いて関数公開コンピュータ300の構成を説明する。
図6は、関数公開コンピュータ300の構成を示す図である。
関数記憶部310は、関数を計算するプログラムである関数コードを記憶する。
関数公開通信コード記憶部B320は、通信コード生成装置100の関数公開通信コード記憶部A115が記憶した関数公開通信コードと同じ関数公開通信コードを記憶する。
関数公開通信部340は、関数利用コンピュータ200からの要求に基づき関数利用コンピュータ200と通信する。
関数計算実行部330は、関数公開通信部340が受信した関数利用コンピュータ200からの要求に基づき関数記憶部310が記憶する所定の関数コードの計算を実行する。
計算結果保留部350は、所定の場合に関数計算実行部330が実行した関数コードの計算結果を記憶する。
ここで、関数公開コンピュータ300の概要を述べる。
関数公開コンピュータ300は、関数の計算依頼情報を送信して関数を計算した計算結果情報を受信する関数利用コンピュータ200から関数の計算依頼情報を受信して関数を計算し関数を計算した計算結果情報を関数利用コンピュータ200に送信する。
そして、関数公開コンピュータ300は、第1の関数を計算する第1の関数コードと、第2の関数を計算する第2の関数コードとを記憶装置に記憶する関数記憶部310を備える。
そして、関数公開コンピュータ300は、関数の計算結果情報を保留する計算結果保留部350と、関数利用コンピュータ200と通信を行う関数公開通信部340とを備える。
そして、関数公開コンピュータ300は、関数公開通信部340が関数利用コンピュータ200から第1の関数の計算依頼情報と第2の関数の計算依頼情報とを受信して、第1の関数名に基づいて関数記憶部310が記憶する第1の関数コードを呼び出して第1の関数の計算を実行させ、かつ、第2の関数名に基づいて第2の関数コードを呼び出して第2の関数の計算を実行させるとともに、第1の関数の計算依頼情報とともに計算結果情報の送信の保留を指示する保留識別符号を受信したか判断して、保留識別符号を受信した場合に第1の関数の計算結果情報を計算結果保留部350に記憶して第1の関数の計算結果情報の送信を保留し、関数公開通信部340が関数利用コンピュータ200から第2の関数の計算依頼情報とともに計算結果情報の送信を指示する送信識別符号を受信したか判断して、送信識別符号を受信した場合に計算結果保留部350に保留していた第1の関数の計算結果情報と第2の関数の計算結果情報とを関数公開通信部340により関数利用コンピュータ200へ送信する処理をCPUに行わせる命令が記述された関数公開通信コードを記憶装置に記憶する関数公開通信コード記憶部B320を備える。
そして、関数公開コンピュータ300は、関数公開通信部340により受信した第1の関数の計算依頼情報と第2の関数の計算依頼情報とに基づき、関数公開通信コード記憶部B320が記憶する関数公開通信コードを実行し、関数記憶部310が記憶する第1の関数コードによる第1の関数の計算と第2の関数コードによる第2の関数の計算とを行い第1の関数の計算結果情報と第2の関数の計算結果情報とを得て第1の関数の計算結果情報と第2の関数の計算結果情報とを関数公開通信コードに伝達する関数計算実行部330を備える。
次に、図7、図8、図9、図10、図11、図12、図13、図14を用い、具体例を挙げて説明する。
なお、説明中にプログラミング言語による記述が有るが、例えばC言語などプログラミング言語によるものであり、個々の関数や変数などの詳細な説明は省略する。(ここでプログラム言語はC言語に限定されるものでは無い)。
図7は、関数利用通信スタブコードとソースプログラムを基に関数利用通信コードとユーザプログラムを作成する際の手順を示すフロー図である。
図8は、インタフェース定義の例を示す図である。
図9は、関数利用通信スタブコードの例を示す図である。
図10は、ソースプログラムの例を示す図である。
図11は、ソースプログラムを実行した場合の処理シーケンスを示す図である。
図12は、関数利用通信コードの例を示す図である。
図13は、ユーザプログラムの例を示す図である。
図14は、ユーザプログラムを実行した場合の処理シーケンスを示す図である。
まず、図7に示すステップS1において、関数公開コンピュータ300は、関数を公開すると共に、公開する関数(関数コード)のインタフェース定義も公開している。そして、インタフェース定義格納部102は、そのインタフェース定義を格納している。
図8にインタフェース定義格納部102が格納しているそのインタフェース定義の例を示す。図8は、4つの関数(func1、func2、func3、func4)のインタフェース定義を示している。実際は、多数の関数のインタフェース定義を格納可能であるが、図示の簡略化の為に、4つの関数のみを図示する。
1つ目の関数のインタフェース定義である「short func1( in short x, out short y)」は、戻り値のデータ型が「short」であり、関数公開コンピュータ300が公開している公開関数名が「func1」であることを示している。また、この関数は2つの引数を用いている。1つ目の引数は、引数の入出力タイプが「in」すなわち、関数に値を渡す為の入力引数であり、引数のデータ型が「short」であり、引数名が「x」であることを示している。2つ目の引数は、引数の入出力タイプが「out」すなわち、関数から値を受け取る為の出力引数であり、引数のデータ型が「short」であり、引数名が「y」であることを示している。
2つ目の関数のインタフェース定義である「short func2( in short num, in short param)」は、1つ目の関数と同様に2つの引数を用いているが、2つの引数とも引数の入出力タイプが「in」であることを示している。
3つ目の関数のインタフェース定義である「long func3( in short z)」は、戻り値のデータ型が「long」であり、入出力タイプが「in」の引数を1つだけ用いていることを示している。
4つ目の関数のインタフェース定義である「short func1( in char a, out long b)」は、2つの引数を用いている。1つ目の引数は、引数の入出力タイプが「in」であり、引数のデータ型が「char」であり、引数名が「a」であることを示している。2つ目の引数は、引数の入出力タイプが「out」であり、引数のデータ型が「long」であり、引数名が「b」であることを示している。
次に、図7に示すステップS2において、ユーザはユーザプログラム(またはソースプログラム)に用いる為に必要な関数、すなわちユーザプログラム(またはソースプログラム)から呼び出したい関数を入力部101により入力装置を用いて選択する。
インタフェース定義抽出部103は予め、インタフェース定義格納部102に格納されている関数のインタフェース定義を抽出している。そして、インタフェース定義一覧表示部104は、例えば表示装置901にインタフェース定義抽出部103が抽出した関数のインタフェース定義の一覧を表示する。インタフェース定義一覧表示部104は、例えば図8に示す「short func1( in short x,out short y)」や「short func2( in short num,in short param)」などを一覧表示する。そして、ユーザは、入力部101(例えば、キーボード902や、マウス903)を用いて、表示された関数のインタフェース定義の一覧から、必要な関数の関数名及び必要な関数のインタフェース定義を選択することが可能である。
本説明においては、ユーザは、図8に示すfunc1〜func3の3つの関数を選択したと仮定する。
次に、図7に示すステップS3において、通信コード自動生成処理部105は、選択された関数のインタフェース定義から、関数利用通信スタブコードと関数公開通信スタブコードを自動生成する。そして、自動生成された関数利用通信スタブコードと関数公開通信スタブコードとは、それぞれ関数利用通信スタブコード記憶部109と関数公開通信スタブコード記憶部110とに記憶される。
図9に関数利用通信スタブコードの例を示す。(関数利用通信スタブコードと関数公開通信スタブコードとは、関数利用側のコンピュータと関数公開側のコンピュータ(もしくは関数利用OSと関数公開OS)と異なる環境で用いられるために、プログラムの記述が異なる場合があるが、本実施の形態における説明の主旨には影響しない為、ここでは、関数利用通信スタブコードについてのみ具体例の説明を行う)。
図9の例では、「short stub_func1」「short stub_func2」「short stub_func3」の3つの関数利用通信スタブコードの例を示している。(「short stub_func3」に関しては、関数内部の記述の図示を省略している)。
関数利用通信スタブコード「short stub_func1」は、関数「func1」に対応しており、関数利用通信スタブコード「short stub_func2」は、関数「func2」に対応しており、関数利用通信スタブコード「short stub_func3」は、関数「func3」に対応している。
通信コード自動生成処理部105により、自動生成された関数利用通信スタブコードは、関数名の先頭に例えば「stub_」が付加される。「stub_」が付加された関数利用通信スタブコードは、ユーザプログラム(またはソースプログラム)が通信コードの呼び出し処理を実装した際にユーザプログラム(またはソースプログラム)内の既存の関数と区別できるようになっている。なお、本実施の形態では関数利用通信スタブコードは、関数名の先頭に「stub_」を付加したが、ユーザプログラム(またはソースプログラム)内の既存の関数との区別が付けられれば何でも良い。
図9に示すように関数利用通信スタブコードは、一連の処理の後に「res=sendMessage( msg );」によって、必ず関数公開OSからの応答を受け取るようになっている。(通信コード自動生成処理部105は、関数のインタフェース定義から判断して、図9に示すような例えば「res=sendMessage( msg );」のような処理を含ませた通信コードの生成が可能である)。
次に、図7のステップS4において、ユーザは、ユーザが作成したソースプログラムに関数利用通信スタブコードの呼び出し処理を実装する。そして、ユーザは、関数利用通信スタブコードの呼び出し処理を実装したソースプログラムをソースプログラム記憶部117に記憶させることを指示する情報を例えば入力部101を用いて入力する。
図10に、関数利用通信スタブコードの呼び出し処理を実装したソースプログラムの例を示す。なお、図10では、ソースプログラムの内、関数利用通信スタブコードの呼び出し処理を実装した部分だけを抜粋している。
図10の例では、ユーザは、例えば入力部101(もしくはキーボード902やマウス903)を用いてソースプログラムに「stub_func1」「stub_func2」「stub_func3」の3つの関数利用通信スタブコードの呼び出し処理を実装する記述を行っている。
次に、図7のステップS5において、関数利用コンピュータ200のユーザプログラム実行部230は、ソースプログラムを実行して、OS間(もしくはクライアント/サーバ間、もしくは関数利用コンピュータ200/関数公開コンピュータ300間)の通信が行われているか確認する。そして、ユーザプログラム実行部230は、関数公開OS(もしくはサーバ)上の関数が関数利用OS(もしくはクライアント)側からの実行要求に応じて正常に実行されていることを確認する。すなわち、ユーザプログラム実行部230は、ソースプログラム(ユーザプログラム)をデバッグする。
あるいは、ユーザが、ユーザプログラム実行部230が実行したソースプログラムの実行結果(例えばエラー処理結果など)を例えば関数利用コンピュータ200の表示装置901などで確認する。そして、ユーザが入力部101(もしくはキーボード902やマウス903)を用いてソースプログラムの編集(デバッグ)を行う。
なお、ここで、関数利用通信コード編集部112は、関数利用通信スタブコードの編集を行わず、関数利用通信スタブコードをそのまま関数利用通信コードとして、関数利用通信コード記憶部A114に記憶させている。同様に関数公開通信コード編集部113は、関数公開通信スタブコードの編集を行わず、関数公開通信スタブコードをそのまま関数公開通信コードとして、関数公開通信コード記憶部A115に記憶させている。
そして、関数利用コンピュータ200の関数利用通信コード記憶部B220は、関数利用通信コード記憶部A114が記憶した関数利用通信コード(関数利用通信スタブコード)を記憶する。そして、関数利用コンピュータ200は、関数利用通信コード(関数利用通信スタブコード)を関数利用OSで動作可能なようにコンパイルし、関数利用通信コードの実行コード(例えばexeファイル)を生成する。更に関数利用通信コード記憶部B220は、関数利用通信コードを関数利用OSで動作可能なようにコンパイルされた関数利用通信コードの実行コード(例えばexeファイル)を記憶する。
同様に、関数公開コンピュータ300の関数公開通信コード記憶部B320は、関数公開通信コード記憶部A115が記憶した関数公開通信コード(関数公開通信スタブコード)を記憶する。そして、関数公開コンピュータ300は、関数公開通信コード(関数公開通信スタブコード)を関数公開OSで動作可能なようにコンパイルして関数公開通信コードの実行コード(例えばexeファイル)を生成する。更に関数公開通信コード記憶部B320は、関数公開通信コードを関数公開OSで動作可能なようにコンパイルされた関数公開通信コードの実行コード(例えばexeファイル)を記憶する。
また、ユーザプログラム記憶部A116は、ソースプログラム記憶部117に記憶されたソースプログラムをユーザプログラムとして記憶する。(ソースプログラム解析実行指示部106、ソースプログラム読込み処理部107、ソースプログラム解析処理部108、ユーザプログラム編集部111による処理は行わない)。更に関数利用コンピュータ200のユーザプログラム記憶部B210は、ユーザプログラム記憶部A116が記憶したユーザプログラムを記憶する。そして、そして、関数利用コンピュータ200は、ユーザプログラムを関数利用OSで動作可能なようにコンパイルしてユーザプログラムの実行コード(例えばexeファイル)を生成する。更にユーザプログラム記憶部B210は、ユーザプログラムを関数利用OSで動作可能なようにコンパイルされたユーザプログラムの実行コード(例えばexeファイル)を記憶する。
図11に図10のソースプログラムの関数利用通信スタブコードの呼び出し処理を実行した場合のシーケンスを示す。
ユーザは、関数利用コンピュータ200のユーザプログラム実行部230にユーザプログラム記憶部B210に記憶されたユーザプログラムの実行コードの実行を指示する情報を例えば関数利用コンピュータ200のキーボード902やマウス903を用いて入力する。
ユーザプログラムの実行コードは、一連の処理の内、図10に示す関数利用通信コードの呼び出し処理の実行に移った場合、まず、「stub_func1」の実行コードを関数利用通信コード記憶部B220から呼び出し、図10に示すソースプログラムで設定された引数1(入力引数)を受け渡す。
「stub_func1」の実行コードを実行する関数利用コンピュータ200のCPUは、図9に示す「stub_func1」に基づいた要求1メッセージを生成する。ここで、要求メッセージ(要求1メッセージ)とは、関数名(例えば「stub_func1」)や関数が用いる引数(例えば「stub_func1」が用いる引数)の情報が含まれた関数公開コンピュータ300に対して計算依頼を行う為の計算依頼情報である。もしくは、要求メッセージ(要求1メッセージ)とは、関数公開コンピュータ300が公開する関数(例えばfunc1)に対する処理要求である。そして、関数利用通信部240は、要求1メッセージ(計算依頼情報)を関数公開コンピュータ300に送信する。
一方、関数公開コンピュータ300の関数公開通信部340は、関数利用コンピュータ200からの要求1メッセージ(計算依頼情報)を受信する。
そして、関数計算実行部330は、要求1メッセージ(計算依頼情報)の解釈を行い、要求1メッセージ(計算依頼情報)が計算を依頼している関数に対応する関数公開通信コードの実行コードを関数公開通信コード記憶部B320から呼び出す。呼び出された関数公開通信コードの実行コードは、関数記憶部310に記憶された関数コード(関数を計算するプログラム)に関数利用コンピュータ200から受け渡された引数に基づく計算をさせて、その計算結果を受け取る。なお、ここで引数が出力引数の場合(例えば、図10に示す「stub_func1」の引数2)、関数コードは、自ら新たに引数の値を設定し、自らの計算に使用することが出来る。
関数公開通信コードの実行コードは、関数コードから受け取った計算結果に基づき、応答1メッセージを生成する。ここで、応答メッセージ(応答1メッセージ)とは、要求メッセージに基づいて関数コードを実行した関数公開コンピュータ300のCPUが計算した計算結果情報である。もしくは、応答メッセージ(応答1メッセージ)とは、要求メッセージに基づいて関数公開コンピュータ300が公開する関数の処理の成否を示す情報である。(処理の成否を示す情報とは、処理の結果が正常か異常かを示す情報のことである)。そして、関数公開通信部340は、応答1メッセージを関数利用コンピュータ200に送信(返信)する。
関数利用コンピュータ200の関数利用通信部240は、応答1メッセージを受信し、「stub_func1」の実行コードが応答1メッセージの解釈を行う。そして、「stub_func1」の実行コードは、応答1メッセージに含まれる関数コードの計算結果をユーザプログラムに受け渡す。
ユーザプログラムは、「stub_func2」「stub_func3」についても同様の処理を行う。
そして、図11に示す通り、関数利用コンピュータ200から関数公開コンピュータ300へのメッセージの送信を3回、関数公開コンピュータ300から関数利用コンピュータ200へのメッセージの返信を3回行っている。
そして、本実施の形態においては、このメッセージの送信、返信の回数を減らす為に、図7に示すステップ6とステップ7の処理を行う。
図7に示すステップ6において、ユーザは、入力部101を用いて、ソースプログラム解析実行指示部106に対して、関数利用通信スタブコードの呼び出し処理が実装されたソースプログラムの解析を指示する。
ソースプログラムの解析指示を受けたソースプログラム解析実行指示部106は例えば、表示装置901にソースプログラムの一覧を示すファイル選択ダイアログを表示し、ユーザに解析の対象となる通信コード(関数利用通信スタブコード)の呼出し処理を実装したソースプログラムの指定を要求する。そして、ソースプログラム読込み処理部107は、ユーザが入力部101を用いて指定したソースプログラムをソースプログラム記憶部117から読み込む。
ソースプログラム解析処理部108は、ソースプログラム読込み処理部107に読み込まれたソースプログラムの解析を開始する。そして、まずは、ソースプログラム中で、通信コード自動生成処理部105にて自動生成された通信スタブコード(関数利用通信スタブコード)の呼び出し処理が実装されている箇所と、どの通信スタブコード(関数利用通信スタブコード)が呼び出されているのかとを検索する。通信スタブコード(関数利用通信スタブコード)の呼び出し処理を特定する方法としては、例えば呼び出されている関数名の先頭に「stub_」が付加されている箇所を検索する方法がある。
ソースプログラム解析処理部108は、ソースプログラム内で呼び出されている通信スタブコード(関数利用通信スタブコード)にて実行要求を行っている関数(関数公開コンピュータ300で公開されている関数)のインタフェース仕様(戻り値や引数のデータ型、引数の入出力タイプなど)をインタフェース定義抽出部103に要求する。
インタフェース定義抽出部103はインタフェース定義格納部102から関数のインタフェース仕様を関数名に基づいて抽出して、抽出したインタフェース仕様をソースプログラム解析処理部108に返す。
ソースプログラム解析処理部108は、取得したインタフェース仕様の「引数の入出力タイプ」をチェックして全ての引数のタイプが入力引数となっているかどうかを確認する。
引数に出力引数が含まれる場合には、その関数は関数公開OS(関数公開コンピュータ300)側の処理にて何らかのデータを取得することを意味している。すなわち、関数公開コンピュータ300からの応答は、関数公開コンピュータ300側の処理の成否だけを返すわけではない。その為、引数に出力引数が含まれる関数は、関数以外の処理に依存関係があると考えられるため、通信性能を改善するための編集対象から外すこととする。
例えば、ソースプログラム解析処理部108は図8に示すインタフェース定義において各関数のインタフェース仕様の引数の入出力タイプが「in」になっている引数のみの関数かどうかを確認する。
図8の例ではソースプログラム解析処理部108は、公開関数「func1」は引数の入出力タイプが「out」の出力引数が含まれているため対象外と判断する。また、ソースプログラム解析処理部108は、公開関数「func2」と公開関数「func3」は引数の入出力タイプが「in」の入力引数のみであり、通信性能を改善するための編集対象と判断する。
また、ソースプログラム解析処理部108は、各々の関数の戻り値が別の関数の引数として使用されていないことも確認する。すなわちソースプログラム解析処理部108は、各関数が独立した関数であるかを確認する。
次にソースプログラム解析処理部108は、全ての引数が入力引数である関数がソースプログラム内で複数連続に実行されている箇所の有無を確認する。
例えば、関数公開コンピュータ300にて管理しているデータベースへのデータの書込み要求を関数利用コンピュータ200は、通信コードを用いて実施しているような場合を考える。この場合において、通常のデータベースアクセスの処理では一連の処理完了後にCommit(コミット)もしくはRollback(ロールバック)を実施していることが多く、関数利用コンピュータ200は、個々の書き込み要求に対する応答は必要ない。すなわち、関数利用コンピュータ200は、最後の書込み要求時にそれまでの処理の成否が応答として返ってくれば良く、ソースプログラム解析処理部108は、そういった処理がソースプログラム内に含まれている箇所を確認する。言い換えれば、ソースプログラム解析処理部108は、関数利用コンピュータ200が関数公開コンピュータ300からの応答をリアルタイムに受け取る必要があるか否かを判断している。
ただし、関数公開コンピュータ300の処理は、複数の書込み要求を受け取った場合に書き込み途中の処理がある場合はその処理が完了するまで別のデータの書込み処理を実施しないように排他制御を実施していることが前提である。
上記のような処理が含まれている場合に、ソースプログラム解析処理部108は、全ての引数が入力引数である関数がソースプログラム内で複数連続に実行されている箇所に相当する処理内で呼び出されている通信コードの一覧を関数利用通信コード編集部112と関数公開通信コード編集部113とに渡す。また、ソースプログラム解析処理部108は、後述のように関数利用通信コード編集部112と関数公開通信コード編集部113とが編集した通信コードの情報と、それらの通信コードの呼び出し処理が複数連続している箇所をユーザプログラム編集部111に通知する。
図10に示すソースプログラムにおいて、ソースプログラム解析処理部108が編集対象と判断する箇所の具体例を示す。図10に示すソースプログラムにおいては、引数が全て入力引数である「stub_func2」と「stub_func3」とが連続して呼び出されており、ソースプログラム解析処理部108は「stub_func2」と「stub_func3」とが呼び出されている処理を編集対象と判断する。ここで、「stub_func2」と「stub_func3」とは、互いに独立した関数(「stub_func2」の戻り値が「stub_func3」で利用されていない)であると仮定する。
次に図7に示すステップ8において、関数利用通信コード編集部112は、ソースプログラム解析処理部108から受け取った通信コードの一覧に基づき、関数利用通信スタブコード記憶部109に記憶されている関数利用通信スタブコードを編集する。すなわち、関数利用通信コード編集部112は、編集対象の関数利用通信スタブコードに対して、引数を一つ追加し、通信コード(通信スタブコード)に対応した関数コードの実行時に関数公開コンピュータ300からの応答を返す/返さないの指定を出来るように修正する。そして、関数利用通信コード記憶部A114は、修正された関数利用通信スタブコードを関数利用通信コードとして記憶する。(関数公開通信コード編集部113の編集内容も同様である為、説明を省略する)。
図12に関数利用通信コード編集部112が編集した関数利用通信コードの例を示す。
関数「func1」に関しては、引数に出力引数が含まれる為、編集対象外であり、編集処理は、施されていない。
一方、関数「func2」は、引数が全て入力引数である為、引数「bool flag2」が追加されている(応答を返す/返さないの指定を出来るように修正している)。(図12中の矢印(1)箇所)。この追加された引数は、真理値の「真=true」と「偽=false」という2値をとるブーリアン型(Boolean型)の引数である。(以後、このブーリアン型の引数を「フラグ情報」と称する)。そして、関数「func2」は、「関数公開OS(関数公開コンピュータ300)からの応答を待たない」処理が追加されている(応答を返す/返さないの指定を出来るように修正している)。(図12中の矢印(2)箇所)。また、関数「func3」も引数が全て入力引数である為、引数として「bool flag3」が追加されている(図12中の矢印(3)箇所)。(関数「func3」も、「関数公開OS(関数公開コンピュータ300)からの応答を待つ/待たない」の処理が追加されているが図示は省略する)。
そして、ユーザプログラム編集部111は、ソースプログラム解析処理部108からの情報(関数利用通信コード編集部112と関数公開通信コード編集部113とが編集した通信コードの情報)に基づき、ソースプログラムにおける前記関数利用通信コード編集部112が編集した関数利用通信コードの呼び出し処理に対して、通信コードのフラグ情報に対応する引数を一つ追加する。更にユーザプログラム編集部111は、ソースプログラム解析処理部108からの通知(通信コードの呼び出し処理が複数連続している箇所の通知)に基づき、応答に対するエラー処理を、関数利用通信コードを複数連続して呼び出した後にまとめて処理を実施するように修正する。
そして、ユーザプログラム編集部111が編集したソースプログラムを、ユーザプログラムとしてユーザプログラム記憶部A116は記憶する。
図10のソースプログラムを基に、ユーザプログラム編集部111が編集したユーザプログラムの具体例を図13に示す。
図13は、図10と同じく、通信コードの呼び出し箇所のみを抜粋したものである。
関数「func1」に関しては、引数に出力引数が含まれる為、編集対象外であり、編集処理は、施されていない。一方、関数「func2」は、引数が全て入力引数である為、ブーリアン型の引数(フラグ情報)が追加されている(図13中の矢印(1)箇所)。関数利用コンピュータ200は、この引数に「false」を設定した場合は関数公開コンピュータ300からの応答を受け取らないこととし、「true」を設定した場合は関数公開コンピュータ300からの応答を受付けることとする。
また、関数「func3」も引数が全て入力引数である為、ブーリアン型の引数(フラグ情報)が追加されている(図13中の矢印(2)箇所)。図13のユーザプログラムの例では、前述の通り関数「func2」と「func3」とは独立しており、関数利用コンピュータ200は、関数「func2」の関数公開コンピュータ300からの応答を関数「func3」の関数公開コンピュータ300からの応答と一緒に受け取ることが出来る。
すなわち、ユーザプログラム編集部111は、ソースプログラム解析処理部108の判断に基づき、関数「func2」を連続して呼び出される互いに独立した第1の関数としてフラグ情報に「false」を設定し、関数「func3」を連続して呼び出される互いに独立した第2の関数としてフラグ情報に「true」を設定している。
そして、ユーザプログラム記憶部A116は、ユーザプログラム編集部111が編集したユーザプログラムを記憶する。
図14に図13のユーザプログラムの関数利用通信コードの呼び出し処理を実行した場合のシーケンスを示す。
なお、ここで、関数利用コンピュータ200の関数利用通信コード記憶部B220は、関数利用通信コード記憶部A114が記憶した関数利用通信コードを記憶する。そして、関数利用コンピュータ200は、関数利用通信コードを関数利用OSで動作可能なようにコンパイルして関数利用通信コードの実行コード(例えばexeファイル)を生成する。更に関数利用通信コード記憶部B220は、コンパイルされた関数利用通信コードの実行コード(例えばexeファイル)を記憶する。
同様に、関数公開コンピュータ300の関数公開通信コード記憶部B320は、関数公開通信コード記憶部A115が記憶した関数公開通信コードを記憶する。そして、関数公開コンピュータ300は、関数公開通信コードを関数公開OSで動作可能なようにコンパイルして関数公開通信コードの実行コード(例えばexeファイル)を生成する。更に関数公開通信コード記憶部B320は、コンパイルされた関数公開通信コードの実行コード(例えばexeファイル)を記憶する。
また、関数利用コンピュータ200のユーザプログラム記憶部B210は、ユーザプログラム記憶部A116に記憶させたユーザプログラムを記憶する。そして、関数利用コンピュータ200は、ユーザプログラムを、関数利用OSで動作可能なようにコンパイルしてユーザプログラムの実行コード(例えばexeファイル)を生成する。更にユーザプログラム記憶部B210は、コンパイルされたユーザプログラムの実行コード(例えばexeファイル)を記憶する。
まず、ユーザは、関数利用コンピュータ200のユーザプログラム実行部230にユーザプログラム記憶部B210に記憶されたユーザプログラムの実行コードの実行を入力装置を用いて指示する。
ユーザプログラムの実行コードを実行するCPUは、一連の処理の内、図13に示す関数利用通信コードの呼び出し処理の実行に移った場合、まず、「stub_func1」の実行コードを関数利用通信コード記憶部B220から呼び出す。ここで、「stub_func1」に関しては、前述の図10のソースプログラムと同じなので説明を省略する。
次にユーザプログラムの実行コードを実行するCPUは、「stub_func2」の実行コードを関数利用通信コード記憶部B220から呼び出す。ここで、ユーザプログラムの実行コードは、図13中の矢印(1)箇所に示す「false」を図12中の矢印(1)箇所に示す引数「bool flag2」に受け渡す。
そして、関数公開コンピュータ300では、関数公開通信コードの実行コードを実行するCPUは、フラグ情報が「false」だった場合は応答を返さないと判断する(図12中の矢印(2)箇所)。そして、計算結果保留部350は、「stub_func2」に基づいた関数コードの計算結果情報(応答メッセージ、例えば処理の成否)を一時保存する。
次にユーザプログラムの実行コードを実行するCPUは、「stub_func3」の実行コードを関数利用通信コード記憶部B220から呼び出す。ここで、ユーザプログラムの実行コードは、図13中の矢印(2)箇所に示す「true」を図12中の矢印(3)箇所に示す引数「bool flag3」に受け渡す。
そして、関数公開コンピュータ300では、関数公開通信コードの実行コードを実行するCPUは、フラグ情報が「true」だった場合は、応答を返す際に計算結果保留部350が一時保存した情報と合わせて(複数の応答をまとめて)返す処理を実施すると判断する。そして、関数公開通信部340は、「stub_func2」と「stub_func3」の応答メッセージを一つにまとめて関数利用コンピュータ200に返信する。
図11の例に比較して、図14の例は、関数利用コンピュータ200と関数公開コンピュータ300とのメッセージのやり取りの回数が減少している。(図11の例では、関数利用コンピュータ200から関数公開コンピュータ300へのメッセージの送信を3回、関数公開コンピュータ300から関数利用コンピュータ200へのメッセージの返信を3回。一方、図11の例では、関数利用コンピュータ200から関数公開コンピュータ300へのメッセージの送信を3回、関数公開コンピュータ300から関数利用コンピュータ200へのメッセージの返信を2回)。
なお、具体例の説明では、「stub_func2」と「stub_func3」との2つの通信コードの応答を1つにまとめる場合を説明したが、本実施の形態は、3つ以上の通信コードの応答をまとめることも可能である。その場合に連続して呼び出される最後の通信コードのフラグ情報が「true」に設定され、その他の通信コードのフラグ情報は「false」に設定される。
すなわち、ユーザプログラム編集部111は、ソースプログラム解析処理部108の判断に基づき、連続して呼び出される最後の通信コードに対応した関数を、連続して呼び出される互いに独立した第2の関数としてフラグ情報に「true」を設定する。そして、ユーザプログラム編集部111は、ソースプログラム解析処理部108の判断に基づき、最後の通信コード以外の連続して呼び出される通信コードに対応した関数を、連続して呼び出される互いに独立した第1の関数としてフラグ情報に「false」を設定する。
そして、図7に示すステップ8において、コンピュータシステム500(もしくは関数利用コンピュータ200と関数公開コンピュータ300)は、最終的な関数利用通信コードと、関数公開通信コードと、ユーザプログラムとのコンパイルを実施し、それぞれの実行コードを生成し、実行モジュールを生成する。更に図7に示すステップ9において、ユーザは、生成された実行モジュールを例えば組込み機器などに組み込んで実用化する。
本実施の形態は、関数利用コンピュータ200と関数公開コンピュータ300との間(もしくはOS間もしくはマルチOS間)の通信処理における通信性能を向上させるための通信コードを生成するためのものである。そして、本実施の形態は、通信スタブコードを用いて実行される関数に対して定義されたインタフェース定義の情報から引数が入力用(入力引数)なのか出力用(出力引数)なのかをチェックする。また、本実施の形態は、通信スタブコードの呼出し処理を実装しているソースプログラムを解析して、その関数を実行したときの応答をリアルタイムに受け取らなければならないかどうかを判断する。そして、本実施の形態は、前記を判断した結果に基づいて通信スタブコードを編集して通信コードを生成し、ソースプログラムを編集してユーザプログラムを生成することで、OS間(関数利用コンピュータ200/関数公開コンピュータ300間)通信における応答の数を減らすことができ通信性能を向上させることを可能とする。
このように本実施の形態は、ユーザに作業負荷をかけずにユーザプログラムとインタフェース定義を解析して応答をリアルタイムに返す必要の無い箇所を特定する。更に、本実施の形態は、応答メッセージをまとめて返す/受け取るように通信スタブコードとソースプログラムを修正することで、応答メッセージの作成と応答メッセージの送信、および応答メッセージの受信/解釈の処理回数を減らす。この為に、本実施の形態は、OS間(関数利用コンピュータ200/関数公開コンピュータ300間もしくはクライアント/サーバ間)における通信性能を向上することができる。
実施の形態2.
本実施の形態では、通信コード生成装置100が通信スタブコードとソースプログラムを編集した場合、編集ログの情報(実施日、編集した通信コードとユーザプログラム内の修正箇所など)を記録する場合を説明する。
図15は、編集ログの記録部を有する通信コード生成装置100の構成を示す図である。
図15に、ユーザプログラムとインタフェース定義の解析結果に基づいて通信スタブコードとソースプログラムを編集した時の編集ログの記録部を有する通信コード生成装置100の構成を示す図を示す。
入力部101、インタフェース定義格納部102、インタフェース定義抽出部103、インタフェース定義一覧表示部104、通信コード自動生成処理部105、ソースプログラム解析実行指示部106、ソースプログラム読込み処理部107、ソースプログラム解析処理部108、関数利用通信スタブコード記憶部109、関数公開通信スタブコード記憶部110、ユーザプログラム編集部111、関数利用通信コード編集部112、関数公開通信コード編集部113、関数利用通信コード記憶部A114、関数公開通信コード記憶部A115、ユーザプログラム記憶部A116、ソースプログラム記憶部117は、実施の形態1と同じである為に、説明を省略する。
そして、動作に関しても、実施の形態1と同様に、通信コード生成装置100は、通信スタブコードに対応する関数のインタフェース仕様と通信スタブコードの呼び出し処理を実装したソースプログラムとを解析する。そして、実施の形態1と同様に、通信コード生成装置100は、その解析結果に基づいて、通信スタブコードとソースプログラムとを編集する。ここまでは、実施の形態1と同様である為に、説明を省略する。
そして、通信コード/ユーザプログラム編集ログ記憶部118は、関数利用通信コード編集部112もしくは関数公開通信コード編集部113にて編集した通信スタブコードの関数名などを関数利用通信コード編集部112もしくは関数公開通信コード編集部113から受け取って記録する。
また、通信コード/ユーザプログラム編集ログ記憶部118は、ユーザプログラム編集部111にて編集が行われたソースプログラムの編集箇所と編集(修正)内容、および編集が行われた日時などの情報をユーザプログラム編集部111から受け取って記録する。ユーザプログラム編集部111から受け取る情報の具体例としては、ソースプログラム中で通信コードの呼び出し処理を実装している関数の関数名やクラス名もしくは行数など実装箇所を特定できる情報と、応答をどの通信コードを実行した際に受け取るのかといった情報などである。
通信コード/ユーザプログラム編集ログ抽出部119は、ユーザの指示により通信コード/ユーザプログラム編集ログ記憶部118から編集ログを抽出する。ここで、ユーザは、通信コード/ユーザプログラム編集ログ記憶部118に記録されている編集ログを確認したい場合に、入力部101を用いて、編集ログを抽出する指示を通信コード/ユーザプログラム編集ログ抽出部119に対して行う。
通信コード/ユーザプログラム編集ログ表示部120は、通信コード/ユーザプログラム編集ログ抽出部119が抽出した編集ログの情報を表示する。通信コード/ユーザプログラム編集ログ表示部120は、例えば、表示装置901であっても良い。
ここで、本実施の形態における通信コード生成装置100の概要を述べる。
通信コード生成装置100は、ユーザプログラム編集部111が編集したソースプログラムの編集内容と、関数利用通信コード編集部112が編集した関数利用通信スタブコードの編集内容と、関数公開通信コード編集部113が編集した関数公開通信スタブコードの編集内容とを記憶装置に記憶する通信コード/ユーザプログラム編集ログ記憶部118を備える。
そして、通信コード生成装置100は、通信コード/ユーザプログラム編集ログ記憶部118が記憶したソースプログラムの編集内容と関数利用通信スタブコードの編集内容と関数公開通信スタブコードの編集内容とを抽出する通信コード/ユーザプログラム編集ログ抽出部119を備える。
そして、通信コード/ユーザプログラム編集ログ抽出部119が抽出したソースプログラムの編集内容と関数利用通信スタブコードの編集内容と関数公開通信スタブコードの編集内容とを表示する通信コード/ユーザプログラム編集ログ表示部120を備える。
図16は、編集ログの具体例を示す図である。編集日時、編集対象ファイル、編集対象関数名、編集内容といった情報が記録されている。
これにより、ユーザは、関数利用通信コード編集部112もしくは関数公開通信コード編集部113にて編集した通信スタブコードの編集内容、またはユーザプログラム編集部111にて編集が行われたソースプログラムの編集内容を容易に確認することが出来る。
実施の形態3.
本実施の形態では、通信コード生成装置100が通信スタブコードとソースプログラムを編集した場合に記録された編集ログの情報を利用して、ユーザプログラムを編集前の処理に編集(復元)する場合を説明する。(ユーザプログラムを関数公開コンピュータ300からの応答をリアルタイムに受け取れるように編集(復元)する)。
図17は、編集ログの情報を利用してユーザプログラムを編集前の処理に編集(復元)するための復元部を有する通信コード生成装置100の構成を示す図である。
図17に、ユーザプログラムとインタフェース定義の解析結果に基づいて通信スタブコードとソースプログラムを編集した時の編集ログの情報を利用して、ユーザプログラムを編集前の処理に編集(復元)するための復元部を有する通信コード生成装置100の構成を示す。
入力部101、インタフェース定義格納部102、インタフェース定義抽出部103、インタフェース定義一覧表示部104、通信コード自動生成処理部105、ソースプログラム解析実行指示部106、ソースプログラム読込み処理部107、ソースプログラム解析処理部108、関数利用通信スタブコード記憶部109、関数公開通信スタブコード記憶部110、ユーザプログラム編集部111、関数利用通信コード編集部112、関数公開通信コード編集部113、関数利用通信コード記憶部A114、関数公開通信コード記憶部A115、ユーザプログラム記憶部A116、ソースプログラム記憶部117は、実施の形態1および実施の形態2と同じである為に、説明を省略する。また、通信コード/ユーザプログラム編集ログ記憶部118、通信コード/ユーザプログラム編集ログ抽出部119、通信コード/ユーザプログラム編集ログ表示部120は、実施の形態2と同じである為に説明を省略する。
そして、動作に関しても、実施の形態1及び実施の形態2と同様に、通信コード生成装置100は、通信スタブコードに対応する関数のインタフェース仕様と通信スタブコードの呼び出し処理を実装したソースプログラムとを解析する。そして、実施の形態1及び実施の形態2と同様に、通信コード生成装置100は、その解析結果に基づいて、通信スタブコードとソースプログラムとを編集する。ここまでは、実施の形態1及び実施の形態2と同様である為に、説明を省略する。
そして、通信コード生成装置100は、実施の形態2と同様に通信スタブコードとソースプログラムとを編集した編集ログを記録する。ここまでは、実施の形態2と同様である為に、説明を省略する。
ユーザは、通信コード/ユーザプログラム編集ログ表示部120に表示された編集ログの情報からユーザプログラム内の通信コードの呼び出し処理において、関数公開コンピュータ300からの応答をリアルタイムに受け取れるように処理を変更したい(編集(復元)したい)箇所を入力部101を用いて選択する。
復元対象編集ログ抽出部121は、通信コード/ユーザプログラム編集ログ表示部120が表示した編集ログの情報から、ユーザに選択された編集(復元)対象の編集ログの情報を抽出する。
そして、ユーザプログラム復元部122は、復元対象編集ログ抽出部121が抽出した編集(復元)対象の編集ログの情報を基に、ユーザプログラム内の該当する通信コードの呼出し処理を実装している箇所について、関数公開コンピュータ300からの応答をリアルタイムに受け取れるように編集(復元)する。
ここで、本実施の形態における通信コード生成装置100の概要を説明する。
通信コード生成装置100は、通信コード/ユーザプログラム編集ログ表示部120が表示するソースプログラムの編集内容と関数利用通信スタブコードの編集内容と関数公開通信スタブコードの編集内容とから、編集内容を復元する箇所を表す復元情報を入力する入力部101を備える。
そして、通信コード生成装置100は、入力部101が入力した復元情報が表す編集内容を復元する箇所の編集内容を通信コード/ユーザプログラム編集ログ記憶部118から抽出する復元対象編集ログ抽出部121を備える。
そして、復元対象編集ログ抽出部121が抽出した編集内容に基づいてソースプログラムの編集内容を復元するユーザプログラム復元部122を備える。
本実施の形態において、通信コード生成装置100が、自動生成した通信スタブコードに対応する関数のインタフェース仕様と通信スタブコードの呼び出し処理を実装したソースプログラムとを解析し、その解析結果に応じて通信性能を向上するためにソースプログラムに対して行われた編集内容を元の状態に編集(復元)するまでの動作を説明する。
ユーザは通信コード/ユーザプログラム編集ログ表示部120に表示されている編集ログの情報を確認する。(例えば図16に示す編集ログの例)。そして、通信性能を向上するために実施された編集内容に対して、一部もしくは全てを編集前の状態に戻したい場合に、ユーザは、入力部101を用いて通信コード/ユーザプログラム編集ログ表示部120に対して戻したい編集箇所を選択(指定)し、ユーザプログラムの編集(復元)を指示する。
そして、復元対象編集ログ抽出部121は、通信コード/ユーザプログラム編集ログ表示部120で選択された編集箇所の編集ログの情報を抽出し、ユーザプログラム復元部122に渡す。また、ユーザプログラム復元部122は、ユーザプログラム記憶部A116が記憶するユーザプログラムを読み込む。(ユーザプログラム復元部122は、ユーザが入力部101で指示したユーザプログラムをユーザプログラム記憶部A116から読み込むことも可能である。また、ユーザプログラム復元部122は、編集ログの情報から判断してユーザプログラム記憶部A116からユーザプログラムを読み込むことも可能である)。
ユーザプログラム復元部122は、復元対象編集ログ抽出部121から受け取った編集ログの情報を基に、ユーザプログラム記憶部A116から読み込んだユーザプログラムを編集(復元)する。
具体的には、ユーザプログラム復元部122は、ユーザプログラム中で編集(復元)対象となる通信コードの呼び出し処理を実装している箇所に対して、ユーザプログラム編集部111にて通信コードの引数に追加したフラグ情報に「true」を設定して、応答をリアルタイムに受け取れるように変更する。すなわち、関数公開通信部340は、関数公開コンピュータ300において、関数コードの計算処理が終了した際に、計算結果情報を計算結果保留部350に一時記憶させずに、すぐに関数利用コンピュータ200に計算結果情報を送信する。
また、ユーザプログラム復元部122は、この時、応答処理(エラー処理)をまとめて実行するように変更していた場合には、そのエラー処理も元のように通信コードを呼び出した直後に実施するように変更する。
そして、ユーザプログラム復元部122にて、ユーザプログラムの編集(復元)が完了したら、ユーザプログラム復元部122は、編集(復元)した箇所に該当する編集ログの情報を通信コード/ユーザプログラム編集ログ記憶部118から削除する。もしくは、ユーザプログラム復元部122は、編集(復元)したことを追記して後からユーザが通信コード/ユーザプログラム編集ログ表示部120にて編集ログを見た際に編集(復元)済みであること確認できるようにする。
図18と図19とを用いて、編集(復元)処理の具体例を説明する。
図18は、ユーザが編集(復元)箇所を指定した例を示す図である。
図19は、ユーザプログラム復元部122が編集(復元)したユーザプログラムの例を示す図である。
ユーザが、図18に示す通信コード/ユーザプログラム編集ログ表示部120が表示した編集ログにおいて、矢印(1)箇所の「stub_func2」の処理を復元したい場合を想定する。すなわち、ユーザは「stub_func2」の計算結果情報を計算結果保留部350に一時記憶させることなく、リアルタイムで関数公開コンピュータ300から受け取りたい場合を想定する。
その場合に、ユーザは、図18に示す矢印(1)箇所を入力部101(例えば、マウス903など)を用いて選択し、ユーザプログラムの編集(復元)を指示する。そして、復元対象編集ログ抽出部121は選択された編集ログを通信コード/ユーザプログラム編集ログ記憶部118から抽出する。
そして、ユーザプログラム復元部122は、図13に示すユーザプログラムを読み込み、復元対象編集ログ抽出部121が抽出した編集ログに基づき、図19のようにユーザプログラムを編集(復元)する。
すなわち、ユーザプログラム復元部122は、図18に示す矢印(1)箇所の編集ログに基づき、図19において、フラグ情報を「true」に設定し、「エラー処理2」を「stub_func2」の処理の直後に戻した。
このユーザプログラム復元部122が行った編集(復元)内容により、関数利用コンピュータ200は、通信コードの編集内容を変更すること無く、「stub_func2」の処理において、関数公開コンピュータ300からリアルタイムで計算結果情報を受け取ることが可能となる。
本実施の形態により、ユーザは通信コードやユーザプログラムの編集内容に対して、所望の箇所のみを元の状態(応答をリアルタイム受け取れるように)にユーザプログラムを容易に編集(復元)することができる。
実施の形態4.
本実施の形態では、関数利用コンピュータ200と関数公開コンピュータ300との間を転送する転送データ(例えば、マルチOSで動作する組込みシステムにおいて、OS間を転送するデータ)の受け渡し方法を通信コードの引数のデータサイズとユーザプログラム内での通信コードの呼出し状況に応じて変更する場合を説明する。
図20は、転送データの受け渡し方法を変更するユーザプログラム通信方式変更部124と通信コード通信方式変更部126とを有する通信コード生成装置100の構成を示す図である。
図20に通信コードの引数のデータサイズとユーザプログラム内での通信コードの呼び出し状況に応じてOS間を転送する転送データの受け渡し方法を変更するための通信コード生成装置100の構成を示す。
入力部101、インタフェース定義格納部102、インタフェース定義抽出部103、インタフェース定義一覧表示部104、通信コード自動生成処理部105、ソースプログラム解析実行指示部106、ソースプログラム読込み処理部107、ソースプログラム解析処理部108、関数利用通信スタブコード記憶部109、関数公開通信スタブコード記憶部110、ユーザプログラム編集部111、関数利用通信コード編集部112、関数公開通信コード編集部113、関数利用通信コード記憶部A114、関数公開通信コード記憶部A115、ユーザプログラム記憶部A116、ソースプログラム記憶部117は、実施の形態1及び実施の形態2及び実施の形態3と同じである為に、説明を省略する。
そして、動作に関しても、実施の形態1及び実施の形態2及び実施の形態3と同様に、通信コード生成装置100は、通信スタブコードに対応する関数のインタフェース仕様と通信スタブコードの呼び出し処理を実装したソースプログラムとを解析する。そして、実施の形態1及び実施の形態2及び実施の形態3と同様に、通信コード生成装置100は、その解析結果に基づいて、通信スタブコードとソースプログラムとを編集する。ここまでは、実施の形態1及び実施の形態2及び実施の形態3と同様である為に、説明を省略する。
転送データチェック部123は、ユーザプログラム編集部111にて通信性能を向上するための編集が行われたユーザプログラム内にて呼び出されている通信コードを確認して、呼び出されている通信コードの引数のサイズをチェックする。
通信コード通信方式変更部126は、転送データチェック部123のチェック結果に応じて通信コード内の引数データの受け渡しを行っている処理内容を変更する。
ユーザプログラム通信方式変更部124は、転送データチェック部123のチェック結果に応じて変更した通信コードに合わせてユーザプログラムの通信コードの呼び出し処理を変更する。
転送データサイズ閾値記憶部125は、転送データチェック部123のチェック結果の判断基準となる転送データサイズの閾値を記憶する。
ここで、本実施の形態における通信コード生成装置100の概要を説明する。
通信コード生成装置100は、関数利用コンピュータ200に送信される計算結果情報のデータの大きさを調べる転送データチェック部123を備える。
そして、通信コード生成装置100は、関数利用コンピュータ200に送信される計算結果情報のデータの大きさの閾値を記憶装置に記憶する転送データサイズ閾値記憶部125を備える。
そして、通信コード生成装置100は、転送データチェック部123が調べた計算結果情報のデータの大きさが、転送データサイズ閾値記憶部125が記憶した計算結果情報のデータの大きさの閾値よりも大きい場合に、関数利用コンピュータ200に送信される計算結果情報の送信方法を変更するようにユーザプログラムを変更するユーザプログラム通信方式変更部124を備える。
本実施の形態において、通信コードの引数のデータサイズとユーザプログラム内での通信コードの呼び出し状況に応じてOS間(関数利用コンピュータ200と関数公開コンピュータ300との間)を転送するデータの受け渡し方法を変更する際の動作を説明する。
通常、OS間(関数利用コンピュータ200と関数公開コンピュータ300との間)のデータの受け渡しを行う方法は、メッセージ通信による方法と双方のOS(コンピュータ)が共有して利用可能な共有メモリを用いる方法がある。共有メモリは例えば、関数利用コンピュータ200と関数公開コンピュータ300とが利用可能なサーバなどに備えられる。本実施の形態では、メッセージ通信による方法をデフォルトで適用していることとする。
そして、本実施の形態において、ユーザプログラム編集部111が、関数公開コンピュータ300からの複数の計算結果情報をまとめて受け取るようにソースプログラムを編集した場合に、関数公開コンピュータ300の関数公開通信部340から送信されるデータサイズが大きくなる場合が想定される。その場合、データの受け渡しを行う方法は、メッセージ通信による方法よりも共有メモリを用いる方法の方が効率良い。
転送データチェック部123は、ユーザプログラム編集部111が編集したユーザプログラム内にて呼び出されている通信コードの引数のデータ型情報からデータサイズをチェックする。(例えば引数が複数有る場合は、全ての引数を加算したサイズを算出する。また、転送データチェック部123は、引数のデータ型情報に対応したデータサイズを予めプログラム言語に応じて記憶している。)。そして、転送データチェック部123は、チェックしたデータサイズが転送データサイズ閾値記憶部125の記憶している閾値を超えるかどうかチェックする。この閾値は、ユーザによって予め設定が可能となっている。また、この閾値は関数利用OS(関数利用コンピュータ200)と関数公開OS(関数公開コンピュータ300)との間の要求メッセージもしくは応答メッセージのデータサイズとして設定することも可能であるし、関数の引数もしくは戻り値のデータサイズとして設定することも可能である。
転送データチェック部123は、チェックしたデータサイズが閾値を超える場合は、通信コード内の引数データの受け渡し処理をメッセージ通信の方法から共有メモリを利用する方法に変更するように、ユーザプログラム通信方式変更部124に通知する。ユーザプログラム通信方式変更部124は、受け取った変更通知に基づいてユーザプログラムを変更する。
また、転送データチェック部123は、ユーザプログラムの変更箇所で呼び出される通信コードも引数データの受け渡し処理をメッセージ通信の方法から共有メモリを利用する方法に変更するように、通信コード通信方式変更部126に通知する。通信コード通信方式変更部126は、受け取った変更通知にもとづいて通信コードを変更する。
あるいは、転送データチェック部123は、ユーザプログラム内にて呼び出されている通信コードの引数に実際に渡されている値を解析する。そして、転送データチェック部123は、その解析結果に応じて通信コード内の引数の受け渡し方法を指定するようにユーザプログラム通信方式変更部124に通知することも可能である。例えば、引数としてchar型で大きなデータサイズが指定されている場合でも、実際にはユーザが意図的にNULLなどの小さなサイズのデータしか渡さないケースもあり、その場合は共有メモリを利用するのではなく、メッセージ通信にて引数を渡した方が性能的に良いと考えられる。
本実施の形態における具体例を説明する。
まず、図10に示すソースプログラムを実施する場合を想定する。この場合の「func1」「func2」「func3」の戻り値は、図8のインタフェース定義に示す通りshort型である。ここで、例えばshort型のデータサイズは16ビット、long型のデータサイズは、32ビットと仮定する。更に転送データサイズ閾値記憶部125は、閾値として、関数利用OS(関数利用コンピュータ200)と関数公開OS(関数公開コンピュータ300)との間でやり取りされる関数の引数または戻り値のデータサイズの上限を35ビットと記憶していると仮定する。
そして、実施の形態1の説明と同様にユーザプログラム実行部230が図10に示すソースプログラムを実施すると、図11に示すシーケンスが実施される。ここで図11における関数利用OS(関数利用コンピュータ200)と関数公開OS(関数公開コンピュータ300)との間の引数と戻り値のデータサイズを確認する。
図11に示す要求1メッセージにおいて、引数は図8の「func1」のインタフェース定義に示す「short x」と「short y」とであり、合計で32ビットとなる。その為、転送データサイズ閾値記憶部125の記憶している閾値(35ビット)以下であるので、転送データチェック部123は、引数データの受け渡し処理をメッセージ通信の方法で行うと判断する。引数データの受け渡し処理は、メッセージ通信の方法がデフォルトと設定されているので、転送データチェック部123は、特に処理を実施しない。
そして、図11に示す応答1メッセージにおいて、「func1」の戻り値はshort型の16ビットであり、同様に戻り値データの受け渡し処理はメッセージ通信の方法で行われる。以下「func2」と「func3」の処理においても、閾値(35ビット)を超えるデータは発生しない。
一方、ユーザプログラム編集部111が編集した図13に示すユーザプログラムを実施する場合を想定する。ユーザプログラム実行部230が図13に示すユーザプログラムを実施すると、図14に示すシーケンスが実施される。
そして、応答2メッセージと応答3メッセージとの返信において、「func2」と「func3」との計算結果情報をまとめて返信することになっている為に、データサイズは48ビットとなる。(図8に示す通り、「func2」の戻り値がshort型の16ビットであり、「func3」の戻り値がlong型の32ビットである為)。この場合、戻り値の合計のデータサイズは、転送データサイズ閾値記憶部125の記憶している閾値(35ビット)を超える。よって、転送データチェック部123は、戻り値データの受け渡し処理を、共有メモリを利用する方法に変更すると判断する。そして、転送データチェック部123は、ユーザプログラム通信方式変更部124と通信コード通信方式変更部126とに受け渡し処理方法の変更通知を行う。ユーザプログラム通信方式変更部124は、変更通知に基づき、データの受け渡し処理を、共有メモリを利用する方法に変更するようにユーザプログラムを書き換える(図示は省略)。また通信コード通信方式変更部126は、変更通知に基づき、データの受け渡し処理を、共有メモリを利用する方法に変更するように通信コードを書き換える(図示は省略)。
本実施の形態により、通信コード生成装置100は、ユーザに作業負荷をかけずに通信コードの引数のデータサイズとユーザプログラム内での通信コードの呼び出し状況を解析する。そして、通信コード生成装置100は、その解析結果に応じて引数データの受け渡し方法を切り替えられるように通信コードとユーザプログラムを変更する。そして、通信コード生成装置100は、OS間(関数利用コンピュータ200と関数公開コンピュータ300との間)の通信性能を向上することができる。
以上説明の実施の形態1〜4に関して、改めて概要を説明する。
マルチOSで動作する組込みシステムやクライアント/サーバシステムに対してOS間の通信処理を仲介する通信スタブコードをインタフェース定義から自動生成する通信コード生成装置100において(インタフェース定義とは別OS(通信相手)上にて動作するアプリケーション(ユーザプログラム)から自OS上で公開している関数の利用を可能とするためのインタフェースを定義したものである)、通信コードを自動生成したい関数の選択や通信コードの生成を指示するための入力部101と、別OSに対して公開している関数のインタフェース定義を管理するインタフェース定義格納部102と、インタフェース定義格納部102に管理されているインタフェース定義を抽出するインタフェース定義抽出部103と、インタフェース定義抽出部103から抽出したインタフェース定義を一覧表示するインタフェース定義一覧表示部104と、インタフェース定義一覧表示部104に表示されているインタフェース定義一覧からユーザが入力部101を用いて選択したインタフェース定義の通信スタブコード(ソースコード)を自動生成する通信コード自動生成処理部105と、通信コード自動生成処理部105にて生成した通信スタブコードとソースプログラムの通信性能を向上するための処理をユーザが入力部101を用いて指示するソースプログラム解析実行指示部106と、ソースプログラム解析実行指示部106からの指示を受け通信コード自動生成処理部105にて生成された通信スタブコードを実行する(関数呼出し)処理を実装したソースプログラムを読み込むソースプログラム読込み処理部107と、インタフェース定義抽出部103がインタフェース定義格納部102から抽出した通信コード自動生成処理部105にて通信スタブコードを生成したインタフェース定義の情報に基づいてソースプログラム読込み処理部107にて読み込んだソースプログラムを解析して通信コードを用いて実行した関数からの応答をリアルタイムに必要としない通信スタブコードとその通信スタブコードを実行する処理をソースプログラム中に実装している箇所を抽出するソースプログラム解析処理部108と、ソースプログラム解析処理部108にて抽出した通信スタブコードを用いて実行した関数からの応答をリアルタイムに必要としない通信スタブコードに対してリアルタイムに応答を待たないように編集する通信コード編集部(関数利用通信コード編集部112、関数公開通信コード編集部113)と、ソースプログラム解析処理部108にて抽出した通信スタブコードを用いて実行した関数からの応答をリアルタイムに必要としない通信スタブコードを実行する処理をソースプログラム中に実装している箇所のプログラムを通信コード編集部(関数利用通信コード編集部112、関数公開通信コード編集部113)での編集結果に合わせて編集するユーザプログラム編集部111とを設けた通信コード生成装置100について実施の形態1で説明した。
通信コード編集部(関数利用通信コード編集部112、関数公開通信コード編集部113)にて編集した通信スタブコードの関数名とユーザプログラム編集部111にて編集したユーザプログラムの編集箇所と編集内容を記録する通信コード/ユーザプログラム編集ログ記憶部118と、ユーザによる入力部101からの指示により通信コード/ユーザプログラム編集ログ記憶部118から編集箇所や編集内容を抽出する通信コード/ユーザプログラム編集ログ抽出部119と、通信コード/ユーザプログラム編集ログ記憶部118に記録された編集ログの情報をユーザに表示する通信コード/ユーザプログラム編集ログ表示部120とを設けた通信コード生成装置100について実施の形態2で説明した。
通信コード/ユーザプログラム編集ログ表示部120にて表示されたユーザプログラムの編集ログから通信コードを用いて実行した関数からの応答をリアルタイムに受け取りたい箇所をユーザが入力部101を用いて任意に1つまたは複数選択した編集ログを抽出する復元対象編集ログ抽出部121と、ソースプログラム読込み処理部107にて読み込んだユーザプログラム編集部111で編集済みのユーザプログラムを復元対象編集ログ抽出部121にて抽出した編集ログの情報をもとにユーザが任意に選択した箇所の応答をリアルタイムに受け取れる(要求を出してから応答が返ってくるまで待ち状態にする)ように編集前の状態に戻すユーザプログラム復元部122を設けた通信コード生成装置100について実施の形態3で説明した。
ユーザプログラム編集部111にて編集された通信コードの呼び出し処理を実装済みのユーザプログラムに対して通信コードの引数として通信相手に転送するデータのサイズをチェックする転送データチェック部123と、転送データチェック部123によるチェック結果に応じて通信相手にデータを転送する方法を通信コード内で変更するように通信コードを変更する通信コード通信方式変更部126と、転送データチェック部123によるチェック結果に応じて変更された通信コードに合わせてユーザプログラム内の通信コードの呼び出し処理を変更するユーザプログラム通信方式変更部124を設けた通信コード生成装置100について実施の形態4で説明した。
以上説明したように実施の形態1〜4における通信コード生成装置100は、インタフェース定義から生成した通信コードのインタフェース仕様と、通信コードの呼出し処理を実装したユーザプログラムを解析して、通信コード実行時に通信相手先から応答をリアルタイムに受け取る必要のない(複数の応答を一つにまとめて受け取れる)箇所を抽出し、その解析結果に応じて通信コードとユーザプログラムを編集することにより、マルチOS間やクライアント/サーバ間における通信コードを用いた処理の通信性能を向上することが出来る。
なお、既に、説明したように、本実施の形態1〜4に示す通信コード生成装置100は、処理装置たるCPU、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータである。
そして、上記したように「〜部」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
100 通信コード生成装置、101 入力部、102 インタフェース定義格納部、103 インタフェース定義抽出部、104 インタフェース定義一覧表示部、105 通信コード自動生成処理部、106 ソースプログラム解析実行指示部、107 ソースプログラム読込み処理部、108 ソースプログラム解析処理部、109 関数利用通信スタブコード記憶部、110 関数公開通信スタブコード記憶部、111 ユーザプログラム編集部、112 関数利用通信コード編集部、113 関数公開通信コード編集部、114 関数利用通信コード記憶部A、115 関数公開通信コード記憶部A、116 ユーザプログラム記憶部A、117 ソースプログラム記憶部、118 通信コード/ユーザプログラム編集ログ記憶部、119 通信コード/ユーザプログラム編集ログ抽出部、120 通信コード/ユーザプログラム編集ログ表示部、121 復元対象編集ログ抽出部、122 ユーザプログラム復元部、123 転送データチェック部、124 ユーザプログラム通信方式変更部、125 転送データサイズ閾値記憶部、126 通信コード通信方式変更部、200 関数利用コンピュータ、210 ユーザプログラム記憶部B、220 関数利用通信コード記憶部B、230 ユーザプログラム実行部、240 関数利用通信部、300 関数公開コンピュータ、310 関数記憶部、320 関数公開通信コード記憶部B、330 関数計算実行部、340 関数公開通信部、350 計算結果保留部、500 コンピュータシステム、901 表示装置、902 キーボード、903 マウス、904 FDD、905 コンパクトディスク装置、906 プリンタ装置、907 スキャナ装置、910 システムユニット、911 CPU、912 バス、913 ROM、914 RAM、915 通信ボード、920 磁気ディスク装置、921 オペレーティングシステム、922 ウィンドウシステム、923 プログラム群、924 ファイル群、931 電話器、932 ファクシミリ機、940 インターネット、941 ゲートウェイ、942 ローカルエリアネットワーク。

Claims (11)

  1. 関数の計算依頼情報を送信して関数を計算した計算結果情報を受信する関数利用コンピュータで実行されるユーザプログラムと関数利用通信コードと、前記関数の計算依頼情報を受信して関数を計算し前記関数を計算した計算結果情報を関数利用コンピュータに送信する関数公開コンピュータで実行される関数公開通信コードとを生成する通信コード生成装置において、
    関数を呼び出す呼び出し命令が記述されたソースプログラムを記憶装置に記憶するソースプログラム記憶部と、
    前記呼び出し命令を受け取り前記関数の計算依頼情報を生成して前記関数公開コンピュータに前記計算依頼情報を送信して前記関数を計算した計算結果情報を前記関数公開コンピュータから受信する処理を前記関数利用コンピュータに行わせる命令が記述された関数利用通信スタブコードを予め記憶装置に記憶する関数利用通信スタブコード記憶部と、
    前記関数利用コンピュータから関数の計算依頼情報を受信し、関数の計算を実行させ前記関数を計算した計算結果情報を前記関数利用コンピュータへ送信する処理を前記関数公開コンピュータに行わせる命令が記述された関数公開通信スタブコードを予め記憶装置に記憶する関数公開通信スタブコード記憶部と、
    前記ユーザプログラムを記憶装置に記憶するユーザプログラム記憶部Aと、
    関数利用通信コードを記憶装置に記憶する関数利用通信コード記憶部Aと、
    関数公開通信コードを記憶装置に記憶する関数公開通信コード記憶部Aと、
    前記ソースプログラム記憶部に記憶されたソースプログラムを読み込んでソースプログラムに記述された呼び出し命令が連続して呼び出され、かつ、連続して呼び出された呼び出し命令が、互いに独立した第1の関数の呼び出し命令と第2の関数の呼び出し命令とで記述されているか否かを解析するソースプログラム解析処理部と、
    前記ソースプログラム解析処理部が解析した結果、呼び出し命令が連続して呼び出され、かつ、連続して呼び出された呼び出し命令が、互いに独立した第1の関数の呼び出し命令と第2の関数の呼び出し命令とで記述されている場合に、前記第1の関数の呼び出し命令を、第1の関数名と第1の関数の計算結果情報の送信の保留を前記関数公開コンピュータに対して指示する保留識別符号とを含む第1の呼び出し命令に書き換え、前記第2の関数の呼び出し命令を、第2の関数名と前記第1の関数の計算結果情報と第2の関数の計算結果情報との送信を前記関数公開コンピュータに対して指示する送信識別符号とを含む第2の呼び出し命令に書き換えて編集したソースプログラムをユーザプログラムとしてユーザプログラム記憶部Aに記憶するユーザプログラム編集部と、
    前記関数利用通信スタブコード記憶部に記憶された関数利用通信スタブコードを読み込んで、前記関数利用コンピュータが実行するユーザプログラムから前記第1の呼び出し命令を受け取り前記第1の関数名を含む第1の関数の計算依頼情報と前記保留識別符号とを前記関数公開コンピュータに送信し、前記第1の関数の計算結果情報の受信を待たずに前記関数利用コンピュータが実行するユーザプログラムから前記第2の呼び出し命令を受け取り前記第2の関数名を含む第2の関数の計算依頼情報と前記送信識別符号とを前記関数公開コンピュータに送信し、前記第1の関数の計算結果情報と前記第2の関数の計算結果情報とを前記関数公開コンピュータから受信するように関数利用通信スタブコードを編集し、編集した関数利用通信スタブコードを関数利用通信コードとして関数利用通信コード記憶部Aに記憶する関数利用通信コード編集部と、
    前記関数公開通信スタブコード記憶部に記憶された関数公開通信スタブコードを読み込んで、前記関数利用コンピュータから前記第1の関数の計算依頼情報と前記第2の関数の計算依頼情報とを受信した場合に、前記第1の関数名に基づいて第1の関数コードを呼び出して第1の関数の計算を実行させ、かつ、前記第2の関数名に基づいて第2の関数コードを呼び出して第2の関数の計算を実行させるとともに、前記第1の関数の計算依頼情報とともに前記第1の関数の計算結果情報の送信の保留を指示する前記保留識別符号を受信したか判断して、前記保留識別符号を受信した場合に前記第1の関数の計算結果情報の送信を保留し、前記関数利用コンピュータから前記第2の関数の計算依頼情報とともに前記第2の関数の計算結果情報の送信を指示する前記送信識別符号を受信したか判断して、前記送信識別符号を受信した場合に保留していた前記第1の関数の計算結果情報と前記第2の関数の計算結果情報とを前記関数利用コンピュータへ送信するように関数公開通信スタブコードを編集し、編集した関数公開通信スタブコードを関数公開通信コードとして関数公開通信コード記憶部Aに記憶する関数公開通信コード編集部と
    を備えたことを特徴とする通信コード生成装置。
  2. 前記ソースプログラム解析処理部は、ソースプログラムに記述された呼び出し命令が連続して呼び出され、かつ、連続して呼び出された呼び出し命令が、互いに独立した3つ以上の呼び出し命令である場合に、前記互いに独立した3つ以上の呼び出し命令の内、最後に呼び出される呼び出し命令を前記第2の関数の呼び出し命令と判断し、その他の呼び出し命令を前記第1の関数の呼び出し命令と判断することを特徴とした請求項1記載の通信コード生成装置。
  3. 前記通信コード生成装置は、更に
    前記ユーザプログラム編集部が編集したソースプログラムの編集内容と、前記関数利用通信コード編集部が編集した関数利用通信スタブコードの編集内容と、前記関数公開通信コード編集部が編集した関数公開通信スタブコードの編集内容とを記憶装置に記憶する通信コード/ユーザプログラム編集ログ記憶部と、
    前記通信コード/ユーザプログラム編集ログ記憶部が記憶したソースプログラムの編集内容と関数利用通信スタブコードの編集内容と関数公開通信スタブコードの編集内容とを抽出する通信コード/ユーザプログラム編集ログ抽出部と、
    前記通信コード/ユーザプログラム編集ログ抽出部が抽出したソースプログラムの編集内容と関数利用通信スタブコードの編集内容と関数公開通信スタブコードの編集内容とを表示する通信コード/ユーザプログラム編集ログ表示部と
    を備えたことを特徴とする請求項1又は2記載の通信コード生成装置。
  4. 前記通信コード生成装置は、更に
    前記通信コード/ユーザプログラム編集ログ表示部が表示するソースプログラムの編集内容と関数利用通信スタブコードの編集内容と関数公開通信スタブコードの編集内容とから、編集内容を復元する箇所を表す復元情報を入力する入力部と、
    前記入力部が入力した復元情報が表す編集内容を復元する箇所の編集内容を前記通信コード/ユーザプログラム編集ログ記憶部から抽出する復元対象編集ログ抽出部と、
    前記復元対象編集ログ抽出部が抽出した編集内容に基づいてソースプログラムの編集内容を復元するユーザプログラム復元部と
    を備えたことを特徴とする請求項3記載の通信コード生成装置。
  5. 前記通信コード生成装置は、更に
    前記関数利用コンピュータに送信される計算結果情報のデータの大きさを調べる転送データチェック部と、
    前記関数利用コンピュータに送信される計算結果情報のデータの大きさの閾値を記憶装置に記憶する転送データサイズ閾値記憶部と、
    前記転送データチェック部が調べた計算結果情報のデータの大きさが、前記転送データサイズ閾値記憶部が記憶した計算結果情報のデータの大きさの閾値よりも大きい場合に、前記関数利用コンピュータに送信される計算結果情報の送信方法を変更するように前記ユーザプログラムを変更するユーザプログラム通信方式変更部と
    を備えたことを特徴とする請求項1〜4いずれか記載の通信コード生成装置。
  6. 関数の計算依頼情報を受信し関数を計算して計算結果情報を送信する関数公開コンピュータに対して計算依頼情報を送信して計算結果情報を受信する関数利用コンピュータにおいて、
    第1の関数名と、第1の関数の計算結果情報の送信の保留を前記関数公開コンピュータに対して指示する保留識別符号とを含む第1の呼び出し命令と、第2の関数名と、保留されている前記第1の関数の計算結果情報と第2の関数の計算結果情報との送信を前記関数公開コンピュータに対して指示する送信識別符号とを含む第2の呼び出し命令とを有するユーザプログラムを記憶装置に記憶するユーザプログラム記憶部Bと、
    前記ユーザプログラムから第1の呼び出し命令を受け取り第1の関数名を含む第1の関数の計算依頼情報と前記保留識別符号とを前記関数公開コンピュータに送信し、前記第1の関数の計算結果情報の受信を待たずに前記ユーザプログラムから前記第2の呼び出し命令を受け取り第2の関数名を含む第2の関数の計算依頼情報と前記送信識別符号とを前記関数公開コンピュータに送信し、前記第1の関数の計算結果情報と前記第2の関数の計算結果情報とを前記関数公開コンピュータから受信する処理を中央処理装置に行わせる命令が記述された関数利用通信コードを記憶装置に記憶する関数利用通信コード記憶部Bと、
    前記関数公開コンピュータと通信を行う関数利用通信部と、
    前記ユーザプログラム記憶部Bが記憶するユーザプログラムを読み込み、前記ユーザプログラムが有する前記第1の呼び出し命令と前記第2の呼び出し命令とを実行し、前記第1の呼び出し命令と前記第2の呼び出し命令とに基づいて前記関数利用通信コード記憶部Bが記憶する関数利用通信コードを実行して、前記関数利用通信部により前記第1の関数の計算依頼情報と前記第2の関数の計算依頼情報とを前記関数公開コンピュータに送信し、前記関数利用通信部により前記第1の関数の計算結果情報と前記第2の関数の計算結果情報とを前記関数公開コンピュータから受信するユーザプログラム実行部と
    を備えたことを特徴とする関数利用コンピュータ。
  7. 関数の計算依頼情報を送信して関数を計算した計算結果情報を受信する関数利用コンピュータから関数の計算依頼情報を受信して関数を計算し関数を計算した計算結果情報を関数利用コンピュータに送信する関数公開コンピュータにおいて、
    第1の関数を計算する第1の関数コードと、第2の関数を計算する第2の関数コードとを記憶装置に記憶する関数記憶部と、
    関数の計算結果情報を保留する計算結果情報保留部と、
    前記関数利用コンピュータと通信を行う関数公開通信部と、
    前記関数公開通信部が関数利用コンピュータから第1の関数の計算依頼情報と第2の関数の計算依頼情報とを受信して、第1の関数名に基づいて前記関数記憶部が記憶する第1の関数コードを呼び出して第1の関数の計算を実行させ、かつ、第2の関数名に基づいて第2の関数コードを呼び出して第2の関数の計算を実行させるとともに、第1の関数の計算依頼情報とともに計算結果情報の送信の保留を指示する保留識別符号を受信したか判断して、保留識別符号を受信した場合に第1の関数の計算結果情報を前記計算結果情報保留部に記憶して第1の関数の計算結果情報の送信を保留し、前記関数公開通信部が前記関数利用コンピュータから第2の関数の計算依頼情報とともに計算結果情報の送信を指示する送信識別符号を受信したか判断して、送信識別符号を受信した場合に前記計算結果情報保留部に保留していた前記第1の関数の計算結果情報と前記第2の関数の計算結果情報とを前記関数公開通信部により前記関数利用コンピュータへ送信する処理を中央処理装置に行わせる命令が記述された関数公開通信コードを記憶装置に記憶する関数公開通信コード記憶部Bと、
    前記関数公開通信部により受信した前記第1の関数の計算依頼情報と前記第2の関数の計算依頼情報とに基づき、前記関数公開通信コード記憶部Bが記憶する関数公開通信コードを実行し、前記関数記憶部が記憶する第1の関数コードによる第1の関数の計算と第2の関数コードによる第2の関数の計算とを行い第1の関数の計算結果情報と第2の関数の計算結果情報とを得て第1の関数の計算結果情報と第2の関数の計算結果情報とを関数公開通信コードに伝達する関数計算実行部と、
    を備えたことを特徴とする関数公開コンピュータ。
  8. 前記請求項1記載の通信コード生成装置と前記請求項6記載の関数利用コンピュータと前記請求項7記載の関数公開コンピュータとを備えることを特徴としたコンピュータシステム。
  9. 前記ユーザプログラムは前記関数利用コンピュータが備えるオペレーティングシステムである関数利用オペレーティングシステムにより動作し、前記関数コードは関数公開コンピュータが備えるオペレーティングシステムである関数公開オペレーティングシステムにより動作し、前記関数利用オペレーティングシステムと前記関数公開オペレーティングシステムとが異なるオペレーティングシステムであることを特徴とする前記請求項8記載のコンピュータシステム。
  10. 関数の計算依頼情報を送信して関数を計算した計算結果情報を受信する関数利用コンピュータで実行されるユーザプログラムと関数利用通信コードと、前記関数の計算依頼情報を受信して関数を計算し前記関数を計算した計算結果情報を関数利用コンピュータに送信する関数公開コンピュータで実行される関数公開通信コードとを生成する通信コード生成方法において、
    ソースプログラム記憶部が関数を呼び出す呼び出し命令が記述されたソースプログラムを記憶装置に記憶するソースプログラム記憶ステップと、
    関数利用通信スタブコード記憶部、前記呼び出し命令を受け取り前記関数の計算依頼情報を生成して前記関数公開コンピュータに前記計算依頼情報を送信して前記関数を計算した計算結果情報を前記関数公開コンピュータから受信する処理を前記関数利用コンピュータに行わせる命令が記述された関数利用通信スタブコードを予め記憶装置に記憶する関数利用通信スタブコード記憶ステップと、
    関数公開通信スタブコード記憶部が、前記関数利用コンピュータから関数の計算依頼情報を受信し、関数の計算を実行させ前記関数を計算した計算結果情報を前記関数利用コンピュータへ送信する処理を前記関数公開コンピュータに行わせる命令が記述された関数公開通信スタブコードを予め記憶装置に記憶する関数公開通信スタブコード記憶ステップと、
    ユーザプログラム記憶部Aが、前記ユーザプログラムを記憶装置に記憶するユーザプログラム記憶ステップと、
    関数利用通信コード記憶部Aが、関数利用通信コードを記憶装置に記憶する関数利用通信コード記憶ステップと、
    関数公開通信コード記憶部Aが、関数公開通信コードを記憶装置に記憶する関数公開通信コード記憶ステップと、
    ソースプログラム解析処理部が、前記ソースプログラム記憶部に記憶されたソースプログラムを読み込んでソースプログラムに記述された呼び出し命令が連続して呼び出され、かつ、連続して呼び出された呼び出し命令が、互いに独立した第1の関数の呼び出し命令と第2の関数の呼び出し命令とで記述されているか否かを解析するソースプログラム解析処理ステップと、
    ユーザプログラム編集部が、前記ソースプログラム解析処理部が解析した結果、呼び出し命令が連続して呼び出され、かつ、連続して呼び出された呼び出し命令が、互いに独立した第1の関数の呼び出し命令と第2の関数の呼び出し命令とで記述されている場合に、前記第1の関数の呼び出し命令を、第1の関数名と第1の関数の計算結果情報の送信の保留を前記関数公開コンピュータに対して指示する保留識別符号とを含む第1の呼び出し命令に書き換え、前記第2の関数の呼び出し命令を、第2の関数名と前記第1の関数の計算結果情報と第2の関数の計算結果情報との送信を前記関数公開コンピュータに対して指示する送信識別符号とを含む第2の呼び出し命令に書き換えて編集したソースプログラムをユーザプログラムとしてユーザプログラム記憶部Aに記憶するユーザプログラム編集ステップと、
    関数利用通信コード編集部が、前記関数利用通信スタブコード記憶部に記憶された関数利用通信スタブコードを読み込んで、前記関数利用コンピュータが実行するユーザプログラムから前記第1の呼び出し命令を受け取り前記第1の関数名を含む第1の関数の計算依頼情報と前記保留識別符号とを前記関数公開コンピュータに送信し、前記第1の関数の計算結果情報の受信を待たずに前記関数利用コンピュータが実行するユーザプログラムから前記第2の呼び出し命令を受け取り前記第2の関数名を含む第2の関数の計算依頼情報と前記送信識別符号とを前記関数公開コンピュータに送信し、前記第1の関数の計算結果情報と前記第2の関数の計算結果情報とを前記関数公開コンピュータから受信するように関数利用通信スタブコードを編集し、編集した関数利用通信スタブコードを関数利用通信コードとして関数利用通信コード記憶部Aに記憶する関数利用通信コード編集ステップと、
    関数公開通信コード編集部が、前記関数公開通信スタブコード記憶部に記憶された関数公開通信スタブコードを読み込んで、前記関数利用コンピュータから前記第1の関数の計算依頼情報と前記第2の関数の計算依頼情報とを受信した場合に、前記第1の関数名に基づいて第1の関数コードを呼び出して第1の関数の計算を実行させ、かつ、前記第2の関数名に基づいて第2の関数コードを呼び出して第2の関数の計算を実行させるとともに、前記第1の関数の計算依頼情報とともに前記第1の関数の計算結果情報の送信の保留を指示する前記保留識別符号を受信したか判断して、前記保留識別符号を受信した場合に前記第1の関数の計算結果情報の送信を保留し、前記関数利用コンピュータから前記第2の関数の計算依頼情報とともに前記第2の関数の計算結果情報の送信を指示する前記送信識別符号を受信したか判断して、前記送信識別符号を受信した場合に保留していた前記第1の関数の計算結果情報と前記第2の関数の計算結果情報とを前記関数利用コンピュータへ送信するように関数公開通信スタブコードを編集し、編集した関数公開通信スタブコードを関数公開通信コードとして関数公開通信コード記憶部Aに記憶する関数公開通信コード編集ステップと
    を備えたことを特徴とする通信コード生成方法。
  11. コンピュータを、請求項1〜5いずれか記載の通信コード生成装置として機能させることを特徴とするプログラム。
JP2010278408A 2010-12-14 2010-12-14 通信コード生成装置および関数利用コンピュータおよび関数公開コンピュータおよびコンピュータシステムおよび通信コード生成方法およびプログラム Pending JP2012128581A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010278408A JP2012128581A (ja) 2010-12-14 2010-12-14 通信コード生成装置および関数利用コンピュータおよび関数公開コンピュータおよびコンピュータシステムおよび通信コード生成方法およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010278408A JP2012128581A (ja) 2010-12-14 2010-12-14 通信コード生成装置および関数利用コンピュータおよび関数公開コンピュータおよびコンピュータシステムおよび通信コード生成方法およびプログラム

Publications (1)

Publication Number Publication Date
JP2012128581A true JP2012128581A (ja) 2012-07-05

Family

ID=46645546

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010278408A Pending JP2012128581A (ja) 2010-12-14 2010-12-14 通信コード生成装置および関数利用コンピュータおよび関数公開コンピュータおよびコンピュータシステムおよび通信コード生成方法およびプログラム

Country Status (1)

Country Link
JP (1) JP2012128581A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016121078A1 (ja) * 2015-01-30 2016-08-04 株式会社日立製作所 通信システム、および、通信方法
JP2019191575A (ja) * 2018-04-18 2019-10-31 富士通株式会社 準同型暗号を用いた処理動作の委託
WO2023181119A1 (ja) * 2022-03-22 2023-09-28 三菱電機株式会社 半導体設計支援装置、半導体設計支援方法、及び半導体設計支援プログラム

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016121078A1 (ja) * 2015-01-30 2016-08-04 株式会社日立製作所 通信システム、および、通信方法
JP2019191575A (ja) * 2018-04-18 2019-10-31 富士通株式会社 準同型暗号を用いた処理動作の委託
WO2023181119A1 (ja) * 2022-03-22 2023-09-28 三菱電機株式会社 半導体設計支援装置、半導体設計支援方法、及び半導体設計支援プログラム
JP7433569B1 (ja) 2022-03-22 2024-02-19 三菱電機株式会社 半導体設計支援装置、半導体設計支援方法、及び半導体設計支援プログラム

Similar Documents

Publication Publication Date Title
JP5167589B2 (ja) アプリケーションサーバ装置および仮想マシンプログラム
JP5723208B2 (ja) コールバックを用いたソフトウェアの動的計測のためのフェイルセーフメカニズム
US9383903B2 (en) Systems and methods for providing programmable macros
JP5705084B2 (ja) 2パス自動アプリケーション計測
US20100281463A1 (en) XML based scripting framework, and methods of providing automated interactions with remote systems
US7895605B2 (en) Method for tracking an event through multiple module-specific files
US20060294526A1 (en) Method and apparatus for generating service frameworks
US20030140272A1 (en) Method and data processing system providing checkpoint/restart across multiple heterogeneous computer systems
US20030140041A1 (en) Method and data processing system providing bulk record memory transfers across multiple heterogeneous computer systems
CN103336705A (zh) 脚本处理和工作流系统间的自动转码和语义自适应
KR20110124732A (ko) 특정된 트랜젝션 콘텍스트에서의 소프트웨어의 조건부의 동적 인스트루먼테이션
TW201401092A (zh) 動態調整記錄資料等級模組的方法、電腦裝置與程式產品
US9003430B2 (en) Dynamic transfer of selected business process instance state
US11036522B2 (en) Remote component loader
US9313267B2 (en) Using a same program on a local system and a remote system
US8904346B1 (en) Method and system for automated load testing of web applications
US20040061714A1 (en) Logical element tree and method
US8191041B2 (en) Javascript pre-processing framework
CN109597952B (zh) 网页信息处理方法、系统、电子设备和存储介质
CN110045952B (zh) 代码调用方法与装置
JP2012128581A (ja) 通信コード生成装置および関数利用コンピュータおよび関数公開コンピュータおよびコンピュータシステムおよび通信コード生成方法およびプログラム
US7836449B2 (en) Extensible infrastructure for task display and launch
CN114048415A (zh) 表单生成方法及装置、电子设备和计算机可读存储介质
US20140067854A1 (en) Crawling of generated server-side content
US8522256B2 (en) Hosting non-messaging workflows in a messaging host