JP5147626B2 - Cobolコードから変換されたjava(登録商標)コードを含むプログラムを実行するコンピュータ・システム、並びにその方法及びコンピュータ・プログラム - Google Patents

Cobolコードから変換されたjava(登録商標)コードを含むプログラムを実行するコンピュータ・システム、並びにその方法及びコンピュータ・プログラム Download PDF

Info

Publication number
JP5147626B2
JP5147626B2 JP2008253637A JP2008253637A JP5147626B2 JP 5147626 B2 JP5147626 B2 JP 5147626B2 JP 2008253637 A JP2008253637 A JP 2008253637A JP 2008253637 A JP2008253637 A JP 2008253637A JP 5147626 B2 JP5147626 B2 JP 5147626B2
Authority
JP
Japan
Prior art keywords
data
variable
instruction
char array
storing
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.)
Expired - Fee Related
Application number
JP2008253637A
Other languages
English (en)
Other versions
JP2010086218A (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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2008253637A priority Critical patent/JP5147626B2/ja
Publication of JP2010086218A publication Critical patent/JP2010086218A/ja
Application granted granted Critical
Publication of JP5147626B2 publication Critical patent/JP5147626B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

本発明は、COBOLコードから変換されたJAVA(商標)コードを含むプログラムを実行するコンピュータ・システム、並びにその方法及びコンピュータ・プログラムに関する。
いわゆるレガシーマイグレーションとは、メインフレームにおいて構築されたシステムを、UNIX(登録商標)又はWindows(登録商標)などのプラットフォームに移植することをいう。レガシーマイグレーションの一つの態様として、COBOLからJAVA(商標)へのコード変換の需要が年々高まっている。COBOLからJAVA(商標)へのコード変換のために、開発者は、トランスレータと呼ばれる自動変換プログラムを使い、引き続き、変換後のコードに対して一部手動でチューニングなどを施すのが一般的である。よって、変換後のJAVA(商標)コードの実行性能は、トランスレータの変換コードの質及びその実行時ライブラリの性能に大きく依存する。
COBOLの特徴の一つは、データ項目の宣言とデータ領域とが関連付けられていることである。よって、データ項目及びメモリの管理をJAVA(商標)でどのように実装するかによって、変換後のJAVA(商標)コードの実行性能が大きく変わりうる。
従来のトランスレータでは、小数点を含まない数値データはint型又はlong型に変換され、小数点を含む数値データはBigDecimal型に変換され、及び文字データはString型に変換されてきた。また、階層的な集団データ項目(group data item)は、階層ごとに内部又は外部クラスのオブジェクトとして定義されてきた。
このような実装の問題点は、それぞれのデータ項目が個別のJAVA(商標)のデータ型として表現されることである。String型及びBigDecimal型といった作成後にその状態を変えることのできないデータ型のオブジェクトが用いられた場合、変数の代入又は表示などが実行されるたびに、大量のオブジェクトが新たに生成され、大量のコピー操作が行われてしまう。このような非効率なオブジェクトの生成又はコピー操作は、COBOLコードから変換され実用化されているJAVA(商標)コードを実装している大規模商用アプリケーションにおいても頻繁に見られる。このことは、変換後のJAVA(商標)コードの性能が低い大きな原因となっている。
COBOL言語とJAVA(商標)言語との間では、言語仕様の面で大きな隔たりがある。COBOLコードをJAVA(商標)コードに変換する場合に、COBOLコード上で記述されている処理をいかに効率的にJAVA(商標)コードで実現するかは、データ構造の設計によるところが大きい。従って、JAVA(商標)コードの仕様を満たし且つ高速で効率的な実行を可能とするデータ構造及び該データ構造を用いたJAVA(商標)コードの実行方法が求められている。
本発明は、COBOLコードから変換されたJAVA(商標)コードを含むプログラムを実行するコンピュータ・システムを提供する。該コンピュータ・システムは、
ラッパークラスをデータ型とするオブジェクトの少なくとも1の宣言を有するJAVA(商標)コードを含むプログラムを保持する記憶部であって、上記宣言夫々は、COBOLコードに含まれるデータ項目の宣言夫々から変換された宣言である、上記記憶部と、
上記プログラムを上記記憶部からメモリ内に読み出し、該プログラムを実行するCPUと
を含む。
本発明の1つの実施態様では、上記ラッパークラスは、COBOLコードにおいて宣言されているデータ項目のデータ(以下、第1のデータ)に対応するデータ(以下、第2のデータ)を管理する機能を有する。
本発明の1つの実施態様では、上記ラッパークラスが、
上記第2のデータを格納する第1のchar配列と、
上記第2のデータの文字数を格納する変数と、
上記第2のデータが格納される位置を表すオフセット値を格納する変数と
を含む。
本発明の1つの実施態様では、上記ラッパークラスから生成されるオブジェクト(以下、第1のオブジェクト)が、
上記第2のデータに対応する第3のデータを管理し、及び
上記第1のchar配列に対応する第2のchar配列と、
上記第3のデータの文字数を格納する上記変数に対応する第1の変数と、
上記第3のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第2の変数と
を含む。
本発明の1つの実施態様では、上記第2のchar配列が、
上記第3のデータを格納し、又は、
上記第1のオブジェクトの属する階層構造において上位階層にあり且つ上記ラッパークラスから生成されるところのオブジェクト(以下、第2のオブジェクト)に含まれる第3のchar配列についてのメモリ領域を共有し、
ここで、上記第2のオブジェクトは、上記第1のchar配列に対応する上記第3のchar配列を含み、及び上記第3のchar配列に対して上記メモリ領域が割り当てられている最も上位階層のオブジェクトであり、
上記第3のchar配列は、上記第3のデータが格納される上記メモリ領域を含む。
本発明の1つの実施態様では、上記第1の変数が、上記第3のデータの文字数を格納する。
本発明の1つの実施態様では、上記第2の変数が、上記メモリ領域上で上記第3のデータが格納される位置を表すオフセット値を格納する。
本発明の1つの実施態様では、上記ラッパークラスが、
数値型データを格納する変数と、
上記数値型データと上記第1のchar配列上のデータとの相互変換を行うための0又は1のオブジェクト変数と、
上記数値型データを格納する変数の有効性を示すフラグと、
char配列表現の有効性を示すフラグと
をさらに含む。
本発明の1つの実施態様では、ラッパークラスから生成されるオブジェクト(第1のオブジェクト)が、
上記第2のデータに対応する第3のデータを管理し、及び
上記第1のchar配列に対応する第2のchar配列と、
上記第3のデータの文字数を格納する上記変数に対応する第1の変数と、
上記第3のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第2の変数と、
上記数値型データを格納する上記変数に対応する第3の変数と、
上記数値型データを格納する変数の有効性を示す上記フラグに対応する第1のフラグと、
上記char配列表現の有効性を示す上記フラグに対応する第2のフラグと
を含み、
上記ラッパークラスが上記相互変換を行うためのオブジェクトを含む場合、上記相互変換を行うためのオブジェクトに対応する第1の相互変換オブジェクトと
をさらに含む。
本発明の1つの実施態様では、ラッパークラスが、上記第1のchar配列についてのメモリ領域を共有する命令をさらに含み、
上記第1のオブジェクトが、上記第1のchar配列に対応する第2のchar配列及び上記共有する命令を含み、
上記第1のオブジェクトの共有する命令が、
上記第2のchar配列についてのメモリ領域を、上記ラッパークラスから生成され且つ上記第1のchar配列に対応する第4のchar配列を有するところの第3のオブジェクトに含まれる上記第4のchar配列についてのメモリ領域と共有する命令
を含む。
本発明の1つの実施態様では、上記第2のデータが、COBOLのREDEFINES句で宣言される第1のデータに対応するデータであり、
上記第1のオブジェクトの共有する命令が、上記第1のオブジェクトの生成において実行されるコンストラクタに含まれる。
本発明の1つの実施態様では、上記ラッパークラスが、上記第1のオブジェクトの属する階層構造において下位階層にあり且つ上記ラッパークラスから生成されるところの少なくとも1のオブジェクト(以下、第4のオブジェクト)の定義をさらに含み、
上記CPUが下記命令をさらに実行し、該命令が、
上記第3のデータのセット又はゲットの命令を実行する命令と、
上記第2のchar配列についてのメモリ領域が割り当てられていない場合、
上記第2のchar配列に対してメモリ領域を割り当てる命令と、
上記第4のオブジェクトに含まれる第5のchar配列についてのメモリ領域を共有する命令であって、
上記第4のオブジェクトが、
上記第2のデータに対応する第4のデータを管理し、及び
上記第1のchar配列に対応する上記第5のchar配列と、
上記第4のデータの文字数を格納する上記変数に対応する第4の変数と、
上記第4のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第5の変数と
を含む、上記共有する命令と、
上記第5の変数に対して、上記第4のデータの上記第2のchar配列についての上記メモリ領域における位置を設定する命令と
を含む。
本発明の1つの実施態様では、上記共有する命令が、
上記第5のchar配列に対してメモリ領域が割り当てられている場合に、上記第5のchar配列に格納された上記第4のデータを上記第2のchar配列にコピーする命令をさらに含む。
本発明の1つの実施態様では、上記ラッパークラスが、上記第1のオブジェクトの属する階層構造において下位階層にあり且つ上記ラッパークラスから生成されるところの少なくとも1のオブジェクト(第4のオブジェクト)の定義をさらに含み、
上記CPUが下記命令をさらに実行し、該命令が、
上記第3のデータのセット又はゲットの命令を実行する命令と、
上記第2のchar配列についてのメモリ領域が割り当てられていない場合、
上記第2のchar配列に対してメモリ領域を割り当てる命令と、
上記第4のオブジェクトに含まれる第5のchar配列についてのメモリ領域を共有する命令であって、
上記第4のオブジェクトが、
上記第2のデータに対応する第4のデータを管理し、及び
上記第1のchar配列に対応する上記第5のchar配列と、
上記第4のデータの文字数を格納する上記変数に対応する第4の変数と、
上記第4のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第5の変数と、
上記数値型データを格納する上記変数に対応する第6の変数と、
上記相互変換を行うためのオブジェクトに対応する第2の相互変換オブジェクトと、
上記数値型データを格納する変数の有効性を示す上記フラグに対応する第3のフラグと、
上記char配列表現の有効性を示す上記フラグに対応する第4のフラグと
を含む、上記共有する命令と、
上記第5の変数に対して、上記第4のデータの上記第2のchar配列についての上記メモリ領域における位置を設定する命令と
を含む。
本発明の1つの実施態様では、上記共有する命令が、
上記第5のchar配列に対してメモリ領域が割り当てられている場合に、上記第5のchar配列に格納された上記第4のデータを上記第2のchar配列にコピーする命令をさらに含む。
本発明の1つの実施態様では、上記コピーする命令が、
上記第4のオブジェクトの有する上記第3のフラグを無効に設定する命令
をさらに含む。
本発明の1つの実施態様では、
セットされるデータとして数値型データが与えられた場合、上記CPUが下記命令をさらに実行し、該命令が、
上記第3の変数に上記数値型データをセットする命令と、
上記第2のフラグを無効に設定する命令と
を含む。
本発明の1つの実施態様では、上記第3の変数に上記数値型データをセットする命令が、
上記第1のフラグを有効に設定する命令
をさらに含む。
本発明の1つの実施態様では、上記命令の実行がゲットの命令であり、
上記CPUが下記命令をさらに実行し、該命令が、
上記メモリ領域が共有された上記第5のchar配列から上記第4のデータを取り出す命令
を含む。
本発明の1つの実施態様では、上記命令の実行がゲットの命令であり、
上記CPUが下記命令をさらに実行し、該命令が、
上記第4のフラグを取得し、該取得した第4のフラグが有効に設定されていることを確認する命令
を含む。
本発明の1つの実施態様では、上記CPUが下記命令をさらに実行し、該命令が、
上記第3の変数から数値型データを取得する命令と、
上記第1の相互変換オブジェクトを用いて、上記取得したデータを文字型のデータに変換する命令と、
上記変換された文字型のデータを上記第2のchar配列に設定する命令と、
上記第2のフラグを有効に設定する命令と
を含む。
本発明の1つの実施態様では、上記CPUが下記命令をさらに実行し、該命令が、
上記第2のchar配列から文字型のデータを取得する命令と、
上記第1の相互変換オブジェクトを用いて、上記取得した文字型のデータを数値型データに変換する命令と、
上記変換された数値型データを上記第3の変数に設定する命令と、
上記第1のフラグを有効に設定する命令と
を含む。
本発明の1つの実施態様では、
ゲットするデータとして数値型データを取得する場合、上記CPUが下記命令をさらに実行し、該命令が
上記第1のフラグが有効に設定されていることを確認する命令と、
上記第3の変数から上記数値型データを取得する命令と
を含む。
本発明では、COBOLコードから変換されたJAVA(商標)コードを含むプログラムを実行する方法を提供する。該方法は、コンピュータ・システムに下記ステップを実行させることを含む。該ステップは、
ラッパークラスをデータ型とするオブジェクトの少なくとも1の宣言を有する上記プログラムを記憶部からメモリ内に読み出すステップであって、上記宣言夫々は、COBOLコードに含まれるデータ項目の宣言夫々から変換された宣言である、上記読み出すステップと、
上記読み出したプログラムを実行するステップと
を含む。
本発明の1つの実施態様では、上記ラッパークラスが、COBOLコードにおいて宣言されているデータ項目のデータ(第1のデータ)に対応するデータ(第2のデータ)を管理する機能を有し、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記第1のオブジェクトが生成されることに応じて、上記管理する機能が上記第1のオブジェクトに提供されるステップを含む。
本発明の1つの実施態様では、上記ラッパークラスは、
上記第2のデータを格納する第1のchar配列と、
上記第2のデータの文字数を格納する変数と、
上記第2のデータが格納される位置を表すオフセット値を格納する変数と
を含み、
上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記ラッパークラスから生成されるオブジェクト(第1のオブジェクト)が生成されることに応じて、下記を上記第1のオブジェクトに提供するステップを含む:
上記第1のchar配列に対応する第2のchar配列;
上記第3のデータの文字数を格納する上記変数に対応する第1の変数;及び
上記第3のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第2の変数。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記第2のchar配列に、
上記第3のデータを格納するステップ、又は、
上記第1のオブジェクトの属する階層構造において上位階層にあり且つ上記ラッパークラスから生成されるところのオブジェクト(第2のオブジェクト)に含まれる第3のchar配列についてのメモリ領域を共有するステップ
を含み、
ここで、上記第2のオブジェクトは、上記第1のchar配列に対応する上記第3のchar配列を含み、及び上記第3のchar配列に対して上記メモリ領域が割り当てられている最も上位階層のオブジェクトであり、
上記第3のchar配列は、上記第3のデータが格納される上記メモリ領域を含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記第1の変数に、上記第3のデータの文字数を格納するステップを含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記第2の変数に、上記メモリ領域上で上記第3のデータが格納される位置を表すオフセット値を格納するステップを含む。
本発明の1つの実施態様では、上記ラッパークラスは、
数値型データを格納する変数と、
上記数値型データと上記第1のchar配列上のデータとの相互変換を行うための0又は1のオブジェクトと、
上記数値型データを格納する変数の有効性を示すフラグと、
char配列表現の有効性を示すフラグと
をさらに含み、
上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記ラッパークラスから生成されるオブジェクト(第1のオブジェクト)が生成されることに応じて、下記を上記第1のオブジェクトに提供するステップを含む:
上記第1のchar配列に対応する第2のchar配列;
上記第3のデータの文字数を格納する上記変数に対応する第1の変数;
上記第3のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第2の変数;
上記数値型データを格納する上記変数に対応する第3の変数;
上記数値型データを格納する変数の有効性を示す上記フラグに対応する第1のフラグ;及び
上記char配列表現の有効性を示す上記フラグに対応する第2のフラグ。
また、上記第1のオブジェクトに提供するステップは、
上記ラッパークラスが上記相互変換を行うためのオブジェクトを含む場合、
上記相互変換を行うためのオブジェクトに対応する第1の相互変換オブジェクトを上記第1のオブジェクトに提供するステップ
をさらに含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記第1のオブジェクトに、上記第2のデータに対応する第3のデータを格納するステップを含む。
本発明の1つの実施態様では、上記ラッパークラスは、上記第1のchar配列についてのメモリ領域を共有する命令をさらに含み、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記ラッパークラスから生成されるオブジェクト(第1のオブジェクト)が生成されることに応じて、上記メモリ領域を共有する命令が上記第1のオブジェクトに提供されるステップを含む。
ここで、上記第1のオブジェクトは、上記第1のchar配列に対応する第2のchar配列及び上記共有する命令を含み、上記第1のオブジェクトの共有する命令は、上記第2のchar配列についてのメモリ領域を、上記ラッパークラスから生成され且つ上記第1のchar配列に対応する第4のchar配列を有するところの第3のオブジェクトに含まれる上記第4のchar配列についてのメモリ領域と共有する命令を含む。
本発明の1つの実施態様では、上記第2のデータが、COBOLのREDEFINES句で宣言される第1のデータに対応するデータであり、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記第1のオブジェクトが生成されることに応じて、
上記第1のオブジェクトの共有する命令が、上記第1のオブジェクトの生成において実行されるコンストラクタに提供されるステップを含む。
本発明の1つの実施態様では、上記ラッパークラスが、上記第1のオブジェクトの属する階層構造において下位階層にあり且つ上記ラッパークラスから生成されるところの少なくとも1のオブジェクト(第4のオブジェクト)の定義をさらに含む。上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記第3のデータのセット又はゲットの命令を実行するステップと、
上記第2のchar配列についてのメモリ領域が割り当てられていない場合、
上記第2のchar配列に対してメモリ領域を割り当てるステップと、
上記第4のオブジェクトに含まれる第5のchar配列についてのメモリ領域を共有するステップであって、
上記第4のオブジェクトが、
上記第2のデータに対応する第4のデータを管理し、及び
上記第1のchar配列に対応する上記第5のchar配列と、
上記第4のデータの文字数を格納する上記変数に対応する第4の変数と、
上記第4のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第5の変数と
を含む、上記共有するステップと、
上記第5の変数に対して、上記第4のデータの上記第2のchar配列についての上記メモリ領域における位置を設定するステップと
を含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記共有するステップが、
上記第5のchar配列に対してメモリ領域が割り当てられている場合に、上記第5のchar配列に格納された上記第4のデータを上記第2のchar配列にコピーするステップをさらに含む。
本発明の1つの実施態様では、上記ラッパークラスが、上記第1のオブジェクトの属する階層構造において下位階層にあり且つ上記ラッパークラスから生成されるところの少なくとも1のオブジェクト(第4のオブジェクト)の定義をさらに含む。上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記第3のデータのセット又はゲットの命令を実行するステップと、
上記第2のchar配列についてのメモリ領域が割り当てられていない場合、
上記第2のchar配列に対してメモリ領域を割り当てるステップと、
上記第4のオブジェクトに含まれる第5のchar配列についてのメモリ領域を共有するステップであって、
上記第4のオブジェクトが、
上記第2のデータに対応する第4のデータを管理し、及び
上記第1のchar配列に対応する上記第5のchar配列と、
上記第4のデータの文字数を格納する上記変数に対応する第4の変数と、
上記第4のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第5の変数と、
上記数値型データを格納する上記変数に対応する第6の変数と、
上記相互変換を行うためのオブジェクトに対応する第2の相互変換オブジェクトと、
上記数値型データを格納する変数の有効性を示す上記フラグに対応する第3のフラグと、
上記char配列表現の有効性を示す上記フラグに対応する第4のフラグと
を含む、上記共有するステップと、
上記第5の変数に対して、上記第4のデータの上記第2のchar配列についての上記メモリ領域における位置を設定するステップと
を含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記共有するステップが、
上記第5のchar配列に対してメモリ領域が割り当てられている場合に、上記第5のchar配列に格納された上記第4のデータを上記第2のchar配列にコピーするステップをさらに含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記コピーするステップが、
上記第4のオブジェクトの有する上記第3のフラグを無効に設定するステップ
をさらに含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、セットされるデータとして数値型データが与えられた場合、
上記第3の変数に上記数値型データをセットするステップと、
上記第2のフラグを無効に設定するステップと
をさらに含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記第3の変数に上記数値型データをセットするステップが、
上記第1のフラグを有効に設定するステップ
をさらに含む。
本発明の1つの実施態様では、上記第3のデータのセット又はゲットの命令を実行するステップにおいてゲットの命令を実行する。上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記メモリ領域が共有された上記第5のchar配列から上記第4のデータを取り出すステップ
をさらに含む。
本発明の1つの実施態様では、上記第3のデータのセット又はゲットの命令を実行するステップにおいてゲットの命令を実行する。上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記第4のフラグを取得し、該取得した第4のフラグが有効に設定されていることを確認するステップ
をさらに含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記第3の変数から数値型データを取得するステップと、
上記第1の相互変換オブジェクトを用いて、上記取得したデータを文字型のデータに変換するステップと、
上記変換された文字型のデータを上記第2のchar配列に設定するステップと、
上記第2のフラグを有効に設定するステップと
を含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
上記第2のchar配列から文字型のデータを取得するステップと、
上記第1の相互変換オブジェクトを用いて、上記取得した文字型のデータを数値型データに変換するステップと、
上記変換された数値型データを上記第3の変数に設定するステップと、
上記第1のフラグを有効に設定するステップと
を含む。
本発明の1つの実施態様では、上記方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
ゲットするデータとして数値型データを取得する場合、
上記第1のフラグが有効に設定されていることを確認するステップと、
上記第3の変数から上記数値型データを取得するステップと
を含む。
本発明は、COBOLコードから変換されたJAVA(商標)コードを含むプログラムを実行する方法を提供する。該方法は、コンピュータ・システムに下記ステップを実行させることを含む。該ステップは、
ラッパークラスをデータ型とするオブジェクトの少なくとも1の宣言を有するJAVA(商標)コードを含むプログラムを記憶部からメモリ内に読み出すステップであって、
上記宣言夫々は、COBOLコードに含まれるデータ項目の宣言夫々から変換された宣言であり、上記ラッパークラスは、COBOLコードにおいて宣言されているデータ項目のデータ(第1のデータ)に対応するデータ(第2のデータ)を管理する機能を有し、
上記ラッパークラスは、
上記第2のデータを格納する第1のchar配列と、
上記第2のデータの文字数を格納する変数と、
上記第2のデータが格納される位置を表すオフセット値を格納する変数と、
数値型データを格納する0又は1の変数と、
上記数値型データと上記第1のchar配列上のデータとの相互変換を行うための0又は1のオブジェクトと、
上記数値型データを格納する変数の有効性を示す0又は1のフラグと、
char配列表現の有効性を示す0又は1のフラグと、
上記ラッパークラスから生成される0以上のオブジェクトの定義と
を含み、
上記ラッパークラスから生成されるオブジェクト(第1のオブジェクト)は、
上記第2のデータに対応する第3のデータを管理し、及び
上記第1のchar配列に対応する第2のchar配列と、
上記第3のデータの文字数を格納する上記変数に対応する第1の変数と、
上記第3のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第2の変数と、
上記第1のオブジェクトの属する階層構造において下位階層にあり且つ上記ラッパークラスから生成されるところの少なくとも1のオブジェクト(下位階層のオブジェクト:ここで、該下位階層のオブジェクトは上記第4のオブジェクトに対応する)と
を含み、
上記下位階層のオブジェクトは、
上記第2のデータに対応する第4のデータを管理し、及び
上記第1のchar配列に対応する上記第3のchar配列と、
上記第4のデータの文字数を格納する上記変数に対応する第3の変数と、
上記第4のデータが格納される位置を表すオフセット値を格納する上記変数に対応する第4の変数と、
上記数値型データを格納する上記変数に対応する第5の変数と、
上記相互変換を行うためのオブジェクトに対応する第2の相互変換オブジェクトと、
上記数値型データを格納する変数の有効性を示す上記フラグに対応する第1のフラグと、
上記char配列表現の有効性を示す上記フラグに対応する第2のフラグと
を含む、
上記読み出すステップと、
上記第3のデータのセット又はゲットの命令を実行するステップと、
上記第2のchar配列についてのメモリ領域が割り当てられていない場合、
上記第2のchar配列に対してメモリ領域を割り当てるステップと、
上記下位階層のオブジェクトに含まれる第3のchar配列についてのメモリ領域を共有するステップと、
上記第4の変数に対して、上記第4のデータの上記第2のchar配列についての上記メモリ領域における位置を設定するステップと
を含む。
本発明はさらに、COBOLコードから変換されたJAVA(商標)コードを含むコンピュータ・プログラムを提供する。該コンピュータ・プログラムは、コンピュータ・システムに、上記のいずれかに記載の方法の各ステップを実行させることを含む。
本発明は、COBOLコードから変換されたJAVA(商標)コードを含むプログラムを実行する方法を提供する。該方法は、コンピュータ・システムに下記ステップを実行させることを含む。該ステップは、
COBOLコードからJAVA(商標)コードに変換するステップであって、該変換するステップは、
COBOLコードを保持する記憶部からCOBOLコードをメモリ内に読み出すステップと、
上記メモリ内に読み出したCOBOLコードにおいて、集団データ項目の宣言を、構造体についてのラッパークラスの宣言に置き換えるステップと、
上記集団データ項目の下位階層のデータ項目の宣言を、ラッパークラスの宣言に置き換えるステップと
を含む、上記変換するステップと、
上記変換されたJAVA(商標)コードを含むプログラムを記憶部からメモリ内に読み出すステップであって、上記プログラムはラッパークラスのオブジェクトの少なくとも1の宣言を有し、上記宣言夫々は、COBOLコードに含まれるデータ項目の宣言夫々から変換された宣言である、上記読み出すステップと、
上記読み出したプログラムを実行するステップと
を含む。
本発明の実施態様によると、COBOLコードから変換されるJAVA(商標)コードの可読性及び保守性が向上する。また、COBOLの機能であるREDEFINES、階層型データ構造などの、データ本体を共有することができるデータ構造がJAVA(商標)コード上で実現される。該データ構造によって、無駄なコピー操作の発生が抑止され、またJAVA(商標)プログラムの実行時に、無駄なメモリ領域が確保されないため、実行性能が向上する。
本発明の実施態様において、「ラッパークラス」は、独自のデータ型を定義したクラスである。上記ラッパークラスは、COBOLコードで宣言されているデータ項目のデータをJAVA(商標)コード上で管理する機能を有する。上記データを管理する機能は、上記ラッパークラスをデータ型とするオブジェクトに提供される。上記ラッパークラスには、上記データ項目のデータをJAVA(商標)コード上で管理するためのメンバ変数及びメソッドが含まれる。上記ラッパークラスから生成されるオブジェクトは、上記データ項目のデータをJAVA(商標)コード上で管理する。
上記ラッパークラスは、文字データを格納するchar配列、データの文字数を格納する変数及び上記データが格納される位置を表すオフセット値を格納する変数をメンバ変数に持つ。これらのメンバ変数は、例えば共通の機能を提供するための共通クラスに定義される。ラッパークラスは、上記共通クラスを継承(extends)することで、上記メンバ変数を持つことができる。
上記ラッパークラスには、COBOLの文字列の定義に対応するラッパークラス、COBOLの小数点を含む数値の定義に対応するラッパークラス、COBOLの小数点を含まない数値の定義に対応するラッパークラス及びCOBOLの集団データ項目の定義に対応するラーパークラスがある。上記小数点を含む数値の定義に対応するラッパークラス及び小数点を含まない数値の定義に対応するラッパークラスは、数値型データを格納する変数、上記数値型データと上記char配列上のデータとの相互変換を行うためのオブジェクト、上記数値型データを格納する変数の有効性を示すフラグ及び上記char配列表現の有効性を示すフラグをメンバ変数に有する。また、COBOLのREDEFINES句で宣言されるデータ項目のデータをJAVA(商標)コード上で管理する機能を提供するラッパークラスは、上記char配列についてのメモリ領域を、上記ラッパークラスから生成される別のオブジェクトに含まれるchar配列についてのメモリ領域と共有するためのメソッドを有する。
上記ラッパークラスは、ライブラリとして提供されうる。
本発明の実施態様において、「データ項目」とは、COBOLにおいて、扱われるデータを一定期間記憶し、必要なときに利用できるようにするために、データを記憶するメモリ領域に固有の名前を与えたものである。データ項目は、JAVA(商標)における変数と対応する。本発明の実施態様では、データ項目毎に、上記ラッパークラスのオブジェクトが生成される。
本発明の実施態様において、「char配列」とは、char型の文字データを扱うための配列である。上記char配列は、ラッパークラスで定義される。上記char配列は、ラッパークラスから生成されるオブジェクトそれぞれが有する。上記ラッパークラスでサポートされるデータ型の内部メモリは、上記char配列で統一的に扱われる。また、char配列本体は、メモリ領域が独自に割り当てられている、又は割り当てられたメモリ領域がラッパークラスから生成される他のオブジェクトと共有されているchar配列である。char配列へのポインタは、上記char配列本体への参照である。
本発明の実施態様において、「データの文字数」とは、COBOLのデータ項目のデータに対応し且つラッパークラスのオブジェクトで管理されるところのデータの文字数である。上記データの文字数が格納される変数は、ラッパークラスで定義される。上記データの文字数が格納される変数は、ラッパークラスから生成されるオブジェクトそれぞれが有する。また、該文字数は、char型での文字数である。例えば、COBOLにおいて整数部が2桁であり且つ小数部が2桁である数字型のデータは、整数部に2文字、小数部に2文字、さらに小数点に1文字が必要であるので、データの文字数は5文字である。
本発明の実施態様において、「データが格納される位置を表すオフセット値」は、該オフセット値を有するオブジェクトが共有しているchar配列本体上での、管理するデータの位置を表す値である。上記オフセット値が格納される変数は、ラッパークラスで定義される。上記オフセット値が格納される変数は、ラッパークラスから生成されるオブジェクトそれぞれが有する。該オフセット値は、例えば、char配列本体の要素番号である。
本発明の実施態様において、「階層構造」とは、COBOLの集団データ項目(Group Data Item)で多段に階層的に宣言されるデータ項目の構造を指す。本発明の実施態様では、ラッパークラスのオブジェクト(以下、オブジェクト1)で管理されるデータが、別のラッパークラスのオブジェクト(以下、オブジェクト2)で管理されるデータの一部分であるようなデータ構造として表現される。ここで、上記オブジェクト1及び2は、階層構造に属するオブジェクトである。そして、上記オブジェクト1は上記オブジェクト2からみて下位階層のオブジェクト、上記オブジェクト2は上記オブジェクト1からみて上位階層のオブジェクトである。
また、上記階層構造の階層は、2段以上49段以下にすることができる。例えば、上記オブジェクト2で管理されるデータが、さらに別のラッパークラスのオブジェクト(以下、オブジェクト3)で管理されるデータの一部分であってもよい。この場合、上記オブジェクト1〜3が、階層構造に属するオブジェクトである。そして、上記オブジェクト1は上記オブジェクト3からみて最も下位階層のオブジェクトであり、上記オブジェクト3は上記オブジェクト1からみて最も上位階層のオブジェクトである。
本発明の実施態様において、「メモリ領域を共有する」とは、ラッパークラスのオブジェクトに管理されるデータを格納するchar配列に割り当てられたメモリ領域を、1以上の他のラッパークラスのオブジェクトから利用できるようにすることである。
本発明の実施態様において、「数値型データを格納する変数」とは、ラッパークラスのオブジェクトに管理されるデータを数値型で格納するための変数である。上記数値型データを格納する変数は、数値型データを扱うラッパークラスで定義される。上記数値型データを格納する変数は、数値型データを扱うラッパークラスから生成されるオブジェクトそれぞれが有する。上記数値型データは、値を示すオブジェクトである値オブジェクト又はプリミティブ型のデータである。
本発明の実施態様において、COBOLの小数点を含む数値の定義に対応するラッパークラスは、上記数値型データを格納する変数として上記値オブジェクトを有する。値オブジェクトは、例えば、BigDecimalオブジェクトである。また、COBOLの小数点を含まない数値の定義に対応するラッパークラスであって、数値に変換された場合、プリミティブ型のデータのレンジ内である数値の定義に対応するラッパークラスは、上記数値型のデータを格納する変数として上記プリミティブ型のデータを格納する変数を有する。なお、COBOLにおける小数点を含まない数値データであって、上記プリミティブ型の変数に格納されるとレンジあふれをしてしまうような桁数の多い上記数値データを管理するラッパークラスのオブジェクトは、上記プリミティブ型のデータを格納する変数を有しない。COBOLにおけるデータの文字数が、上記プリミティブ型のデータを格納する変数のレンジ内であることが保証される場合のみ、COBOLの小数点を含まない数値の定義に対応するラッパークラスは、上記プリミティブ型のデータを格納する変数を有する。ここで、上記プリミティブ型のデータを格納する変数は、int型またはlong型の変数である。なお、上記プリミティブ型の変数に格納されるとレンジあふれをしてしまうような桁数の多い上記数値データを管理するラッパークラスのオブジェクトは、COBOLの小数点を含む数値の定義に対応するラッパークラスと同様に、値オブジェクトを有する。該値オブジェクトは、例えば、BigIntegerオブジェクトである。
本発明の実施態様において、「相互変換を行うためのオブジェクト」とは、char型配列のデータを数値型のデータに変換する又は数値型のデータをchar型配列のデータに変換するためのオブジェクトである。上記相互変換を行うためのオブジェクトは、小数点を含む数値型のデータを扱うラッパークラスで定義される。上記相互変換を行うためのオブジェクトは、小数点を含む数値型のデータを扱うラッパークラスから生成されるオブジェクトそれぞれが有する。上記相互変換を行うためのオブジェクトは、例えば、DecimalFormatのオブジェクトである。
本発明の実施態様において、「数値型データを格納する変数の有効性を示すフラグ」とは、上記数値型データを格納する変数に格納されたデータが有効であること又は無効であることを示すフラグである。また、「char配列表現の有効性を示すフラグ」とは、上記char配列本体に格納されているデータが有効であること又は無効であることを示すフラグである。上記2つのフラグは、数値型のデータを扱うラッパークラスで定義される。上記2つのフラグは、数値型のデータを扱うラッパークラスから生成されるオブジェクトそれぞれが有する。
本発明の実施態様において、「コンストラクタ」とは、オブジェクトが生成される場合に実行される命令である。
本発明の実施態様において、「セット又はゲットの命令」は、ラッパークラスのオブジェクトに管理されるデータを書き込む又は読み出す命令(メソッド)である。
本発明の実施態様において、「char配列についてのメモリ領域がアロケートされていない」とは、該char配列にメモリ領域が割り当てられていないことを示す。
以下、図面に従って、本発明の実施態様を説明する。本実施態様は、本発明の好適な態様を説明するためのものであり、本発明の範囲をここで示すものに限定する意図はないことを理解されたい。また、以下の図を通して、特に断らない限り、同一の符号は、同一の対象を指す。
図1は、COBOLにおけるデータ部の記述の例を示す。
COBOLでは、プログラマーは、プログラムで使用するデータ項目を上記データ部にPICTURE句を使って宣言する。以下は、COBOL文(101)の2行目を例にした、COBOLにおける上記宣言の説明である。
COBOL文(101)の2行目1番目の項目(102)は、2行目で定義されるデータ項目の属する階層レベルが「02」であることを示す。該階層レベルについては後述する。
COBOL文(101)の2行目の2番目の項目(103)は、2行目で定義されるデータ項目の名前が「Name」であることを示す。
COBOL文(101)の2行目の3番目の項目(104)は、2行目で定義されるデータ項目が任意の10文字の文字列であることを示す。「PIC」は、PICTURE句を示す。PICに続く記述は、データ項目のデータ領域内のサイズ及びタイプを示す。Xは任意の文字列であり、Aはアルファベット文字であり、9は数値を示す。括弧内の記述は桁数を示す。また、Vは、小数点の位置を示す。例えば、該記述が999であるならば、データ項目は3桁の数値である。該記述がA(20)であるならば、データ項目は20文字のアルファベット文字である。該記述が9(10)V99であるならば、データ項目は、10桁で小数点以下2桁を含む数値である。
COBOL文(101)の2行目の4番目の項目(105)は、2行目で定義されるデータ項目に与えられた初期値がスペースであることを示す。「VALUE」は、VALUE句を示し初期値を表す。VALUE句は任意に指定可能である。上記指定がない場合は、文字データの場合はスペース、数値データの場合は0がセットされる。
COBOLでは、配列はOCCURS句を使って定義される。例えば、COBOL文(101)の1行目は、40の要素を有する構造体配列StudentRecordを定義したものである。
COBOLコードをJAVA(商標)コードに変換する場合に、プログラムの性能に特に大きく影響を与えると考えられるCOBOLの仕様には、以下に示すものがある。
COBOLでは、PICTURE句で宣言されるいくつかの基本データ項目を集めて集団データ項目とすることができる。さらに、上記配列はまた、集団データ項目の1つである。該集団データ項目は、階層的なデータ構造として宣言される。例えば、COBOL文(101)において、1行目(106)の階層レベルは「01」であり、2〜5行目の階層レベルは「02」である。これは、2〜5行目で定義されるデータ項目であるName、MathScore、ScienceScore及びAvgScoreを集めた集団データ項目が、1行目で定義される構造体配列StudentRecordであることを示す。
上記集団データ項目の要素には、別の集団データ項目も含めることができる。例えば、COBOL文(101)において、2行目のデータ項目であるNameは、さらに、データ項目であるFamilyName及びPersonalNameを集めた集団データ項目に変更することができる。上記FamilyName及びPersonalNameは、階層レベルが「03」以上「49」以下のデータ項目として定義される。階層レベルの上限が「49」である理由は、COBOLにおいて、階層は最高49段まで重ねることができるからである。このように、階層的なデータ構造をなすデータ項目において、階層レベルの値が小さいデータ項目は上位階層のデータ項目となり、階層レベルの値が大きいデータ項目は下位階層のデータ項目となる。
COBOLにおいて、集団データ項目に対してのデータのセット及びゲットの操作は、集団データ項目の要素である全てのデータ項目に対して適用される。例えば、COBOL文(101)において、構造体配列StudentRecordのn要素目にデータ「ABCDEFGHIJ12345678901」がセットされたとする(MOVE DATA TO StudentRecord(n))。該セットの後に、構造体配列StudentRecordのn要素目のデータ項目MathScoreがゲットされた場合、得られるデータは「123」である。このように、COBOLでは、一括でセットされたデータの個々のデータ項目のデータが取得される。そして、該取得されたデータを使って処理が実行される。
また、上記構造体配列StudentRecordのn要素目のデータ項目MathScoreが「123」から「987」に変更されたとする。該変更の後に、構造体配列StudentRecordのn要素目がゲットされた場合、得られるデータは「ABCDEFGHIJ98745678901」である。このように、COBOLでは、個々のデータ項目に対してセットされたデータが、集団データ項目を使用してまとめて取得されうる。そして、該取得されたデータを使って、例えば、全体を集計する処理が実行される。
また、上記データのセット及びゲットの操作は、どの階層レベルのデータ項目に対しても実行できる。上記データのセット及びゲットの操作において、データのサイズが指定されている場合、サイズ分だけの操作が、データに適用される。
COBOLは、あるデータ項目に対して確保されたデータ領域を、他のデータ項目に対するデータ領域として共有させる機能を有する。該機能は、REDEFINES句を使って定義される。該共有の機能により、異なるデータ項目名を用いて同一のデータ領域にアクセスすることができる。
COBOL文(107)は、REDEFINES句の例を示す。COBOL文(107)の1行目は、36文字の文字列のデータ項目であるMonthDefを定義したものである。MonthDefに対するデータ領域には、初期値として「JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC」が設定されている。そして、上記MonthDefに対するデータ領域が、COBOL文(107)の2行目におけるREDEFINES句によって、MonthNameに対するデータ領域として共有されている。
COBOL文(107)の3行目は、MonthNameの下位階層に配列Monthを定義したものである。配列Monthは、3文字の文字列である。また、配列Monthの要素数は12である。ここで、MonthNameに対するデータ領域は、MonthDefに対するデータ領域と共有されている。そのため、MonthNameの下位階層のデータ項目である配列Monthに対するデータ領域もまた、MonthDefに対するデータ領域と共有されている。従って例えば、MonthNameの3番目の要素であるMonth(3)に対して“XXX”を代入し、データ項目であるMonthDefを表示する以下の命令、
MOVE “XXX” TO Month(3)
DISPLAY “MonthDef = ” MonthDef
が実行されると、表示されるMonthDefの値は、「JANFEBXXXAPRMAYJUNJULAUGSEPOCTNOVDEC」である。
本発明の実施態様では、上記COBOLの仕様である階層的なデータ構造に対応するデータ構造として、以下の構造が用いられる。
COBOLにおけるデータ項目のデータは、JAVA(商標)におけるchar配列のデータに変換されて使用される。階層が最上位のデータ項目であり且つ小数点を含まない数値のデータ以外のデータの定義に、JAVA(商標)のデータ型を直接用いない。ここで、JAVA(商標)のデータ型とは、String又はBigDecimalなどのあらかじめJAVA(商標)に用意されている基本データ型を指す。データ項目に対応するデータが定義される場合、該定義にはラッパークラスが用いられる。該ラッパークラスは、ライブラリとして提供されうる。該ラッパークラスは、char配列をフィールドに含む共通クラスを継承して作成される。該共通クラスは、以下の内部フィールドを有する。
public class COMMON_DATA {
private char [ ] _body; // 値のchar配列本体
private final int _length; // 文字数
private int _start; // char配列へのオフセット

共通クラスは、文字データを格納するchar配列(_body)、データの文字数を格納する変数(_length)及びデータが格納される位置を表すオフセット値を格納する変数(_start)をフィールドに有する。変数(_body)は、char配列へのポインタを格納するための領域である。変数(_length)は、データの文字数を格納するための領域である。変数(_start)は、char配列本体において、データが開始される位置を格納するための領域である。
文字列のデータ項目のデータがJAVA(商標)コードにおいて定義される場合、該定義には、ラッパークラスCHARSが用いられる。ここで文字列のデータ項目とは、COBOLのPICTURE句において、タイプとして「X」又は「A」が指定されたデータ項目である。具体的には、COBOL文(図1、101及び107)における、Name、MonthDef及びMonthが該当する。
ラッパークラスCHARSは、上記共通クラスを継承したクラスとして実装される。ラッパークラスCHARSのフィールドは、共通クラスのフィールドのみで構成される。ラッパークラスCHARSから生成されるオブジェクトは、JAVA(商標)において文字列を表すデータ型を操作するStringオブジェクトと同様に、データ本体として内部に文字データを格納するchar配列、文字数を格納する変数及びオフセット値を格納する変数を有する。
小数点を含む数値のデータ項目のデータがJAVA(商標)コードにおいて定義される場合、該定義には、ラッパークラスDECIMALが用いられる。ここで、小数点を含む数値のデータ項目とは、COBOLのPICTURE句において、タイプとして「9」が指定され「V」を含むデータ項目である。具体的には、COBOL文(図1、101及び107)における、AvgScoreが該当する。
ラッパークラスDECIMALは、共通クラスを継承したものとして実装される。該継承により、ラッパークラスDECIMALから生成されるオブジェクトは、小数点を含む数値を文字列として格納するためのchar配列、文字数を格納する変数及びオフセット値を格納する変数を有する。さらにラッパークラスDECIMALは、上記共通クラスのフィールドに加え、以下の内部フィールドを有する。
public class DECIMAL extends COMMON_DATA {
private BigDecimal _value; // 値オブジェクト
private DecimalFormat _format; //フォーマット
private boolean _validValue; /値オブジェクトの有効性フラグ
private boolean _validChar; //値のchar配列表現の有効性フラグ

ラッパークラスDECIMALは、上記共通クラスが有する変数に加え、値オブジェクト(_value)、相互変換オブジェクト(_format)、値オブジェクトの有効性フラグ(_validValue)及び値のchar配列表現の有効性フラグ(_validChar)をフィールドに有する。値オブジェクト(_value)は、数値型でデータ本体を有するための、BigDecimal型オブジェクトである。なお、BigDecimalは、JAVA(商標)言語において任意精度の符号付き10進小数を表すデータ型を操作するためのクラスである。相互変換オブジェクト(_format)は、数値と文字列とを相互に変換する機能を有するDecimalFormat型オブジェクトである。相互変換オブジェクト(_format)は、数値のフォーマット毎にスレッド単位で同じインスタンスであることが実行効率の点から望まれる。値オブジェクトの有効性フラグ(_validValue)は、値オブジェクト(_value)の有するデータが、char配列に設定されているデータの更新により、最新の状態ではなくなったことを示すフラグである。値のchar配列表現の有効性フラグ(_validChar)はchar配列に設定されているデータが、値オブジェクト(_value)の有するデータの更新により、最新の状態ではなくなったことを示すフラグである。
下位階層のデータ項目であり且つ小数点を含まない数値のデータ項目のデータがJAVA(商標)コードにおいて定義される場合、該定義には、ラッパークラスINTが用いられる。ここで、小数点を含まない数値のデータ項目とは、COBOLのPICTURE句において、タイプとして「9」が指定され且つ「V」を含まないデータ項目である。具体的には、COBOL文(図1、101及び107)における、MathScore及びScienceScoreが該当する。
ラッパークラスINTは、共通クラスを継承したものとして実装される。該継承により、ラッパークラスINTのオブジェクトは、小数点を含まない数値を文字列として格納するためのchar配列、文字数を格納する変数及びオフセット値を格納する変数を有する。さらにラッパークラスINTは、上記共通クラスのフィールドに加え、以下の内部フィールドを有する。
public class INT extends COMMON_DATA {
private int _value; // 値
private boolean _validValue; //値の有効性フラグ
private boolean _validChar; //値のchar配列表現の有効性フラグ

ラッパークラスINTは、上記共通クラスの有する変数に加え、値変数(_value)、値の有効性フラグ(_validValue)及び値のchar配列表現の有効性フラグ(_validChar)をフィールドに有する。値変数(_value)は、数値型でデータ本体を有するための、int型変数である。値の有効性フラグ(_validValue)は、値変数(_value)の有するデータが、char配列に設定されているデータの更新により、最新の状態ではなくなったことを示すフラグである。値のchar配列表現の有効性フラグ(_validChar)はchar配列に設定されているデータが、値変数(_value)の有するデータの更新により、最新の状態ではなくなったことを示すフラグである。
階層が最上位のデータ項目であり且つ小数点を含まない数値のデータ項目に対応するデータが定義される場合、該定義には、符号付き整数を表すプリミティブデータ型であるintやlongが用いられる。なお、上記intの代わりにラッパークラスINTが用いられてもよい。
集団データ項目に対応するデータが定義される場合、該定義には、ラッパークラスSTRUCTが用いられる。
ラッパークラスSTRUCTは、上記共通クラスを継承した内部又は外部クラスとして実装される。ラッパークラスSTRUCTのオブジェクトは、下位の階層のデータを一括して表現するため、内部に文字データを格納するchar配列、文字数を格納する変数及びオフセット値を格納する変数を有する。さらにラッパークラスSTRUCTは、上記共通クラスのフィールドに加え、以下の内部フィールドを有する。
public class STRUCT extends COMMON_DATA {
private Object[] _fields; // 下位階層データオブジェクト

ラッパークラスSTRUCTは、上記共通クラスが有する変数に加え、下位階層データオブジェクト(_fields)をフィールドに有する。下位階層データオブジェクト(_fields)は、直属の下位階層のデータオブジェクトを配列として保持するものである。なお、本明細書においてラッパークラスSTRUCTは、階層クラスともいう。
上記ラッパークラスから生成されるオブジェクトのコンストラクタでは、基本的に共通クラスのフィールド上の変数(_length)のみに、COBOLのPICTURE句で指定された値が設定される。また、COBOLコードのVALUE句において初期値が明示的に与えられているとき以外は、上記char配列の実体であるchar配列本体、値オブジェクトは生成されない。JAVA(商標)言語では、変数に初期値を与えない場合、文字列変数には空白文字、数値変数には0が暗黙的に設定される。例えばnullのchar配列本体に対してデータが取得される場合、該取得の時点でchar配列本体は遅延的に(Lazy)に生成され、空白文字が返される。
階層型データ構造に対応するデータ領域が共有されるのは、JAVA(商標)コードが実行され、階層を有する集団データ項目に対応するデータのセット・ゲットが行なわれた時点である。該階層を有する集団データ項目に対応する階層クラスがchar配列をまだポイントしていない場合、新たにchar配列本体が生成され上記データのセットが行われる。更に該集団データ項目の下位階層の全てのデータ項目とchar配列の共有が行われる。すなわち下位レベルの階層のラッパークラスのオブジェクトでは、与えられたchar配列がポイントされ、各項目の文字数分位置をずらしながらオフセット値がセットされる。下位レベルの階層において既にchar配列本体が生成されていたら、上記値のゲットの場合は、新しいchar配列にデータがコピーされる。メモリ領域は、上位階層のデータついてのみ確保される。下位階層のデータについては、独自のメモリ領域は確保されない。
また、DECIMALクラスに対してchar配列のセットが行われた場合、対応するBigDecimalオブジェクトにおいて、使用できないことを示すフラグがセットされる(_validValue = false)。該フラグは、値の有効性フラグである。数値のデータが必要になった場合、最新のchar配列にセットされている文字列とDecimalFormatオブジェクトから、新たに数値型でデータを格納するためのBigDecimalが生成される。
INTクラスに対してchar配列のセットが行われた場合、対応するINTオブジェクトにおいて、使用できないことを示すフラグがセットされる(_validValue = false)。該フラグは、値の有効性フラグである。数値のデータが必要になった場合、最新のchar配列にセットされている文字列から、JAVA(商標)の標準ライブラリ関数を使用して、新たにint型の数値データが生成される。
また逆に、DECIMALクラスの値オブジェクト又はINTクラスの値のデータ(_value)が更新された場合、対応するchar配列が無効であることを示すフラグがセットされる(_validChar = false)。該フラグは、値のchar配列表現の有効性フラグである。上位階層からデータが取得される際は、下位階層の全てのDECIMALオブジェクト及びINTオブジェクトのchar配列が有効であることが確認されなければならない。
また、COBOLにおいてREDEFINES句を使ってデータ領域が共有されているデータ項目に対応するデータを管理するラッパークラスのオブジェクトは、該オブジェクトの生成時にデータ領域であるchar配列が共有される。該共有を実現するために、各ラッパークラスのコンストラクタにメソッドredefine()が実装される。redefine()は、共有元のオブジェクトにおいて用意されるchar配列をポイントさせることを行うメソッドである。
一旦char配列が共有されると、その後は集団データ項目又はREDEFINESされたデータ構造に対するデータのゲット・セットの操作で、新たなオブジェクトが作られることなく、必要な部分のchar配列データの更新だけで処理を完了することができる。以上の方式により、無駄なオブジェクト生成及び複数のコピー操作などの無駄な処理を避けることができ、大幅な性能改善、ヒープ使用量の削減が達成される。
基本データ項目に対応するデータのセットは、該データが文字データの場合char配列に対して実行される。
該データがDECIMALクラスで扱われる数値データの場合、数値型のフォーマットのデータが値オブジェクト(_value)に格納される。また、数値データがchar配列で与えられた場合、相互変換オブジェクト(_format)によって文字列で与えられた数値データが数値型に変換され、値オブジェクト(_value)に格納されてもよい。
該データがINTクラスで扱われる数値データの場合、数値型のフォーマットのデータが値変数(_value)に格納される。また、数値データがchar配列で与えられた場合、JAVA(商標)の標準ライブラリ関数によって文字列で与えられた数値データが数値型に変換され、値変数(_value)に格納されてもよい。
なお、上記値オブジェクト(_value)又は上記値変数(_value)に新しくデータが格納された場合、数値型データを格納する変数の有効性フラグが有効に設定され、値のchar配列表現の有効性フラグが無効に設定される。
ゲットされるデータが数値データならば、変数の有効性フラグが無効に設定されていた場合、char配列データから数値データを生成し直し、値オブジェクト(_value)又は値変数(_value)にセットする必要がある。上記値オブジェクト(_value)又は値変数(_value)からデータが取得されるためには、数値型データを格納する変数の有効性フラグが有効に設定されている必要がある。
図2Aは、本発明の実施態様である、階層クラスのオブジェクトへのセットの命令が実行された場合のフローの例を示す。
プログラム実行時において、階層を有する集団データ項目に対応するデータへのセットの命令が実行されると、該データを格納するためのchar配列がポイントされているかの判定が行われる(ステップ201)。
上記char配列がポイントされていない場合、上記char配列のメモリ領域は確保されていない。よって、上記データが格納される領域を確保するため、char配列本体が生成される(ステップ202)。ここで生成されるchar配列本体のサイズは、階層クラスの下位階層の全てのラッパークラスのオブジェクトの変数にセットされている文字数の合計サイズである。
次に、char配列本体に上記データがセットされる(ステップ203)。
次に、下位階層の全てのラッパークラスのオブジェクトについて、以下の処理が実行される(ステップ204)。
下位階層の全てのラッパークラスのオブジェクトのchar配列は、階層クラスのオブジェクトの上記char配列本体と共有される。まず、上記下位階層全てのラッパークラスのオブジェクトにおいて、上記char配列本体がポイントされる(ステップ205)。また、各項目の指定長だけ位置をずらしながらオフセット値がセットされる(ステップ206)。上記指定長は、例えば下位階層のオブジェクトの変数にセットされた文字数を順に加えていくことで求められる。
次に、下位階層ラッパークラスのオブジェクトのデータが数値型データの場合、数値型データを格納する変数の有効性フラグが無効に設定され、char配列表現の有効性フラグが有効に設定される(ステップ208)。なお上記2つのフラグは、ラッパークラスのオブジェクトにおいて、既に数値型でデータが保持されている場合に設定される。また、下位階層のラッパークラスのオブジェクトがSTRUCT型の場合は、上記の処理(ステップ205〜208)が再帰的に実行される。
下位階層の全てのラッパークラスのオブジェクトについて、上記ステップ205〜208が終了すると、階層クラスのオブジェクトにおけるセットの処理は終了する。
図2Bは、本発明の実施態様である、階層クラスのオブジェクトへのゲットの命令が実行された場合のフローの例を示す。
プログラム実行時において、階層を有する集団データ項目に対応するデータへのゲットの命令が実行されると、該データを取得するためのchar配列がポイントされているかの判定が行われる(ステップ221)。
上記char配列がポイントされている場合、上記char配列のメモリ領域は確保されている。よってchar配列本体からデータがゲットされ(ステップ228)、処理は終了する。なお、該取得において、下位階層の全ての数値型のラッパークラスのオブジェクトが有するchar配列表現の有効性フラグが確認されなければならない。該フラグが無効ならば、上記ラッパークラスのオブジェクトの有する数値型データを格納する変数からchar型の配列に変換し、有効とする必要がある。
上記char配列がポイントされていない場合、上記char配列のメモリ領域は確保されていない。よって、上記データが格納される領域を確保するため、char配列本体が生成される(ステップ222)。ここで生成されるchar配列本体のサイズは、階層クラスの下位階層の全てのラッパークラスのオブジェクトの変数にセットされている文字数の合計サイズである。
次に、下位階層の全てのラッパークラスのオブジェクトについて、以下の処理が実行される(ステップ223)。
下位階層の全てのラッパークラスのオブジェクトのchar配列は、階層クラスのオブジェクトの上記char配列本体と共有される。まず、上記下位階層全てのラッパークラスのオブジェクトにおいて、上記char配列本体がポイントされる(ステップ224)。また、各項目の指定長だけ位置をずらしながらオフセット値がセットされる(ステップ225)。上記指定長は、例えば下位階層のオブジェクトの変数にセットされた文字数を順に加えていくことで求められる。
さらに、下位階層のラッパークラスのオブジェクトにおいて、既にchar配列が生成されていた場合、ステップ222において生成されたchar配列本体に、下位階層のラッパークラスのオブジェクトが有するデータがコピーされる。(ステップ227)。ここで、該下位階層のラッパークラスのオブジェクトが数値型の場合、char配列表現の有効性フラグがチェックされる。該フラグが無効に設定されているならば、数値データから変換された文字データがコピーされる。また、char配列表現の有効性フラグが有効に設定される。なお、上記コピーされるデータのchar配列本体上での位置は、下位階層のラッパークラスのオブジェクトが有するオフセット値から求められる。また、上記数値データから文字データへの変換は、INTクラスのオブジェクトでは、JAVA(商標)の標準ライブラリ関数によって実現され、DECIMALクラスのオブジェクトでは、相互変換オブジェクトによって実現される。なお、下位階層のオブジェクトについてのchar配列本体は解放されてもよい。
下位階層の全てのラッパークラスのオブジェクトについて、上記ステップ224〜227が終了するとchar配列本体からデータがゲットされ(ステップ228)、階層クラスのオブジェクトにおけるゲットの処理は終了する。
図2Cは、本発明の実施態様である、構造体配列の例であるCOBOL文(図1、101)を、JAVA(商標)コードに変換した例を示す。
COBOL文(図1、101)で表わされる構造体配列は、JAVA(商標)コード(231)で表わされる構造体配列に変換される。該構造体に対して、char配列が共有されると、内部的には、オブジェクト構造(232)に示す構造となる。オブジェクト構造(232)において、CHARS、INT及びDECIMALの各オブジェクトは、char配列へのポインタとオフセット値を用いて、各自の領域をポイントしている。char配列の共有は、上位階層クラスのオブジェクトStudentRecord[x]の単位でアクセスされたときに初めて行われる。よって、それ以前に下位階層のオブジェクトが直接更新されていた場合、図の点線で描かれた部分のように、以前のデータ領域は捨てられる。そして、新しくポインタがすげ替えられる。また、必要ならばデータのコピーが行なわれる。
図2Dは、REDEFINES句の例であるCOBOL文を、JAVA(商標)コードに変換した例を示す。
REDEFINES句の例であるCOBOL文(図1、107)は、JAVA(商標)コード(241)に変換される。
データ領域が共有される側のオブジェクトであるmonthDefは、ラッパークラスCHARSのオブジェクトとして生成される。該オブジェクトの生成において、初期値が指定されている。よって、char配列もアロケートされ、データ「JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC」が設定される。
データ領域を共有する側のオブジェクトであるmonthNameは、ラッパークラスSTRUCTを継承するクラスであるMonthNameのオブジェクトとして生成される。該クラスの定義において、配列monthを格納するための配列は定義されるが、データは設定されない。代わりに、該オブジェクト生成時に実行されるコンストラクタにおいて、データ領域が共有される側のオブジェクトであるmonthDefがredefine()メソッドに渡される。上記メソッドによって、char配列が共有される。
オブジェクト構造(242)は、monthName及びmonthDefとchar配列との関係を示す。
monthDefは、char配列をポイントしている。
monthNameは、12のmonthで構成される。monthは、char配列の対応する個所をポイントしている。対応する個所とは、char配列の0番目の要素、3番目の要素、・・・33番目の要素である。これは、monthは、文字数が3の配列だからである。また、ポイントするとは、共通クラスのフィールドに含まれるchar配列へのポインタ及びオフセットを用いて、char配列の要素を指すことである。
JAVA(商標)コード上で、階層型のデータ構造の本体はchar配列として表現される。また、COBOLコードにおけるREDEFINES句及び階層型のデータ構造によるデータの共有は、JAVA(商標)コードにおいて実現される。よって、該JAVA(商標)コードにおいて、無駄なオブジェクト生成及びデータのコピー操作を省くことができる。結果として、ヒープメモリ消費を節約した高性能な実装が可能となる。
char配列の共有は、集団データ項目に対するデータがゲット又はセットされるタイミングで行われる。これは、プログラム中で必ずしも構造体に含まれる全てのデータがアクセスされるとは限らないためである。特にCOBOLは、copy文を使うことによって、外部のソースプログラム及びデータ構造の宣言をコードに取り込む(include)機能を有する。該取り込みの機能は、複数のプログラムでよく利用されるデータ構造を定義するときなどに、使われる機能である。しかし、該取り込まれたデータ構造のごく一部だけが使用されるというのが一般的であり、宣言されたデータ構造に対応するメモリ領域を最初に全て確保するのはメモリの使用効率が良くない。大規模商用アプリケーションにおいて、COBOLのコードをJAVA(商標)のコードに変換する場合に、実際は使用されないメモリ領域を確保するような変換を行ったことによって、大きく性能を落としている例がある。メモリが効率よく使用されるために、データ本体を管理するためのラッパークラスのオブジェクトのchar配列の生成がまた、該データのゲット又はセットを通して行われるようになっている。よって、該データへのアクセスがあったときに遅延的に(lazy)にインスタンスが作られる。
また、最適化の例として、事前にCOBOLコード又は変換後JAVA(商標)コードに対してデータフロー解析などのプログラム解析を行う方法も考えられうる。該解析により、階層型データ構造の上位階層のデータへアクセスする処理が実行パスに含まれることが判明した場合、変換されるJAVA(商標)コードにおいて、初めに該上位階層のオブジェクトのメンバであるchar配列を先に定義する命令を挿入する。これによって、下位レベルの変数に対して先にchar配列を取ることなく、オブジェクト生成の無駄を更に削減することができる。
図3は、本発明の実施態様における、COBOLコードのデータ定義部分をJAVA(商標)コードに変換する例を示す。
上記COBOLコードにおいてデータ項目が定義される個所が、JAVA(商標)コードに変換されうる。以下に該変換の手順を示す。
まず、上記COBOLコードにおいて、データ項目が定義されるセクションである「WORKING-STORAGE SECTION.」が検索される(ステップ301)。上記「WORKING-STORAGESECTION.」が発見されると、上記COBOLコードは、1行ずつ精査される。該精査は、精査されている現在の行(以下、第1の行)の次の行(以下、第2の行)に、階層型データ構造の特徴である「階層レベル」が含まれなくなるまで行われる(ステップ302)。該精査において、まず、上記第1の行と上記第2の行の「階層レベル」の値が比較される。(ステップ303)。
・上記第1の行の「階層レベル」の値が、上記第2の行の「階層レベル」の値より小さい場合、上記第1の行で定義されたデータ項目は、集団データ項目である。よって、上記第1の行は、ラッパークラスSTRUCTのオブジェクトを定義する行に変換される(ステップ304)。該変換は、例えば、次のような変換である。
public class (データ項目の名前) extends STRUCT{
次に、上記第1の行に「REDEFINE」が含まれるかどうかが調べられる(ステップ305)。上記「REDEFINE」が含まれる場合、メソッドredefine()を出力するための情報がスタックに格納される(ステップ306)。該情報は、例えば、コンストラクタの部分を作成する為に必要な、データ項目の名前である。次に、構造体を閉じるために必要な情報が格納される(ステップ307)。該情報は、第1の行の階層レベル及びオブジェクトを定義し生成するために必要なデータ項目の名前である。また、データ項目が配列に対応するならば、配列の要素数も該情報に含まれる。
・上記第1の行の「階層レベル」の値が、上記第2の行の「階層レベル」の値以上の値である場合、上記第1の行で定義されたデータ項目は、下位階層のデータ項目を持たないデータ項目である。よって、上記第1の行は、データ項目のタイプに対応したラッパークラスのオブジェクトを定義し生成する行に変換される(ステップ308)。該変換は、例えば、次のような変換である。
private ラッパークラス(データ項目の名前)= new ラッパークラス(文字数);
ここで、COBOLのPICTURE句において、タイプとして「X」又は「A」が指定されたデータ項目に対応するオブジェクトは、ラッパークラスCHARSによって定義される。また、COBOLのPICTURE句において、タイプとして「9」が指定され「V」を含むデータ項目に対応するオブジェクトは、ラッパークラスDECIMALによって定義される。COBOLのPICTURE句において、タイプとして「9」が指定され且つ「V」を含まないデータ項目に対応するオブジェクトは、ラッパークラスINTによって定義される。
次に、構造体の後処理(ステップ309)が実行される。該後処理では、上記第1の行と上記第2の行の階層レベルと、スタックに格納されている構造体に変換された行の階層レベルが比較される。そして、
上記第2の階層レベル=<スタックに格納された階層レベル
の条件を満たす数分の閉じ括弧及び構造体オブジェクトの生成処理が出力される。また、メソッドredefine()を出力するための情報が格納されている場合は、該情報も出力される。
精査する行が残り1行になると、最後の1行を精査する処理(ステップ311)が実行される。該処理では、データ項目のタイプに対応したラッパークラスのオブジェクトを定義し生成する処理(ステップ308)及び構造体の後処理(ステップ309)が実行される。
図4A〜Cは、本発明の実施態様に従い変換されたJAVA(商標)コードについての効果を測定するために用いたサンプルプログラムの例を示す。
図4Aは、JAVA(商標)コードへの変換対象であるCOBOLサンプルプログラムを示す。
COBOLプログラム(401)は、製品工場の製品番号ごとに製品を集計するプログラムである、該プログラムは、製品番号でソートされたデータをファイルから読み込んで、製品番号ごとの集計結果を出力する。
図4Bは、図4AのCOBOLプログラム(401)を従来の方法により変換したJAVA(商標)コード(402)の例を示す。
従来の方法とは、COBOLにおけるデータ型を対応するJAVA(商標)のデータ型に変換させる方法である。具体的には、PIC X(*)は、String型に変換する。PIC 9(*)は、BigDecimal型又はint型に変換する。また、階層構造は、独自に内部クラスを作成し、該内部クラスを用いて定義される構造体に変換される。該構造体に含まれるデータ領域は、構造体の外にも重複して定義される。なお、JAVA(商標)プログラム(402)においてgetdata()メソッドの行う処理である入力読み込み処理は、測定時においてインライン処理として実行されている。
図4Cは、図4AのCOBOLプログラム(401)を本発明の実施態様により変換したJAVA(商標)コード(403)の例を示す。
図4Dは、本発明の実施態様に従うJAVA(商標)プログラム(402、403)の検証結果を示す。
検証者は、該検証に100,000件のレコードを使用し、ヒープメモリ使用量及び実行時間を計測した。また、該測定にIBM(商標)JAVA(商標)5.0が使用された。JITコンパイル時間及びGC(ガーベージコレクション)時間を排除するために、検証者は、main()メソッドに手を加え、JAVA(商標)プログラム(402、403)の実行において、初めにウォームアップランとして同じ入力サイズのレコードを使用してプログラムの実行を10回繰り返した。また、検証者は、上記繰り返しの後、ガーベージコレクションを実行する命令であるSystem.gc()を実施し、その後、上記計測を開始した。また、検証者は、JAVA(商標)の実行オプションに、-Xjit:optLevel=hot,count=3 -Xms512m -Xmx512mを指定した。また、検証者は、測定中にGCが発生していないことを確認した。
表(404)は、上記検証の結果を示す。
本発明の実施態様による変換コードを用いた場合、実行時間は218ミリ秒であり、ヒープメモリの使用量は131.3メガバイトであった。
従来の方法による変換コードを用いた場合、実行時間は282ミリ秒であり、ヒープメモリの使用量は192.2メガバイトであった。
上記結果より、本発明の実施態様による変換コードを用いた場合、従来の方法による変換コードを用いた場合と比べて、20%以上の実行時間が短縮され、且つ30%以上のヒープメモリ使用量が削減された。
図5は、本発明の実施態様であるシステム構成の例を示す。
コンピュータ・システム(501)は、CPU(502)及びメモリ(503)を含む。メモリ(503)は、プログラム(504)を保持する。プログラム(504)は、JAVA(商標)コードを含む。該JAVAコードはラッパークラスのオブジェクトに含まれるセット又はゲットの命令を含み、上記オブジェクトの扱うデータはCOBOL言語におけるデータ項目に対応する。
CPU(502)は、メモリ(503)に保持されたプログラム(504)を読み出して実行する。CPU(502)は、プログラム内のラッパークラスのオブジェクトを呼び出す。CPU(502)は、該オブジェクトのアクセスの対象であるchar配列の上位階層のchar配列が生成されている場合、上記上位階層のchar配列を指すポインタ、文字数及びオフセットを保持する。CPU(502)は、該オブジェクトのアクセスの対象であるchar配列の上位階層のchar配列が生成されていない場合、上記オブジェクトのアクセスの対象である上記char配列を生成する。さらにCPU(502)は、上記オブジェクトのアクセスの対象である上記char配列の下位階層のchar配列にアクセスするためのそれぞれのオブジェクトに、上記char配列を指すポインタ、文字数及びオフセットを保持させる。
図6A〜図6Eは、特許請求の範囲に記載の発明の理解を容易にするための図である。
図6Aは、COBOLコード、ラッパークラス及び第1〜4の各オブジェクトの関係を示す。
図6Bは、ラッパークラスと第1のオブジェクトとの関係を示す。請求項4及び9の各構成要素は、請求項3の各構成要素に対応する。請求項9の各構成要素はまた、請求項8の各構成要素に対応する。
図6Cは、ラッパークラスと第2のオブジェクトとの関係を示す。請求項5の各構成要素は、請求項3の各構成要素に対応する。
図6Dは、ラッパークラスと第3のオブジェクトとの関係を示す。請求項10及び11の各構成要素は、請求項3の構成要素に対応する。
図6Eは、ラッパークラスと第4のオブジェクトとの関係を示す。請求項12及び14の各構成要素は、請求項3の各構成要素に対応する。請求項14の各構成要素はまた、請求項8の各構成要素に対応する。
図7は、上記システム構成をさらに詳述したブロック図を示す。
コンピュータ・システム(701)は、CPU(703)とメイン・メモリ(702)と含み、これらはバス(714)に接続されている。CPU(703)は好ましくは、32ビット又は64ビットのアーキテクチャに基づくものであり、例えば、インテル社のXeon(商標)シリーズ、Core(商標)シリーズ、Atom(商標)シリーズ、Pentium(商標)シリーズ、Celeron(商標)シリーズ、AMD社のPhenom(商標)シリーズ、Athlon(商標)シリーズ、Turion(商標)シリーズ及びSempron(商標)などを使用することができる。バス(714)には、ディスプレイ・コントローラ(707)を介して、LCDモニタなどのディスプレイ(712)が接続される。ディスプレイ(712)は、コンピュータ・システムの管理のために、通信回線を介してネットワークに接続されたコンピュータ・システムについての情報と、そのコンピュータ・システム上で動作中のソフトウェアについての情報を、適当なグラフィック・インターフェースで表示するために使用される。バス(714)にはまた、IDE又はSATAコントローラ(704)を介して、ハードディスク又はシリコン・ディスク(705)と、CD−ROM、DVDドライブ又はBDドライブ(706)が接続される。
ハードディスクには、オペレーティング・システム、J2EEなどのJava処理環境を提供するプログラム、その他のプログラム及びデータが、メイン・メモリにロード可能に記憶されている。
CD−ROM、DVD又はBDドライブ(706)は、必要に応じて、CD−ROM、DVD−ROM又はBDからプログラムをハードディスクに追加導入するために使用される。バス(714)には更に、キーボード・マウスコントローラ(709)を介して、キーボード(710)及びマウス(711)が接続されている。
通信インタフェース(713)は、例えばイーサネット(商標)・プロトコルに従う。通信インタフェース(713)は、通信コントローラ(708)を介してバス(714)に接続され、コンピュータ・システム及び通信回線(715)を物理的に接続する役割を担い、コンピュータ・システムのオペレーティング・システムの通信機能のTCP/IP通信プロトコルに対して、ネットワーク・インターフェース層を提供する。なお、通信回線は、有線LAN環境、或いは例えばIEEE802.11a/b/g/nなどの無線LAN接続規格に基づく無線LAN環境であってもよい。
COBOLにおけるデータ部の記述の例を示す。 本発明の実施態様である、階層クラスのオブジェクトへのセットの命令が実行された場合のフローの例を示す。 本発明の実施態様である、階層クラスのオブジェクトへのゲットの命令が実行された場合のフローの例を示す。 本発明の実施態様である、構造体配列の例であるCOBOL文を、JAVAコードに変換した例を示す。 本発明の実施態様である、REDEFINES句の例であるCOBOL文を、JAVAコードに変換した例を示す。 本発明の実施態様における、COBOLコードをJAVAコードに変換する例を示す。 JAVAコードへの変換対象であるCOBOLサンプルプログラムを示す。 図4AのCOBOLプログラムを従来の方法により変換したJAVAコードの例を示す。 図4AのCOBOLプログラムを本発明の実施態様により変換したJAVAコードの例を示す。 本発明の実施態様に従うJAVAプログラムの検証結果を示す。 本発明の実施態様であるシステム構成の例を示す。 COBOLコード、ラッパークラス及び第1〜4のオブジェクトの関係を示す。 ラッパークラスと第1のオブジェクトの関係を示す。 ラッパークラスと第2のオブジェクトの関係を示す。 ラッパークラスと第3のオブジェクトの関係を示す。 ラッパークラスと第4のオブジェクトの関係を示す。 図5のシステム構成をさらに詳述したブロック図を示す。

Claims (22)

  1. COBOLコードから変換されたJAVA(商標)コードを含むプログラムを実行するコンピュータ・システムであって、
    ラッパークラスをデータ型とするオブジェクトの少なくとも1の宣言を有するJAVAコードを含むプログラムを保持する記憶部であって、前記宣言夫々は、COBOLコードに含まれるデータ項目の宣言夫々から変換された宣言である、前記記憶部と、
    前記プログラムを前記記憶部からメモリ内に読み出し、該プログラムを実行するCPUと
    を含み、
    前記ラッパークラスが、COBOLコードにおいて宣言されているデータ項目のデータ(以下、第1のデータ)に対応するデータ(以下、第2のデータ)を管理する機能を有し、
    前記ラッパークラスが、
    前記第2のデータを格納する第1のchar配列と、
    前記第2のデータの文字数を格納する変数と、
    前記第2のデータが格納される位置を表すオフセット値を格納する変数と
    を含み、
    前記ラッパークラスが、
    数値型データを格納する変数と、
    前記数値型データと前記第1のchar配列上のデータとの相互変換を行うための0又は1のオブジェクトと、
    前記数値型データを格納する変数の有効性を示すフラグと、
    char配列表現の有効性を示すフラグと
    をさらに含む、
    前記コンピュータ・システム。
  2. 前記ラッパークラスから生成されるオブジェクト(以下、第1のオブジェクト)が、
    前記第2のデータに対応する第3のデータを管理し、及び
    前記第1のchar配列に対応する第2のchar配列と、
    前記第3のデータの文字数を格納する前記変数に対応する第1の変数と、
    前記第3のデータが格納される位置を表すオフセット値を格納する前記変数に対応する第2の変数と
    を含む、請求項に記載のコンピュータ・システム。
  3. 前記第2のchar配列が、
    前記第3のデータを格納し、又は、
    前記第1のオブジェクトの属する階層構造において上位階層にあり且つ前記ラッパークラスから生成されるところのオブジェクト(以下、第2のオブジェクト)に含まれる第3のchar配列についてのメモリ領域を共有し、
    ここで、前記第2のオブジェクトは、前記第1のchar配列に対応する前記第3のchar配列を含み、及び前記第3のchar配列に対して前記メモリ領域が割り当てられている最も上位階層のオブジェクトであり、
    前記第3のchar配列は、前記第3のデータが格納される前記メモリ領域を含む、請求項に記載のコンピュータ・システム。
  4. 前記第1の変数が、前記第3のデータの文字数を格納する、請求項に記載のコンピュータ・システム。
  5. 前記第2の変数が、前記メモリ領域上で前記第3のデータが格納される位置を表すオフセット値を格納する、請求項に記載のコンピュータ・システム。
  6. 前記ラッパークラスから生成されるオブジェクト(以下、第1のオブジェクト)が、
    前記第2のデータに対応する第3のデータを管理し、及び
    前記第1のchar配列に対応する第2のchar配列と、
    前記第3のデータの文字数を格納する前記変数に対応する第1の変数と、
    前記第3のデータが格納される位置を表すオフセット値を格納する前記変数に対応する第2の変数と、
    前記数値型データを格納する前記変数に対応する第3の変数と、
    前記数値型データを格納する変数の有効性を示す前記フラグに対応する第1のフラグと、
    前記char配列表現の有効性を示す前記フラグに対応する第2のフラグと
    を含み、
    前記ラッパークラスが前記相互変換を行うためのオブジェクトを含む場合、前記相互変換を行うためのオブジェクトに対応する第1の相互変換オブジェクトと
    をさらに含む、請求項1に記載のコンピュータ・システム。
  7. 前記ラッパークラスが、前記第1のchar配列についてのメモリ領域を共有する命令をさらに含み、
    前記ラッパークラスから生成されるオブジェクト(以下、第1のオブジェクト)が、前記第1のchar配列に対応する第2のchar配列及び前記共有する命令を含み、
    前記第1のオブジェクトの共有する命令が、
    前記第2のchar配列についてのメモリ領域を、前記ラッパークラスから生成され且つ前記第1のchar配列に対応する第4のchar配列を有するところの第3のオブジェクトに含まれる前記第4のchar配列についてのメモリ領域と共有する命令
    を含む、請求項に記載のコンピュータ・システム。
  8. 前記第2のデータが、COBOLのREDEFINES句で宣言される第1のデータに対応するデータであり、
    前記第1のオブジェクトの共有する命令が、前記第1のオブジェクトの生成において実行されるコンストラクタに含まれる、請求項に記載のコンピュータ・システム。
  9. 前記ラッパークラスが、前記第1のオブジェクトの属する階層構造において下位階層にあり且つ前記ラッパークラスから生成されるところの少なくとも1のオブジェクト(以下、第4のオブジェクト)の定義をさらに含み、
    前記CPUが下記命令をさらに実行し、該命令が、
    前記第3のデータのセット又はゲットの命令を実行する命令と、
    前記第2のchar配列についてのメモリ領域が割り当てられていない場合、
    前記第2のchar配列に対してメモリ領域を割り当てる命令と、
    前記第4のオブジェクトに含まれる第5のchar配列についてのメモリ領域を共有する命令であって、
    前記第4のオブジェクトが、
    前記第2のデータに対応する第4のデータを管理し、及び
    前記第1のchar配列に対応する前記第5のchar配列と、
    前記第4のデータの文字数を格納する前記変数に対応する第4の変数と、
    前記第4のデータが格納される位置を表すオフセット値を格納する前記変数に対応する第5の変数と
    を含む、前記共有する命令と、
    前記第5の変数に対して、前記第4のデータの前記第2のchar配列についての前記メモリ領域における位置を設定する命令と
    を含む、請求項に記載のコンピュータ・システム。
  10. 前記共有する命令が、
    前記第5のchar配列に対してメモリ領域が割り当てられている場合に、前記第5のchar配列に格納された前記第4のデータを前記第2のchar配列にコピーする命令をさらに含む、請求項に記載のコンピュータ・システム。
  11. 前記ラッパークラスが、前記第1のオブジェクトの属する階層構造において下位階層にあり且つ前記ラッパークラスから生成されるところの少なくとも1のオブジェクト(以下、第4のオブジェクト)の定義をさらに含み、
    前記CPUが下記命令をさらに実行し、該命令が、
    前記第3のデータのセット又はゲットの命令を実行する命令と、
    前記第2のchar配列についてのメモリ領域が割り当てられていない場合、
    前記第2のchar配列に対してメモリ領域を割り当てる命令と、
    前記第4のオブジェクトに含まれる第5のchar配列についてのメモリ領域を共有する命令であって、
    前記第4のオブジェクトが、
    前記第2のデータに対応する第4のデータを管理し、及び
    前記第1のchar配列に対応する前記第5のchar配列と、
    前記第4のデータの文字数を格納する前記変数に対応する第4の変数と、
    前記第4のデータが格納される位置を表すオフセット値を格納する前記変数に対応する第5の変数と、
    前記数値型データを格納する前記変数に対応する第6の変数と、
    前記相互変換を行うためのオブジェクトに対応する第2の相互変換オブジェクトと、
    前記数値型データを格納する変数の有効性を示す前記フラグに対応する第3のフラグと、
    前記char配列表現の有効性を示す前記フラグに対応する第4のフラグと
    を含む、前記共有する命令と、
    前記第5の変数に対して、前記第4のデータの前記第2のchar配列についての前記メモリ領域における位置を設定する命令と
    を含む、請求項に記載のコンピュータ・システム。
  12. 前記共有する命令が、
    前記第5のchar配列に対してメモリ領域が割り当てられている場合に、前記第5のchar配列に格納された前記第4のデータを前記第2のchar配列にコピーする命令をさらに含む、請求項11に記載のコンピュータ・システム。
  13. 前記コピーする命令が、
    前記第4のオブジェクトの有する前記第3のフラグを無効に設定する命令
    をさらに含む、請求項12に記載のコンピュータ・システム。
  14. セットされるデータとして数値型データが与えられた場合、前記CPUが下記命令をさらに実行し、該命令が、
    前記第3の変数に前記数値型データをセットする命令と、
    前記第2のフラグを無効に設定する命令と
    を含む、請求項に記載のコンピュータ・システム。
  15. 前記第3の変数に前記数値型データをセットする命令が、
    前記第1のフラグを有効に設定する命令
    をさらに含む、請求項14に記載のコンピュータ・システム。
  16. 前記命令の実行がゲットの命令であり、
    前記CPUが下記命令をさらに実行し、該命令が、
    前記メモリ領域が共有された前記第5のchar配列から前記第4のデータを取り出す命令
    を含む、請求項11に記載のコンピュータ・システム。
  17. 前記命令の実行がゲットの命令であり、
    前記CPUが下記命令をさらに実行し、該命令が、
    前記第4のフラグを取得し、該取得した第4のフラグが有効に設定されていることを確認する命令
    を含む、請求項16に記載のコンピュータ・システム。
  18. 前記CPUが下記命令をさらに実行し、該命令が、
    前記第3の変数から数値型データを取得する命令と、
    前記第1の相互変換オブジェクトを用いて、前記取得したデータを文字型のデータに変換する命令と、
    前記変換された文字型のデータを前記第2のchar配列に設定する命令と、
    前記第2のフラグを有効に設定する命令と
    を含む、請求項に記載のコンピュータ・システム。
  19. 前記CPUが下記命令をさらに実行し、該命令が、
    前記第2のchar配列から文字型のデータを取得する命令と、
    前記第1の相互変換オブジェクトを用いて、前記取得した文字型のデータを数値型データに変換する命令と、
    前記変換された数値型データを前記第3の変数に設定する命令と、
    前記第1のフラグを有効に設定する命令と
    を含む、請求項に記載のコンピュータ・システム。
  20. COBOLコードから変換されたJAVA(商標)コードを含むプログラムを実行する方法において、コンピュータ・システムに下記ステップを実行させる方法であって、
    ラッパークラスをデータ型とするオブジェクトの少なくとも1の宣言を有する前記プログラムを記憶部からメモリ内に読み出すステップであって、前記宣言夫々は、COBOLコードに含まれるデータ項目の宣言夫々から変換された宣言である、前記読み出すステップと、
    前記読み出したプログラムを実行するステップと
    を含み、
    前記ラッパークラスが、COBOLコードにおいて宣言されているデータ項目のデータ(以下、第1のデータ)に対応するデータ(以下、第2のデータ)を管理する機能を有し、
    前記ラッパークラスが、
    前記第2のデータを格納する第1のchar配列と、
    前記第2のデータの文字数を格納する変数と、
    前記第2のデータが格納される位置を表すオフセット値を格納する変数と
    を含み、
    前記ラッパークラスが、
    数値型データを格納する変数と、
    前記数値型データと前記第1のchar配列上のデータとの相互変換を行うための0又は1のオブジェクトと、
    前記数値型データを格納する変数の有効性を示すフラグと、
    char配列表現の有効性を示すフラグと
    をさらに含む、
    前記方法。
  21. COBOLコードから変換されたJAVA(商標)コードを含むプログラムを実行する方法において、コンピュータ・システムに下記ステップを実行させる方法であって、
    ラッパークラスをデータ型とするオブジェクトの少なくとも1の宣言を有するJAVAコードを含むプログラムを記憶部からメモリ内に読み出すステップであって、
    前記宣言夫々は、COBOLコードに含まれるデータ項目の宣言夫々から変換された宣言であり、前記ラッパークラスは、COBOLコードにおいて宣言されているデータ項目のデータ(以下、第1のデータ)に対応するデータ(以下、第2のデータ)を管理する機能を有し、
    前記ラッパークラスは、
    前記第2のデータを格納する第1のchar配列と、
    前記第2のデータの文字数を格納する変数と、
    前記第2のデータが格納される位置を表すオフセット値を格納する変数と、
    数値型データを格納する0又は1の変数と、
    前記数値型データと前記第1のchar配列上のデータとの相互変換を行うための0又は1のオブジェクトと、
    前記数値型データを格納する変数の有効性を示す0又は1のフラグと、
    char配列表現の有効性を示す0又は1のフラグと、
    前記ラッパークラスから生成される0以上のオブジェクトの定義と
    を含み、
    前記ラッパークラスから生成されるオブジェクト(以下、第1のオブジェクト)は、
    前記第2のデータに対応する第3のデータを管理し、及び
    前記第1のchar配列に対応する第2のchar配列と、
    前記第3のデータの文字数を格納する前記変数に対応する第1の変数と、
    前記第3のデータが格納される位置を表すオフセット値を格納する前記変数に対応する第2の変数と、
    前記第1のオブジェクトの属する階層構造において下位階層にあり且つ前記ラッパークラスから生成されるところの少なくとも1のオブジェクト(以下、下位階層のオブジェクト)と
    を含み、
    前記下位階層のオブジェクトは、
    前記第2のデータに対応する第4のデータを管理し、及び
    前記第1のchar配列に対応する前記第3のchar配列と、
    前記第4のデータの文字数を格納する前記変数に対応する第3の変数と、
    前記第4のデータが格納される位置を表すオフセット値を格納する前記変数に対応する第4の変数と、
    前記数値型データを格納する前記変数に対応する第5の変数と、
    前記相互変換を行うためのオブジェクトに対応する第2の相互変換オブジェクトと、
    前記数値型データを格納する変数の有効性を示す前記フラグに対応する第1のフラグと、
    前記char配列表現の有効性を示す前記フラグに対応する第2のフラグと
    を含む、
    前記読み出すステップと、
    前記第3のデータのセット又はゲットの命令を実行するステップと、
    前記第2のchar配列についてのメモリ領域が割り当てられていない場合、
    前記第2のchar配列に対してメモリ領域を割り当てるステップと、
    前記下位階層のオブジェクトに含まれる第3のchar配列についてのメモリ領域を共有するステップと、
    前記第4の変数に対して、前記第4のデータの前記第2のchar配列についての前記メモリ領域における位置を設定するステップと
    を含む、前記方法。
  22. コンピュータに、請求項20又は21に記載の方法の各ステップを実行させるコンピュータ・プログラム。
JP2008253637A 2008-09-30 2008-09-30 Cobolコードから変換されたjava(登録商標)コードを含むプログラムを実行するコンピュータ・システム、並びにその方法及びコンピュータ・プログラム Expired - Fee Related JP5147626B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008253637A JP5147626B2 (ja) 2008-09-30 2008-09-30 Cobolコードから変換されたjava(登録商標)コードを含むプログラムを実行するコンピュータ・システム、並びにその方法及びコンピュータ・プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008253637A JP5147626B2 (ja) 2008-09-30 2008-09-30 Cobolコードから変換されたjava(登録商標)コードを含むプログラムを実行するコンピュータ・システム、並びにその方法及びコンピュータ・プログラム

Publications (2)

Publication Number Publication Date
JP2010086218A JP2010086218A (ja) 2010-04-15
JP5147626B2 true JP5147626B2 (ja) 2013-02-20

Family

ID=42250130

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008253637A Expired - Fee Related JP5147626B2 (ja) 2008-09-30 2008-09-30 Cobolコードから変換されたjava(登録商標)コードを含むプログラムを実行するコンピュータ・システム、並びにその方法及びコンピュータ・プログラム

Country Status (1)

Country Link
JP (1) JP5147626B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5464673B2 (ja) * 2011-08-23 2014-04-09 Necシステムテクノロジー株式会社 コンパイル支援装置、コンパイル支援方法、及びプログラム
JP6251158B2 (ja) * 2014-12-12 2017-12-20 Tis株式会社 プログラム変換システム
JP6458196B1 (ja) * 2018-09-27 2019-01-23 Tis株式会社 プログラム変換システム、変換プログラム実行システム、情報処理システム、プログラム変換方法、変換プログラム実行方法、及び情報処理方法
JP6475888B1 (ja) * 2018-10-05 2019-02-27 Tis株式会社 プログラム変換システム

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4724387B2 (ja) * 2004-06-24 2011-07-13 富士通株式会社 プログラム変換プログラム、プログラム変換装置およびプログラム変換方法
US7386840B1 (en) * 2004-09-09 2008-06-10 Lockheed Martin Corporation Method, apparatus, and program for source code translation from COBOL to object-oriented code
JP5007060B2 (ja) * 2006-03-28 2012-08-22 株式会社野村総合研究所 ジョブ管理装置およびジョブ管理方法

Also Published As

Publication number Publication date
JP2010086218A (ja) 2010-04-15

Similar Documents

Publication Publication Date Title
Gremme et al. GenomeTools: a comprehensive software library for efficient processing of structured genome annotations
Miller et al. An overview of the CellML API and its implementation
JP5851396B2 (ja) 処理方法
Treichler et al. Language support for dynamic, hierarchical data partitioning
JP6427592B2 (ja) データ型に関連するデータプロファイリング操作の管理
US8225276B1 (en) Shared code management
US10275226B2 (en) Structural representation of generic type variable in a nominally typed virtual machine
JPH0836494A (ja) 動的拡張可能オブジェクト用のタイプ・セーフ・フレームワークのための方法及び装置
Verwaest et al. Flexible object layouts: enabling lightweight language extensions by intercepting slot access
US9910591B2 (en) Visualizations of memory layouts in software programs
Murray et al. Accessible data curation and analytics for international-scale citizen science datasets
JP5147626B2 (ja) Cobolコードから変換されたjava(登録商標)コードを含むプログラムを実行するコンピュータ・システム、並びにその方法及びコンピュータ・プログラム
CN114930297A (zh) 单位值集的无锁读取
Braibant et al. Implementing and reasoning about hash-consed data structures in Coq
CN114830099A (zh) 集成引用和次对象的标记
JP4754004B2 (ja) マルチスレッド上で動作するプログラムのプログラム・コードをロック衝突が少ないプログラム・コードに変換するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム
Li Java: data structures and programming
US20160124646A1 (en) Building memory layouts in software programs
Zakowski et al. Verifying a concurrent garbage collector using a rely-guarantee methodology
Bancila Modern C++ Programming Cookbook: Master C++ core language and standard library features, with over 100 recipes, updated to C++ 20
Dyer et al. Boa: An enabling language and infrastructure for ultra-large-scale msr studies
Panyala et al. On the use of term rewriting for performance optimization of legacy HPC applications
US10353793B2 (en) Identifying improvements to memory usage of software programs
Bancila Modern C++ Programming Cookbook
Levin et al. owlcpp: a C++ library for working with OWL ontologies

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110816

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121010

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121011

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20121011

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: 20121101

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20121101

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20121101

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121127

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151207

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees