特許第6458196号(P6458196)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ TIS株式会社の特許一覧

特許6458196プログラム変換システム、変換プログラム実行システム、情報処理システム、プログラム変換方法、変換プログラム実行方法、及び情報処理方法
<>
  • 特許6458196-プログラム変換システム、変換プログラム実行システム、情報処理システム、プログラム変換方法、変換プログラム実行方法、及び情報処理方法 図000002
  • 特許6458196-プログラム変換システム、変換プログラム実行システム、情報処理システム、プログラム変換方法、変換プログラム実行方法、及び情報処理方法 図000003
  • 特許6458196-プログラム変換システム、変換プログラム実行システム、情報処理システム、プログラム変換方法、変換プログラム実行方法、及び情報処理方法 図000004
  • 特許6458196-プログラム変換システム、変換プログラム実行システム、情報処理システム、プログラム変換方法、変換プログラム実行方法、及び情報処理方法 図000005
  • 特許6458196-プログラム変換システム、変換プログラム実行システム、情報処理システム、プログラム変換方法、変換プログラム実行方法、及び情報処理方法 図000006
  • 特許6458196-プログラム変換システム、変換プログラム実行システム、情報処理システム、プログラム変換方法、変換プログラム実行方法、及び情報処理方法 図000007
  • 特許6458196-プログラム変換システム、変換プログラム実行システム、情報処理システム、プログラム変換方法、変換プログラム実行方法、及び情報処理方法 図000008
  • 特許6458196-プログラム変換システム、変換プログラム実行システム、情報処理システム、プログラム変換方法、変換プログラム実行方法、及び情報処理方法 図000009
  • 特許6458196-プログラム変換システム、変換プログラム実行システム、情報処理システム、プログラム変換方法、変換プログラム実行方法、及び情報処理方法 図000010
  • 特許6458196-プログラム変換システム、変換プログラム実行システム、情報処理システム、プログラム変換方法、変換プログラム実行方法、及び情報処理方法 図000011
  • 特許6458196-プログラム変換システム、変換プログラム実行システム、情報処理システム、プログラム変換方法、変換プログラム実行方法、及び情報処理方法 図000012
  • 特許6458196-プログラム変換システム、変換プログラム実行システム、情報処理システム、プログラム変換方法、変換プログラム実行方法、及び情報処理方法 図000013
  • 特許6458196-プログラム変換システム、変換プログラム実行システム、情報処理システム、プログラム変換方法、変換プログラム実行方法、及び情報処理方法 図000014
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】6458196
(24)【登録日】2018年12月28日
(45)【発行日】2019年1月23日
(54)【発明の名称】プログラム変換システム、変換プログラム実行システム、情報処理システム、プログラム変換方法、変換プログラム実行方法、及び情報処理方法
(51)【国際特許分類】
   G06F 8/51 20180101AFI20190110BHJP
【FI】
   G06F8/51
【請求項の数】7
【全頁数】17
(21)【出願番号】特願2018-181138(P2018-181138)
(22)【出願日】2018年9月27日
【審査請求日】2018年10月9日
【早期審査対象出願】
(73)【特許権者】
【識別番号】514020389
【氏名又は名称】TIS株式会社
(74)【代理人】
【識別番号】100079108
【弁理士】
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【弁理士】
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【弁理士】
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【弁理士】
【氏名又は名称】内藤 和彦
(72)【発明者】
【氏名】熊谷 宏樹
(72)【発明者】
【氏名】奥 敦詞
(72)【発明者】
【氏名】宮崎 俊郎
【審査官】 北元 健太
(56)【参考文献】
【文献】 特開2016−115070(JP,A)
【文献】 特開2010−86218(JP,A)
【文献】 特開2006−11756(JP,A)
【文献】 米国特許出願公開第2006/0031820(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00 − 9/455
(57)【特許請求の範囲】
【請求項1】
COBOLソースプログラムのデータ部におけるデータ定義を順次読み込むデータ定義読み取り部と、
前記データ定義をJavaソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力するデータ定義コード出力部と、
前記データ定義が、初期値が設定されているデータ項目を含む場合、前記クラスにおいて前記データ項目を前記初期値に初期化するためのメソッドを呼び出すための第1のソースコードを出力する初期化メソッド出力部と、
前記COBOLソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第2のソースコードを出力する初期化属性出力部と、
を備えるプログラム変換システム。
【請求項2】
請求項1に記載されたプログラム変換システムから出力されたJavaソースプログラムを実行する変換プログラム実行システムであって、
前記COBOLソースプログラムにおいてCALL文で呼び出されるサブプログラムに対応するJavaソースプログラムのクラスのインスタンスのキャッシュを保持するインスタンスキャッシュ部と、
前記CALL文から変換された第1の命令が実行されると、
前記サブプログラムに対応する前記Javaソースプログラムのクラスのインスタンスが、前記キャッシュに存在しない場合は、当該インスタンスを新たに生成し、
前記キャッシュに存在する場合は、前記第2のソースコードの実行結果に基づいて、前記COBOLソースプログラムが、初期化属性を有する場合は、前記第1のソースコードを実行することにより前記データ項目の初期化を行ったうえで、前記キャッシュ内の当該インスタンスを再利用し、初期化属性を有しない場合は前記データ項目の初期化を行わずに前記キャッシュ内の当該インスタンスを再利用するインスタンス管理部と、
を備える変換プログラム実行システム。
【請求項3】
請求項2に記載の変換プログラム実行システムであって、
前記インスタンスキャッシュ部は、各インスタンスについて、CANCEL文が事前に呼ばれたかどうかを示す情報を記憶し、
前記インスタンス管理部は、前記サブプログラムに対応する前記Javaソースプログラムのクラスのインスタンスが、前記キャッシュに存在する場合は、前記COBOLソースプログラムが初期化属性を有する場合、または当該インスタンスについてCANCEL文が事前に呼ばれている場合に、前記データ項目の初期化を行う、
変換プログラム実行システム。
【請求項4】
COBOLソースプログラムのデータ部におけるデータ定義を順次読み込むデータ定義読み取り部と、
前記データ定義をJavaソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力するデータ定義コード出力部と、
前記データ定義が、初期値が設定されているデータ項目を含む場合、前記クラスにおいて前記データ項目を前記初期値に初期化するためのメソッドを呼び出すための第1のソースコードを出力する初期化メソッド出力部と、
前記COBOLソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第2のソースコードを出力する初期化属性出力部と、
前記COBOLソースプログラムにおいてCALL文で呼び出されるサブプログラムに対応するJavaソースプログラムのクラスのインスタンスのキャッシュを保持するインスタンスキャッシュ部と、
前記CALL文から変換された第1の命令が実行されると、
前記サブプログラムに対応する前記Javaソースプログラムのクラスのインスタンスが、前記キャッシュに存在しない場合は、当該インスタンスを新たに生成し、
前記キャッシュに存在する場合は、前記第2のソースコードの実行結果に基づいて、前記COBOLソースプログラムが、初期化属性を有する場合は、前記第1のソースコードを実行することにより前記データ項目の初期化を行ったうえで、前記キャッシュ内の当該インスタンスを再利用し、初期化属性を有しない場合は前記データ項目の初期化を行わずに前記キャッシュ内の当該インスタンスを再利用するインスタンス管理部と、
を備える情報処理システム。
【請求項5】
コンピュータが、
COBOLソースプログラムのデータ部におけるデータ定義を順次読み込み、
前記データ定義をJavaソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力し、
前記データ定義が、初期値が設定されているデータ項目を含む場合、前記クラスにおいて前記データ項目を前記初期値に初期化するためのメソッドを呼び出すための第1のソースコードを出力し、
前記COBOLソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第2のソースコードを出力する、
プログラム変換方法。
【請求項6】
請求項5に記載されたプログラム変換方法により出力されたJavaソースプログラムを実行するコンピュータが、
前記COBOLソースプログラムにおいてCALL文で呼び出されるサブプログラムに対応するJavaソースプログラムのクラスのインスタンスのキャッシュを保持し、
前記CALL文から変換された第1の命令が実行されると、
前記サブプログラムに対応する前記Javaソースプログラムのクラスのインスタンスが、前記キャッシュに存在しない場合は、当該インスタンスを新たに生成し、
前記キャッシュに存在する場合は、前記第2のソースコードの実行結果に基づいて、前記COBOLソースプログラムが、初期化属性を有する場合は、前記第1のソースコードを実行することにより前記データ項目の初期化を行ったうえで、前記キャッシュ内の当該インスタンスを再利用し、初期化属性を有しない場合は前記データ項目の初期化を行わずに前記キャッシュ内の当該インスタンスを再利用する
変換プログラム実行方法。
【請求項7】
コンピュータが、
COBOLソースプログラムのデータ部におけるデータ定義を順次読み込み、
前記データ定義をJavaソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力し、
前記データ定義が、初期値が設定されているデータ項目を含む場合、前記クラスにおいて前記データ項目を前記初期値に初期化するためのメソッドを呼び出すための第1のソースコードを出力し、
前記COBOLソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第2のソースコードを出力し、
前記COBOLソースプログラムにおいてCALL文で呼び出されるサブプログラムに対応するJavaソースプログラムのクラスのインスタンスのキャッシュを保持し、
前記CALL文から変換された第1の命令が実行されると、
前記サブプログラムに対応する前記Javaソースプログラムのクラスのインスタンスが、前記キャッシュに存在しない場合は、当該インスタンスを新たに生成し、
前記キャッシュに存在する場合は、前記第2のソースコードの実行結果に基づいて、前記COBOLソースプログラムが、初期化属性を有する場合は、前記第1のソースコードを実行することにより前記データ項目の初期化を行ったうえで、前記キャッシュ内の当該インスタンスを再利用し、初期化属性を有しない場合は前記データ項目の初期化を行わずに前記キャッシュ内の当該インスタンスを再利用する
情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラム変換システム、変換プログラム実行システム、情報処理システム、プログラム変換方法、変換プログラム実行方法、及び情報処理方法に関する。
【背景技術】
【0002】
基幹システムのオープン化に伴い、COBOLソースプログラムのJava(登録商標)ソースプログラムへの変換が注目されている。例えば、特許文献1には、COBOLソースプログラムから変換されたJavaソースプログラムの実行時における、集団項目単位でのデータ転送の処理コストを削減する手法が開示されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2016−115070号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
ところで、COBOLの言語仕様では、実行時に最初に起動されるプログラム(メインプログラム)及びCALL文で呼び出されるサブプログラムの集合を実行単位とした場合、各サブプログラムは、実行単位内で最初に呼び出された時に、当該サブプログラムの初期化処理が行われる。初期化処理では、WORKING−STORAGE SECTION(作業場所節)で定義されたデータ項目が初期化される。すなわち、VALUE句が指定されたデータ項目は、当該VALUE句の値で初期化される。
【0005】
そして、実行単位内におけるサブプログラムの2回目以降の呼び出し時には、WORKING−STORAGE SECTIONで定義されたデータ項目は初期化されず、直前の状態を引き継ぐこととなる。ただし、実行単位内における2回目以降の呼び出し時であっても、サブプログラムの見出し部にINITIAL句が指定されている場合、又はサブプログラムを指定したCANCEL文が実行されている場合には、WORKING−STORAGE SECTIONで定義されたデータ項目が初期化される。
【0006】
COBOLソースプログラムから変換されたJavaソースプログラムを実行する際には、COBOLの上記言語仕様を再現することが求められる。
【0007】
本発明はこのような事情に鑑みてなされたものであり、COBOLソースプログラムから変換されたJavaソースプログラムを実行するシステムにおいて、サブプログラム呼び出しに関するCOBOLの言語仕様を再現することを目的とする。
【課題を解決するための手段】
【0008】
本発明の一側面に係るプログラム変換システムは、COBOLソースプログラムのデータ部におけるデータ定義を順次読み込むデータ定義読み取り部と、データ定義をJavaソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力するデータ定義コード出力部と、データ定義が、初期値が設定されているデータ項目を含む場合、クラスにおいてデータ項目を初期値に初期化するためのメソッドを呼び出すための第1のソースコードを出力する初期化メソッド出力部と、COBOLソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第2のソースコードを出力する初期化属性出力部と、を備える。
【0009】
また、本発明の一側面に係る変換プログラム実行システムは、COBOLソースプログラムにおいてCALL文で呼び出されるサブプログラムに対応するJavaソースプログラムのクラスのインスタンスのキャッシュを保持するインスタンスキャッシュ部と、CALL文から変換された第1の命令が実行されると、サブプログラムに対応するJavaソースプログラムのクラスのインスタンスが、キャッシュに存在しない場合は、当該インスタンスを新たに生成し、キャッシュに存在する場合は、第2のソースコードの実行結果に基づいて、COBOLソースプログラムが、初期化属性を有する場合は、第1のソースコードを実行することによりデータ項目の初期化を行ったうえで、キャッシュ内の当該インスタンスを再利用し、初期化属性を有しない場合はデータ項目の初期化を行わずにキャッシュ内の当該インスタンスを再利用するインスタンス管理部と、を備える。
【0010】
また、本発明の一側面に係る情報処理システムは、COBOLソースプログラムのデータ部におけるデータ定義を順次読み込むデータ定義読み取り部と、データ定義をJavaソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力するデータ定義コード出力部と、データ定義が、初期値が設定されているデータ項目を含む場合、クラスにおいてデータ項目を初期値に初期化するためのメソッドを呼び出すための第1のソースコードを出力する初期化メソッド出力部と、COBOLソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第2のソースコードを出力する初期化属性出力部と、COBOLソースプログラムにおいてCALL文で呼び出されるサブプログラムに対応するJavaソースプログラムのクラスのインスタンスのキャッシュを保持するインスタンスキャッシュ部と、CALL文から変換された第1の命令が実行されると、サブプログラムに対応するJavaソースプログラムのクラスのインスタンスが、キャッシュに存在しない場合は、当該インスタンスを新たに生成し、キャッシュに存在する場合は、第2のソースコードの実行結果に基づいて、COBOLソースプログラムが、初期化属性を有する場合は、第1のソースコードを実行することによりデータ項目の初期化を行ったうえで、キャッシュ内の当該インスタンスを再利用し、初期化属性を有しない場合はデータ項目の初期化を行わずにキャッシュ内の当該インスタンスを再利用するインスタンス管理部と、を備える。
【0011】
また、本発明の一側面に係るプログラム変換方法は、コンピュータが、COBOLソースプログラムのデータ部におけるデータ定義を順次読み込み、データ定義をJavaソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力し、データ定義が、初期値が設定されているデータ項目を含む場合、クラスにおいてデータ項目を初期値に初期化するためのメソッドを呼び出すための第1のソースコードを出力し、COBOLソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第2のソースコードを出力する。
【0012】
また、本発明の一側面に係る変換プログラム実行方法は、プログラム変換方法により出力されたJavaソースプログラムを実行するコンピュータが、COBOLソースプログラムにおいてCALL文で呼び出されるサブプログラムに対応するJavaソースプログラムのクラスのインスタンスのキャッシュを保持し、CALL文から変換された第1の命令が実行されると、サブプログラムに対応するJavaソースプログラムのクラスのインスタンスが、キャッシュに存在しない場合は、当該インスタンスを新たに生成し、キャッシュに存在する場合は、第2のソースコードの実行結果に基づいて、COBOLソースプログラムが、初期化属性を有する場合は、第1のソースコードを実行することによりデータ項目の初期化を行ったうえで、キャッシュ内の当該インスタンスを再利用し、初期化属性を有しない場合はデータ項目の初期化を行わずにキャッシュ内の当該インスタンスを再利用する。
【0013】
また、本発明の一側面に係る情報処理方法は、COBOLソースプログラムのデータ部におけるデータ定義を順次読み込み、データ定義をJavaソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力し、データ定義が、初期値が設定されているデータ項目を含む場合、クラスにおいてデータ項目を初期値に初期化するためのメソッドを呼び出すための第1のソースコードを出力し、COBOLソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第2のソースコードを出力し、COBOLソースプログラムにおいてCALL文で呼び出されるサブプログラムに対応するJavaソースプログラムのクラスのインスタンスのキャッシュを保持し、CALL文から変換された第1の命令が実行されると、サブプログラムに対応するJavaソースプログラムのクラスのインスタンスが、キャッシュに存在しない場合は、当該インスタンスを新たに生成し、キャッシュに存在する場合は、第2のソースコードの実行結果に基づいて、COBOLソースプログラムが、初期化属性を有する場合は、第1のソースコードを実行することによりデータ項目の初期化を行ったうえで、キャッシュ内の当該インスタンスを再利用し、初期化属性を有しない場合はデータ項目の初期化を行わずにキャッシュ内の当該インスタンスを再利用する。
【0014】
なお、本発明において、「部」とは、単に物理的手段を意味するものではなく、その「部」が有する機能をソフトウェアによって実現する場合も含む。また、1つの「部」や装置が有する機能が2つ以上の物理的手段や装置により実現されても、2つ以上の「部」や装置の機能が1つの物理的手段や装置により実現されてもよい。
【発明の効果】
【0015】
本発明によれば、COBOLソースプログラムから変換されたJavaソースプログラムを実行するシステムにおいて、サブプログラム呼び出しに関するCOBOLの言語仕様を再現することが可能となる。
【図面の簡単な説明】
【0016】
図1】プログラム変換が行われるシステム全体の概略を示す図である。
図2】プログラム変換システム100が備える機能の一例を示すブロック図である。
図3】変換プログラム実行システム120が備える機能の一例を示すブロック図である。
図4】プログラム変換システム100におけるデータ型の変換規則の一例を示す図である。
図5図4に示した変換規則に基づいてCOBOLのデータ定義を変換した一例を示す図である。
図6】COBOLのデータ定義の変換処理の一例を示すフローチャートである。
図7】変換処理において出力されるコードの一例を示す図である。
図8A】COBOLソースプログラムからJavaソースプログラムへの変換の一例を示す図である。
図8B】COBOLソースプログラムからJavaソースプログラムへの変換の一例を示す図である。
図9】COBOLにおけるサブプログラム(モジュール)の呼び出しの一例を示す図である。
図10】CALL文を含むCOBOLソースプログラムのJavaソースプログラムへの変換の一例を示す図である。
図11】サブプログラムを呼び出すCOBOLソースプログラムを変換したJavaソースプログラムを実行するための機構の一例を示す図である。
図12】サブプログラムに対応するインスタンスを再利用する処理の一例を示すフローチャートである。
【発明を実施するための形態】
【0017】
以下、図面を参照して本発明の一実施形態について説明する。図1は、プログラム変換が行われるシステム全体の概略を示す図である。本システムでは、プログラム変換システム100により、ホストコンピュータ110で稼働するプログラムが、変換プログラム実行システム120で稼働するプログラムに変換される。具体的には、ホストコンピュータ110では、COBOLプログラム130が動作している。プログラム変換システム100は、COBOLプログラム130のソースコードであるCOBOLソースプログラム140をJavaソースプログラム150に変換する。Javaソースプログラム150は、コンパイルされてJavaバイトコード160となる。そして、Javaバイトコード160は、変換プログラム実行システム120で実行される。
【0018】
図2は、プログラム変換システム100が備える機能の一例を示すブロック図である。プログラム変換システム100は、変換規則記憶部200、プログラム変換部210、COBOLソースプログラム記憶部220、及びJavaソースプログラム記憶部230を備える。また、プログラム変換部210は、データ定義読み取り部211、項目定義コード出力部212、初期化メソッド出力部213及び初期化属性出力部214を含む。また、項目定義コード出力部212は、集団項目定義コード出力部215、第1の基本項目定義コード出力部216、及び第2の基本項目定義コード出力部217を含む。プログラム変換システム100は、例えば、1台または複数台のコンピュータを用いて構成される。プログラム変換システム100を構成する各部は、例えば、メモリやハードディスク等の記憶領域を用いたり、記憶領域に格納されたプログラムをプロセッサが実行したりすることにより実現される。
【0019】
変換規則記憶部200は、COBOLソースプログラムをJavaソースプログラムに変換するための変換規則を記憶する。
【0020】
プログラム変換部210は、変換規則に基づいて、COBOLソースプログラムをJavaソースプログラムに変換する。
【0021】
データ定義読み取り部211は、COBOLソースプログラムのDATA DIVISION(データ部)におけるWORKING−STORAGE SECTION(作業場所節)の変換のために、WORKING−STORAGE SECTIONにおけるデータ定義を順次読み込む。
【0022】
データ定義コード出力部212は、データ定義読み取り部212が読み込んだデータ定義をJavaソースプログラムにおいて実現するためのソースコードを出力する。
【0023】
集団項目定義コード出力部215は、COBOLソースプログラムにおけるデータ定義が集団項目の定義である場合、Javaソースプログラムにおいて当該集団項目を実現するためのクラス(CGrp)のインスタンスを生成するソースコードを出力する。
【0024】
第1の基本項目定義コード出力部216は、COBOLソースプログラムにおけるデータ定義が基本項目の定義であり、かつ、レベルが最上位(例えば「01」)である場合、Javaソースプログラムにおいて当該基本項目を実現するためのクラス(Javaラッパークラス)のインスタンスを生成するソースコードを出力する。
【0025】
第2の基本項目定義コード出力部217は、COBOLソースプログラムにおけるデータ定義が基本項目の定義であり、かつ、レベルが最上位でない場合、当該基本項目を、集団項目を実現するためのクラス(CGrp)のメンバ変数とするソースコードを出力する。
【0026】
なお、集団項目を実現するためのクラス(CGrp)及び基本項目を実現するためのクラス(Javaラッパークラス)には、データ項目を初期値に初期化するメソッド(resetForReuse)が実装されている。
【0027】
データ定義読み取り部211及びデータ定義コード出力部212の詳細については、具体例を用いて後述する。
【0028】
初期化メソッド出力部213は、COBOLソースプログラムのデータ定義において初期値が設定されているデータ項目が存在する場合に、当該データ項目を実現するクラスにおいてデータ項目を初期値に初期化するメソッド(resetForReuse)を呼び出すためのメソッド(resetForReuse)のソースコードを出力する。
【0029】
初期化属性出力部214は、COBOLソースプログラムが初期化属性を有するかどうかを判定する。具体的には、初期化属性出力部214は、COBOLソースプログラムの見出し部において、INITIAL句が指定されているかどうかを判定する。COBOLの言語仕様では、初期化属性を有する(INITIAL句が指定されている)プログラムは、呼び出されるたびに変数の初期化が行われる。初期化属性出力部214は、COBOLソースプログラムから変換されたJavaソースプログラムにおいて、初期化属性の有無を判断可能とするための情報を出力する。具体的には、初期化属性出力部214は、初期化属性の有無を示す情報を出力するためのメソッド(isInitial)のソースコードを出力する。
【0030】
COBOLソースプログラム記憶部220は、変換前のCOBOLソースプログラムを記憶する。
【0031】
Javaソースプログラム記憶部230は、変換後のJavaソースプログラムを記憶する。
【0032】
図3は、変換プログラム実行システム120が備える機能の一例を示すブロック図である。変換プログラム実行システム120は、JavaVM実行部300、Javaバイトコード記憶部310、及びプログラム実行部320を含む。また、プログラム実行部320は、インスタンスキャッシュ部321及びインスタンス管理部322を含む。変換プログラム実行システム120は、例えば、1台または複数台のコンピュータを用いて構成される。変換プログラム実行システム120を構成する各部は、例えば、メモリやハードディスク等の記憶領域を用いたり、記憶領域に格納されたプログラムをプロセッサが実行したりすることにより実現される。
【0033】
JavaVM実行部300は、Javaバイトコードを実行するためのプラットフォームであるJavaVMを実行する。
【0034】
Javaバイトコード記憶部310は、変換されたJavaソースプログラムをコンパイルしたJavaバイトコードを記憶する。
【0035】
プログラム実行部320は、Javaバイトコードを実行する。プログラム実行部320は、Javaバイトコードを実行するための各種ライブラリ(クラスライブラリ等)を含む。
【0036】
インスタンスキャッシュ部321は、COBOLソースプログラムにおいてCALL文で呼び出されるサブプログラムに対応する、Javaのインスタンスのキャッシュを保持する。
【0037】
インスタンス管理部322は、サブプログラムを呼び出すCALL文から変換された命令が実行されると、当該サブプログラムに対応するインスタンスが、キャッシュに存在しない場合は、当該インスタンスを新たに生成し、キャッシュに存在する場合は、キャッシュ内の当該インスタンスを再利用する。
【0038】
インスタンスキャッシュ部321及びインスタンス管理部322の詳細については、具体例を用いて後述する。
【0039】
図4は、プログラム変換システム100におけるデータ型の変換規則の一例を示す図である。図4において、左側の欄には、COBOLのデータ型が示されており、右側の欄には、COBOLのデータ型と同等の機能を実現するためのJavaラッパークラスが示されている。例えば、1〜9桁の符号無し整数(PIC 9(1)〜PIC 9(9))は、CIntというJavaラッパークラスに変換される。
【0040】
図5は、図4に示した変換規則に基づいてCOBOLのデータ定義を変換した一例を示す図である。例えば、COBOLでは、「01 NUM01 PIC S9(003) COMP−3 VALUE 060.」により、符号付きパック形式の3桁の整数(初期値「60」)として、変数「NUM01」が定義されている。この定義をJavaに変換したものが、「public CInt NUM01=new CInt(3, S, COMP3).VALUE(60);」である。ここで、CIntの引数(3, S, COMP3)は、順に、桁数、符号付き、パック形式を表している。また、CIntのメソッドVALUE(60)は、変数NUM01に初期値「60」をセットするものである。
【0041】
図6は、COBOLのデータ定義の変換処理の一例を示すフローチャートである。図7は、変換処理において出力されるコードの一例を示す図である。図8A及び図8Bは、COBOLソースプログラムからJavaソースプログラムへの変換の一例を示す図である。図7図8A及び図8Bを参照しつつ、図6の処理について説明する。
【0042】
まず、データ定義読み取り部211は、COBOLソースプログラムのデータ部におけるデータ定義を1行読み込む(S601)。
【0043】
データ定義が終了でない場合(S602:N)、集団項目定義コード出力部215は、データ定義が集団項目の定義であるかどうか確認する(S603)。集団項目の定義である場合(S603:Y)、集団項目定義コード出力部215は、集団項目用のラッパークラスCGrpを継承したクラスとして、当該集団項目を定義するソースコードを出力する(S604)。例えば、図7(a)には、集団項目GRP1を定義するソースコードの一例が示されている。具体的には、クラスCGrpを継承したクラスとしてCGRP1が定義され、当該CGRP1のオブジェクトとして、GRP1が定義されている。
【0044】
集団項目の定義ではない(即ち、基本項目である)場合(S603:N)、第1の基本項目定義コード出力部216は、データ定義がレベル01であるかどうか確認する(S605)。レベル01である場合(S605:Y)、基本項目用のラッパークラスのオブジェクトとして当該基本項目を定義するソースコードを出力する(S606)。例えば、図7(b)には、基本項目IDX1を定義するソースコードの一例が示されている。具体的には、クラスCIntのオブジェクトとして、IDX1が定義されている。
【0045】
基本項目であり(S603:N)、かつ、レベル01でない場合(S605:N)、第2の基本項目定義コード出力部217は、当該基本項目を、当該基本項目が属する集団項目のクラスのメンバ変数として定義するソースコードを出力する(S607)。例えば、図7(c)には、集団項目GRP1に属する基本項目GRP1_IDX1を定義するソースコードの一例が示されている。ここで、図7(c)に示すソースコードは、図7(a)に示すソースコードに、クラスCGRP1のメンバ変数として追加される。
【0046】
データ定義が終了すると(S602:Y)、初期化メソッド出力部213は、COBOLソースプログラムのデータ定義において初期値が設定されているデータ項目が存在する場合に、当該データ項目を実現するクラスにおいてデータ項目を初期値に初期化するメソッドを呼び出すためのメソッドのソースコードを出力する(S608)。
【0047】
また、初期化属性出力部214は、COBOLソースプログラムにおける初期化属性の有無を示す情報を出力するためのメソッドのソースコードを出力する(S609)。
【0048】
図8A及び図8Bには、図6に示した処理による変換の一例が示されている。ここで、図8Aは、変換元のCOBOLソースプログラムの一例、図8Bは、変換後のJavaソースプログラムの一例を示している。図8Bに示すように、集団項目GRP1は、クラスCGrpを継承したクラスCGRP1のオブジェクトとして定義されている。そして、集団項目GRP1に属する基本項目GRP1_IDX1,GRP1_IDX2,GRP1_IDS1は、クラスCGRP1のメンバ変数として定義されている。また、集団項目に属しない基本項目IDX1は、クラスCIntのオブジェクトとして定義されている。
【0049】
また、図8Aに示すCOBOLソースプログラムでは、集団項目GRP1に属する基本項目GPR1_IDS1は、初期値’00’が設定されている。また、集団項目に属しない基本項目IDS1は、初期値’99’が設定されている。これに対応して、図8Bに示すように、集団項目GRP1を実現するクラスにおいてデータ項目を初期値に初期化するためのメソッド(GRP1.resetForReuse())及び基本項目IDS1を実現するクラスにおいてデータ項目を初期値に初期化するためのメソッド(IDS1.resetForReuse())を呼び出すためのメソッド(resetForReuse())のソースコードが出力されている。
【0050】
また、図8Bに示すように、Javaソースプログラムには、初期化属性の有無を示す情報を出力するためのメソッド(isInitial)のソースコードが出力されている。図8Aに示すCOBOLソースプログラムは、見出し部においてINITIAL句が指定されており、初期化属性を有している。そのため、図8Bに示す例では、メソッドisInitialが、初期化属性を有することを示す情報として値trueを返す仕様となっている。初期化属性を有しないCOBOLソースプログラムの場合であれば、これとは異なる値(false)を返せばよい。
【0051】
次に、変換プログラム実行システム120において、サブプログラムを実行する際の処理負荷を軽減する手法について説明する。
【0052】
図9は、COBOLにおけるサブプログラムの呼び出しの一例を示す図である。図9に示すように、メインプログラム(例えば、プログラムMAIN01)において、CALL文により、サブプログラム(例えば、サブプログラムSUB01)を呼び出すことができる。
【0053】
図10は、CALL文を含むCOBOLソースプログラムのJavaソースプログラムへの変換の一例を示す図である。図8Bにも示したように、サブプログラムは、クラスCblSubのオブジェクトとして実現される。
【0054】
図11は、サブプログラムを呼び出すCOBOLソースプログラムを変換したJavaソースプログラムを実行するための機構の一例を示す図である。メインプログラム(例えば、プログラムMAIN01)は、クラスCblBaseのインスタンスとして実現されている。サブプログラム(例えば、サブプログラムSUB01)は、サブブログラム名(例えば、「SUB01」)を引数として、クラスFactoryのメソッドcreateを実行することにより呼び出すことができる。
【0055】
サブプログラムは、クラスCblSubのインスタンスとして実現される。サブプログラムのインスタンスは、生成されると、インスタンスキャッシュ部321にキャッシュされる。そして、メソッドcreateによりサブプログラムが呼び出されると、インスタンス管理部322は、当該キャッシュに保持されているインスタンスのリストをサブプログラム名で検索する。呼び出し対象のサブプログラムに対応するインスタンスがキャッシュに存在する場合、インスタンス管理部322は、当該インスタンスを、必要に応じてメンバ変数の値を初期化したうえで再利用する。メンバ変数の初期化については後述する。また、呼び出し対象のサブプログラムに対応するインスタンスがキャッシュに存在しない場合、インスタンス管理部322は、当該インスタンスを新たに生成し、キャッシュに登録する。
【0056】
図12は、サブプログラムに対応するインスタンスを再利用する処理の一例を示すフローチャートである。サブプログラムの呼び出しに対応するメソッド(例えば、「Factory.create(“SUB01”)」が実行されると、インスタンス管理部322は、サブプログラムに対応するインスタンスのキャッシュのリストを、指定されたクラス名(例えば、「SUB01」)で検索する(S1201)。
【0057】
リストに存在しない場合(S1202:N)、インスタンス管理部322は、指定されたクラス名(例えば、「SUB01」)でインスタンスを生成する(S1203)。なお、インスタンス生成の際には、COBOLソースプログラムのVALUE句に対応する初期値の設定処理も行われる。そして、インスタンス管理部322は、生成したインスタンスをキャッシュのリストに追加する(S1204)。
【0058】
リストに存在する場合(S1202:Y)、インスタンス管理部322は、呼び出されたサブプログラムが、初期化属性を有しているか、またはCANCEL文が事前に実行されているかどうかを確認する(S1205)。なお、初期化属性の有無については、メソッドisInitialを実行することにより確認することができる。また、インスタンスキャッシュ部321は、キャッシュされている各インスタンスについて、CANCEL文が事前に実行されているかどうかを示す情報を記憶しておくことができる。インスタンス管理部322は、当該情報を参照することにより、CANCEL文が事前に実行されているかどうかを確認することができる。
【0059】
初期化属性が無く、かつ、CANCEL文が事前に実行されていない場合(S1205:N)、インスタンス管理部322は、初期化処理を行わずにインスタンスを再利用する。他方、初期化属性があるか、またはCANCEL文が事前に実行されている場合(S1205:Y)、インスタンス管理部322は、キャッシュに存在するインスタンスに対してメソッドresetForReuse()を実行し、インスタンスのメンバ変数のデータをCOBOLソースプログラムのVALUE句に対応する初期値に初期化したうえで、インスタンスを再利用する(S1206)。
【0060】
このように、変換プログラム実行システム120では、サブプログラムに対応するインスタンスがキャッシュで管理され、再利用される。これにより、COBOLソースプログラムから変換されたJavaソースプログラムを実行するシステムにおいて、サブプログラム呼び出しに関するCOBOLの言語仕様を再現するとともに、サブプログラム呼び出し時の負荷を軽減することが可能となる。
【0061】
以上、本発明の一実施形態であるプログラム変換システム100及び変換プログラム実行システム120について説明した。
【0062】
プログラム変換システム100では、データ定義が、初期値が設定されているデータ項目を含む場合、当該データ項目を初期値に初期化するためのメソッドを呼び出すための第1のソースコードが出力される。さらに、プログラム変換システム100では、COBOLソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第2のソースコードが出力される。これにより、COBOLにおけるサブプログラムの初期化に関する言語仕様を再現することが可能となる。
【0063】
また、変換プログラム実行システム120では、COBOLソースプログラムにおいてCALL文で呼び出されるサブプログラムに対応するJavaソースプログラムのクラスのインスタンスのキャッシュが保持される。そして、変換プログラム実行システム120では、CALL文から変換された第1の命令が実行されると、サブプログラムに対応するJavaソースプログラムのクラスのインスタンスがキャッシュに存在しない場合は、当該インスタンスが新たに生成される。他方、キャッシュに存在する場合は、第2のソースコードの実行結果に基づいて、COBOLソースプログラムが、初期化属性を有する場合は、第1のソースコードを実行することによりデータ項目の初期化を行ったうえで、キャッシュ内の当該インスタンスが再利用され、初期化属性を有しない場合はデータ項目の初期化を行わずに当該インスタンスが再利用される。これにより、COBOLにおけるサブプログラムの初期化に関する言語仕様を再現するとともに、プログラム呼び出し時の負荷を軽減することが可能となる。
【0064】
さらに、変換プログラム実行システム120では、各インスタンスについて、CANCEL文が事前に呼ばれたかどうかを示す情報が記憶される。そして、変換プログラム実行システム120では、サブプログラムに対応するJavaソースプログラムのクラスのインスタンスがキャッシュに存在する場合は、COBOLソースプログラムが初期化属性を有する場合、または当該インスタンスについてCANCEL文が事前に呼ばれている場合に、データ項目の初期化が行われる。これにより、COBOLにおけるサブプログラムの初期化に関する言語仕様を再現するとともに、プログラム呼び出し時の負荷を軽減することが可能となる。
【0065】
なお、本実施形態は、本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更/改良され得るととともに、本発明にはその等価物も含まれる。
【符号の説明】
【0066】
100 プログラム変換システム
110 ホストコンピュータ
120 変換プログラム実行システム
130 COBOLプログラム
140 COBOLソースプログラム
150 Javaソースプログラム
160 Javaバイトコード
200 変換規則記憶部
210 プログラム変換部
211 データ定義読み取り部
212 データ定義コード出力部
213 初期化メソッド出力部
214 初期化属性出力部
215 集団項目定義コード出力部
216 第1の基本項目定義コード出力部
217 第2の基本項目定義コード出力部
220 COBOLソースプログラム記憶部
230 Javaソースプログラム記憶部
300 JavaVM実行部
310 Javaバイトコード記憶部
320 プログラム実行部
321 インスタンスキャッシュ部
322 インスタンス管理部
【要約】
【課題】サブプログラム呼び出しに関するCOBOLの言語仕様を再現する。
【解決手段】プログラム変換システムは、COBOLソースプログラムのデータ部におけるデータ定義を順次読み込むデータ定義読み取り部と、データ定義をJavaソースプログラムにおいて実現するためのクラスのインスタンスを生成するためのソースコードを出力するデータ定義コード出力部と、データ定義が、初期値が設定されているデータ項目を含む場合、クラスにおいてデータ項目を初期値に初期化するためのメソッドを呼び出すための第1のソースコードを出力する初期化メソッド出力部と、COBOLソースプログラムが初期化属性を有するかどうかを示す情報を出力するためのメソッドの第2のソースコードを出力する初期化属性出力部と、を備える。
【選択図】図6
図1
図2
図3
図4
図5
図6
図7
図8A
図8B
図9
図10
図11
図12