(57)【要約】【課題】利用者によって定義されたデータ構造と処理フローとに基づき、並列処理を含んだ効率の良いプログラムコードを自動的に生成する。並列処理プログラムを作成するための熟練プログラマを必要としない。【解決手段】プログラム生成装置は、データの構造を定義したデータ構造定義情報を記憶するデータ構造定義情報記憶部と、前記データを用いた処理フローを定義した処理フロー定義情報を記憶する処理フロー定義情報記憶部と、前記データ構造定義情報に基づいて前記データのうちの並列処理可能な単位を把握することによって、前記データを該並列処理可能な単位に分けられたデータ毎に前記処理フロー定義情報に基づく処理をコンピュータに実行させる業務処理プログラムを生成するプログラム生成部とを具備する。【選択図】      図１
2004178316.tif 000002
【特許請求の範囲】
【請求項１】
データの構造を定義したデータ構造定義情報を記憶するデータ構造定義情報記憶部と、
前記データを用いた処理フローを定義した処理フロー定義情報を記憶する処理フロー定義情報記憶部と、
前記データ構造定義情報に基づいて前記データのうちの並列処理可能な単位を把握することによって、前記データを該並列処理可能な単位に分けられたデータ毎に前記処理フロー定義情報に基づく処理をコンピュータに実行させる業務処理プログラムを生成するプログラム生成部と
を具備することを特徴とするプログラム生成装置。
【請求項２】
請求項１に記載のプログラム生成装置であって、
前記プログラム生成部は、前記処理フロー定義情報に基づく処理をコンピュータに並列的に実行させる業務処理プログラムを生成することを特徴とするプログラム生成装置。
【請求項３】
請求項１又は請求項２に記載のプログラム生成装置であって、
前記プログラム生成部が生成する業務処理プログラムは、前記処理フロー定義情報によって定義された処理を前記並列処理可能な単位のデータ毎に実行する利用者定義処理プログラムと、該利用者定義処理プログラムによる処理を並列的に実行する制御を行うディスパッチングプログラムとを含むことを特徴とするプログラム生成装置。
【請求項４】
請求項３に記載のプログラム生成装置であって、
前記プログラム生成部が生成する前記ディスパッチングプログラムは、前記業務処理コンピュータプログラムを実行する環境に関する実行環境情報を実行環境情報記憶部から読み出し該実行環境情報に基づいて、前記利用者定義処理プログラムによる処理を並列的に実行する制御を行うものであることを特徴とするプログラム生成装置。
【請求項５】
請求項４に記載のプログラム生成装置であって、
前記プログラム生成部が生成する前記ディスパッチングプログラムは、
当該ディスパッチングプログラムに入力されるデータを前記並列処理可能な単位に分割する過程と、
プログラム部品として予め用意されており前記処理フロー定義情報からは独立な処理として前記利用者定義処理プログラムをディスパッチする処理を行うディスパッチング制御ルーチンを呼び出す過程と、
の処理をコンピュータに実行させるものであることを特徴とするプログラム生成装置。
【請求項６】
データの構造を定義したデータ構造定義情報を記憶するデータ構造定義情報記憶部と、
前記データを用いた処理フローを定義した処理フロー定義情報を記憶する処理フロー定義情報記憶部と、
を具備するプログラム生成装置において業務処理プログラムを生成するプログラム生成方法であって、
前記データ構造定義情報に基づいて前記データのうちの並列処理可能な単位を把握することによって、前記データを該並列処理可能な単位に分けられたデータ毎に前記処理フロー定義情報に基づく処理をコンピュータに実行させる業務処理プログラムを生成する生成過程を有することを特徴とするプログラム生成方法。
【請求項７】
データの構造を定義したデータ構造定義情報を記憶するデータ構造定義情報記憶部と、
前記データを用いた処理フローを定義した処理フロー定義情報を記憶する処理フロー定義情報記憶部と、
を具備するプログラム生成装置において業務処理プログラムを生成する処理をコンピュータに実行させるプログラム生成プログラムであって、
前記データ構造定義情報記憶部から読み出した前記データ構造定義情報に基づいて前記データのうちの並列処理可能な単位を把握することによって、前記データを該並列処理可能な単位に分けられたデータ毎に前記処理フロー定義情報記憶部から読み出した前記処理フロー定義情報に基づく処理をコンピュータに実行させる業務処理プログラムを生成する生成過程をコンピュータに実行させるプログラム生成プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、コンピュータのプログラム作成を必要とせずに業務処理システムを実現するための、いわゆるノンプログラミングツールを用いたプログラム生成装置およびその方法に関する。
【０００２】
【従来の技術】
従来、コンピュータプログラムの自動生成あるいは半自動生成のための研究・開発は数多く為されている。それらの成果の一部としては、プログラマの個性に依存せずに一定の品質のプログラムを生成することを目的として、利用者との対話形式により情報を取得し、この情報に基づいて、プログラムスケルトンを用いてアプリケーションプログラムを生成出力する装置が考案されている（例えば、特許文献１参照）。
【０００３】
また、近年インターネットの普及により、企業間取引をインターネットを通じて行うことをサポートするＢ２Ｂｉ（Ｂｕｓｉｎｅｓｓ−ｔｏ−Ｂｕｓｉｎｅｓｓ  Ｉｎｔｅｇｒａｔｉｏｎ；企業対企業統合）製品が市場に出回ってきている。企業内では部門毎に独自に構築を行ってきたシステムの連携を図り、業務連携による業務の効率化をサポートするＥＡＩ（Ｅｎｔｅｒｐｒｉｓｅ  Ａｐｐｌｉｃａｔｉｏｎ  Ｉｎｔｅｇｒａｔｉｏｎ；企業内アプリケーション統合）製品も市場に出回り、これら２つの機能を統合した製品も出荷され始めている。これらの製品には、ＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ；グラフィカルユーザインタフェース）を通じて、プログラム作成なしで、つまりノンプログラミングで、業務処理を実現するためのデータ構造定義ツールや処理フローを定義する各種ダイアグラムが用意されている。
【０００４】
一例として、ＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）によって記述された注文メッセージを受信し、そのＸＭＬメッセージの構文解析を行い、その結果をＪａｖａ（登録商標）言語で取扱可能なオブジェクトに変換して、そのオブジェクトをメモリ上に展開し、このメモリ展開された注文情報を加工してデータベースに書き込むという一連の業務処理を考える。
この場合、利用者（システム開発者）は、上記のようなノンプログラミングツールを用いて、処理手順をフローチャート等で定義するとともに、ＸＭＬメッセージにおけるデータ定義とメモリ展開されたオブジェクトのデータ定義とデータベースに書き込まれるレコードのデータ定義とそれら各定義間の関係とを、ＧＵＩツールを用いて定義する。
【０００５】
【特許文献１】
特開平８−２０２５３９号公報
【０００６】
【発明が解決しようとする課題】
前述の例において１件のＸＭＬメッセージに複数件の注文情報のデータが含まれている場合、従来のツールでは、受信したＸＭＬメッセージを全部まとめてメモリ展開し、メモリ展開が終わってからそれぞれの注文情報データをシーケンシャルに処理し、データベースに書き込んでいくような方式を採る。このような方式で処理した場合、１件のＸＭＬメッセージに含まれる注文情報のデータ件数が多い（例えば、数百万件のオーダー）ときには、オブジェクトの展開のために膨大な量のメモリが必要となるという問題がある。また、データベースへの書き込みは、通常、ハードディスク装置などといった外部記憶媒体への書き込みを伴うため、ＣＰＵ上の処理に比べて数千倍程度の時間がかかることがあるが、すべての注文情報データをシーケンシャルにデータベースに書き込むことによって、そのために必要な処理時間も膨大なものとなる。
【０００７】
仮に熟練プログラマが上記のような処理を行うプログラムを作成する場合には、受信したＸＭＬメッセージ全部を一度にメモリ展開するのではなく、ＸＭＬメッセージの中から注文情報データ１件分ずつを取り出して、この１件分のみをメモリ展開して処理するようなプログラムコードを記述することにより、メモリ使用量を抑制する。また、すべての注文情報データをシーケンシャルにデータベースに書き込むのではなく、数件分のデータベース書き込みを並列的に実行するようなプログラムコードを記述することにより、全体の処理時間を短縮する。しかしながら、このようなプログラムコードを記述するためには、プログラマが、コンピュータアーキテクチャを良く理解しており、メモリの物理的なイメージを持っているとともに、並列処理の概念を理解していてそれを具体的に実現するだけのスキルを持っている必要がある。
【０００８】
ところが、そのような熟練プログラマの数は限られており、特に安価で調達することは困難である。また、そもそもノンプログラミングツールを利用する背景には、コンピュータアーキテクチャなどについて深い理解をしているプログラマがいなくても、業務処理（ビジネスロジックなど）を理解している者が効率的にシステムを開発しようという目的がある。従って、並列処理などを記述することのできる熟練プログラマがいなくても、データ構造や業務内容さえ正しく記述しさえすれば、メモリ効率が良く且つ処理時間の短い業務処理を実現できるようにすることが望ましい。
【０００９】
例えば、注文情報データ１件分のデータ量が１０００バイトで、１件のＸＭＬメッセージに１００万件の注文情報データが含まれている場合、このＸＭＬメッセージ全体を一度にメモリ展開すると、約１ＧＢ（ギガバイト）近くのメモリが必要となってしまう。これが、例えば、せいぜい６件の注文情報データしか同時にメモリ展開しないようにした場合、必要なメモリ量は６０００バイトで済む。
また、例えば、注文情報データ１件を処理するために必要な時間が１２０ｍｓ（ミリ秒）で、このうちデータベースに書き込む際の入出力待ちの時間が１００ｍｓである場合、残りの２０ｍｓがＣＰＵ処理に必要な時間である。そして、１００万件のデータを全てシーケンシャルに処理した場合には、
１２０［ｍｓ］×１，０００，０００＝１２０，０００，０００［ｍｓ］
で、１２万秒、すなわち約３３．３時間の処理時間が必要となる。一方、例えば、前記の１００ｍｓの入出力待ち時間の間に、他の注文情報データの処理を並列的に実行すると、６件程度の注文情報データの処理を同時に行えることになり（１２０／２０＝６）、全体の処理時間は六分の一の２万秒、すなわち５．６時間程度に短縮することができる。
このように、並列化などによる処理の効率化の効果は非常に大きい。
【００１０】
本発明は、上記のような事情を考慮して為されたものであり、利用者によって定義されたデータ構造と処理フローとに基づき、並列処理を含んだ効率の良いプログラムコードを生成するプログラム生成装置および生成方法を提供することを目的とする。
【００１１】
【課題を解決するための手段】
上記の課題を解決するために、本発明は、データの構造を定義したデータ構造定義情報を記憶するデータ構造定義情報記憶部と、前記データを用いた処理フローを定義した処理フロー定義情報を記憶する処理フロー定義情報記憶部と、前記データ構造定義情報に基づいて前記データのうちの並列処理可能な単位を把握することによって、前記データを該並列処理可能な単位に分けられたデータ毎に前記処理フロー定義情報に基づく処理をコンピュータに実行させる業務処理プログラムを生成するプログラム生成部とを具備することを特徴とするプログラム生成装置を要旨とする。
【００１２】
また、本発明は、上記のプログラム生成装置において、前記プログラム生成部は、前記処理フロー定義情報に基づく処理をコンピュータに並列的に実行させる業務処理プログラムを生成することを特徴とするものである。
このような構成により、前記のように並列処理可能な単位に分けられたデータ毎に処理フロー定義情報に基づく処理を並列的に実行させることが可能となり、処理時間を短くすることが出来る。
また、本発明は、上記のプログラム生成装置において、前記プログラム生成部が生成する業務処理プログラムは、前記処理フロー定義情報によって定義された処理を前記並列処理可能な単位のデータ毎に実行する利用者定義処理プログラムと、該利用者定義処理プログラムによる処理を並列的に実行する制御を行うディスパッチングプログラムとを含むことを特徴とするものである。
また、本発明は、上記のプログラム生成装置において、前記プログラム生成部が生成する前記ディスパッチングプログラムは、前記業務処理コンピュータプログラムを実行する環境に関する実行環境情報を実行環境情報記憶部から読み出し該実行環境情報に基づいて、前記利用者定義処理プログラムによる処理を並列的に実行する制御を行うものであることを特徴とする。
このような構成により、実行環境情報に基づいて、例えばクラスタリング構成などといった実行環境に応じて適切な並列処理を実現することが可能となる。
また、本発明は、上記のプログラム生成装置において、前記プログラム生成部が生成する前記ディスパッチングプログラムは、当該ディスパッチングプログラムに入力されるデータを前記並列処理可能な単位に分割する過程と、プログラム部品として予め用意されており前記処理フロー定義情報からは独立な処理として前記利用者定義処理プログラムをディスパッチする処理を行うディスパッチング制御ルーチンを呼び出す過程との処理をコンピュータに実行させるものであることを特徴とする。
【００１３】
また、本発明は、データの構造を定義したデータ構造定義情報を記憶するデータ構造定義情報記憶部と、前記データを用いた処理フローを定義した処理フロー定義情報を記憶する処理フロー定義情報記憶部とを具備するプログラム生成装置において業務処理プログラムを生成するプログラム生成方法であって、前記データ構造定義情報に基づいて前記データのうちの並列処理可能な単位を把握することによって、前記データを該並列処理可能な単位に分けられたデータ毎に前記処理フロー定義情報に基づく処理をコンピュータに実行させる業務処理プログラムを生成する生成過程を有することを特徴とするものである。
また、本発明は、データの構造を定義したデータ構造定義情報を記憶するデータ構造定義情報記憶部と、前記データを用いた処理フローを定義した処理フロー定義情報を記憶する処理フロー定義情報記憶部とを具備するプログラム生成装置において業務処理プログラムを生成する処理をコンピュータに実行させるプログラム生成プログラムであって、前記データ構造定義情報記憶部から読み出した前記データ構造定義情報に基づいて前記データのうちの並列処理可能な単位を把握することによって、前記データを該並列処理可能な単位に分けられたデータ毎に前記処理フロー定義情報記憶部から読み出した前記処理フロー定義情報に基づく処理をコンピュータに実行させる業務処理プログラムを生成する生成過程をコンピュータに実行させるプログラム生成プログラムである。
【００１４】
【発明の実施の形態】
以下、図面を参照しこの発明の一実施形態について説明する。図１は、本実施形態によるプログラム生成装置の構成を示すブロック図である。この図において、符号１はプログラム生成装置、９１はプログラム生成装置１が出力する情報を利用者に対して表示する表示装置、９２は利用者からプログラム生成装置１への入力を受け付ける入力装置である。表示装置９１の具体例は、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ；陰極線管）や液晶やＰＤＰ（Ｐｌａｓｍａ  Ｄｉｓｐｌａｙ  Ｐａｎｅｌ；プラズマディスプレイパネル）などを利用したディスプレイ装置である。また、入力装置９２の具体例は、マウスなどのポインティングデバイスやキーボード、あるいはそれらを組み合わせたものである。
【００１５】
プログラム生成装置１の内部には、利用者から入力される情報などに応じてデータ構造を定義する処理を行うデータ構造定義部１１と、データ構造定義部１１によって定義されたデータ構造定義情報を記憶するデータ構造定義情報記憶部２１と、同じく利用者から入力される情報などに応じて処理フローを定義する処理を行う処理フロー定義部１２と、処理フロー定義部１２によって定義された処理フロー定義情報を記憶する処理フロー定義情報記憶部２２とが存在している。プログラム生成装置１において、プログラム生成部１０は、データ構造定義情報記憶部２１と処理フロー定義情報記憶部２２とから読み出した情報に基づいて、業務処理を実現するためのプログラムを生成し、このプログラムをプログラム記憶部３１に書き込む。プログラム記憶部３１は、プログラム生成装置１の内部に設けられていても良いし、外部のコンピュータ等に設けられていても良い。
なお、プログラム記憶部３１に書き込まれたプログラムは、実行環境において実行可能な形式に変換し、実行することができる。本例では、プログラム生成部は、利用者定義処理プログラムとディスパッチングプログラムとを生成する。詳細については後述するが、利用者定義プログラムは、分割されたデータに関して利用者が定義した処理をコンピュータに実行させるプログラムである。また、ディスパッチングプログラムは、データを分割するとともに、分割されたデータ毎に利用者定義処理プログラムによる処理をディスパッチするプログラムである。なお、プログラム記憶部３１には、ディスパッチング制御ルーチンがプログラム部品として記憶されている。前記のディスパッチングプログラムは、内部において、このディスパッチング制御ルーチンを呼び出すようになっている。
つまり、ディスパチング制御ルーチンは、プログラム部品として予め用意されており、処理フロー定義情報からは独立な処理として、実行環境情報記憶部から読み出した実行環境情報（後述）に基づいて、利用者定義処理プログラムをディスパッチする処理を行う。
プログラム生成部１０が生成したディスパッチングプログラムと、部品としてのディスパッチング制御ルーチンとは、実行時までに静的にリンクされるか、実行時に動的にリンクされるかのいずれかの方法により連係をとる。
【００１６】
次に、業務処理において処理の対象となるデータの例について説明する。
図２は、処理対象となる入力データの一例を示す概略図である。この図に示すデータはＸＭＬで記述されたテキスト形式の注文情報データの例である。このデータに含まれる各種のタグが、このデータの構造を規定している。例えば、「＜ＲＥＣＯＲＤ＞」というタグは１件の注文情報データの始まりを表し、「＜／ＲＥＣＯＲＤ＞  」というタグは１件の注文情報データの終わりを表している。つまり、図示するデータの１行目から１７行目までが１件目のレコードであり、同じく１８行目から３４行目までが２件目のレコードである。本例では入力データ内に２件のレコードが含まれているが、実際には任意の件数のレコードを入力データ内に含むようにすることができる。
【００１７】
また、各レコード内において、「＜ＯＲＤＥＲ＿ＮＯ＞」および「＜／ＯＲＤＥＲ＿ＮＯ＞」のタグによって囲まれる部分はは注文番号を表す。同様に、「＜ＣＵＳＴ＿ＩＤ＞」および「＜／ＣＵＳＴ＿ＩＤ＞」のタグによって囲まれる部分は顧客識別情報を表す。また、「＜ＤＡＴＥ＞」および「＜／ＤＡＴＥ＞  」のタグによって囲まれる部分は注文日付を表す。
また、「＜ＩＴＥＭ＞」および「＜／ＩＴＥＭ＞  」のタグによって囲まれる部分は、当該注文に含まれる注文品の情報を表し、この注文品の情報において、「＜ＮＯ＞」および「＜／ＮＯ＞」のタグによって囲まれる部分は当該注文内における注文品の番号（注文枝番）を表し、「＜ＨＩＮＭＥＩ＞」および「＜／ＨＩＮＭＥＩ＞  」のタグによって囲まれる部分は品名を表し、「＜ＴＡＮＫＡ＞  」および「＜／ＴＡＮＫＡ＞」のタグによって囲まれる部分は単価を表し、「＜ＳＵＵＲＹＯＵ＞  」および「＜／ＳＵＵＲＹＯＵ＞」のタグによって囲まれる部分は注文品の数量を表す。
【００１８】
次に、プログラムを生成する元となる各情報について説明する。
図３は、データ構造定義情報記憶部２１に記憶されるデータ構造定義情報の例を示す概略図である。図３の（ａ）〜（ｄ）に示すデータは本装置独自の形式で記述されたテキスト形式のデータであり、それぞれ、入力データを基に１件毎のトランザクションデータを取り出すために必要となる定義情報を表すデータである。
図３（ａ）に示すデータは、トランザクションデータが「＜ＲＥＣＯＲＤ＞」タグで始まり「＜／ＲＥＣＯＲＤ＞  」タグで終わることを表している。図２に例示した入力データは、この図３（ａ）のデータ構造定義情報に対応している。
図３（ｂ）に示すデータは、入力データに含まれる各トランザクションデータが改行（Ｃａｒｒｉａｇｅ  Ｒｅｔｕｒｎ  ）文字（「￥ｎ」と表記している）によって区切られることを表している。
図３（ｃ）に示すデータは、入力データに含まれる各トランザクションデータが固定長で区切られるレコードに対応していることを表している。
図３（ｄ）に示すデータは、入力データに含まれる各トランザクションデータが可変長のレコードに対応しているものであり、そのレコード長を表すフィールドが各レコードの先頭０バイト目から４バイト分であることを表している。
【００１９】
次に、処理フロー定義情報について説明する。ここでは、処理フロー定義情報は、業務処理の流れを表すフローチャート情報と、より詳細な処理の内容を表す処理詳細情報とからなる。
図４は、処理フロー定義情報記憶部２２に記憶される処理フロー定義情報の一部であるフローチャート情報の例を示す概略図である。図示するように、本例では、まずＸＭＬオーダー情報（ＸＭＬで記述された注文情報データ）が入力される。次に、入力されたＸＭＬオーダー情報に基づいて、ＸＭＬオーダー情報構文解析処理が行われる。この構文解析処理が成功した場合はオーダー情報（注文情報データ）がメモリに展開され、エラーの場合にはエラーログにエラー情報が書き込まれる。なお、エラーログは、磁気ディスクや磁気テープなどといった記録媒体に記録される。そして、構文解析処理によってメモリ展開されたオーダー情報に基づいて、次に、オーダー書き込み処理が行われる。このオーダー書き込み処理が成功した場合には結果としてオーダーデータベースにオーダー情報が書き込まれ、エラーの場合にはエラーログにエラー情報が書き込まれる。なお、オーダーデータベースは、磁気ディスクなどといった媒体にその情報を保持する。
【００２０】
図５は、図４に含まれるＸＭＬオーダー情報構文解析処理に対応する詳細処理情報を示す概略図である。図示するように、詳細処理情報は、入力データ（Ｉｎｐｕｔ  ）の定義と、処理内容そのものの定義と、出力データ（Ｏｕｔｐｕｔ）の定義とから成る。図５の例では、入力データは、前述したＸＭＬオーダー情報（注文情報データ）である。また、出力データは、メモリ展開されたオーダー情報とエラーログである。
【００２１】
そして、処理内容としては、入力されたＸＭＬオーダー情報を基にＸＭＬ構文解析処理を行う（「ＸＭＬ構文解析」という関数の引数が「ＸＭＬオーダー情報」）。
この構文解析処理においてエラーが無かった場合には「１．１エラーなし」の部分に定義された処理を行う。即ち、入力データ中の「ＯＲＤＥＲ＿ＮＯ」のデータをメモリ展開されたオブジェクトの「ｏｒｅｄｅｒ＿ｎｏ」に格納する。入力データ中の「ＣＵＳＴ＿ＩＤ  」のデータをメモリ展開されたオブジェクトの「ｃｕｓｔ＿ｉｄ  」に格納する。また、入力データ中の「ＩＴＥＭ［＊］．ＮＯ」、「ＩＴＥＭ［＊］．ＨＩＮＭＥＩ」、「ＩＴＥＭ［＊］．ＴＡＮＫＡ  」、「ＩＴＥＭ［＊］．ＳＵＵＲＹＯＵ  」をそれぞれメモリ展開されたオブジェクトの「ｉｔｅｍ［＊］．ｎｏ」、「ｉｔｅｍ［＊］．ｈｉｎｍｅｉ」、「ｉｔｅｍ［＊］．ｔａｎｋａ  」、「ｉｔｅｍ［＊］．ｓｕｕｒｙｏｕ  」に格納する。なお、「ｉｔｅｍ」は、構造体の配列であり、「ｉｔｅｍ［＊］  」はこの配列のすべての要素を表す。つまり、この「＊」は、配列の添え字のすべてを表す。また、例えば、「ｉｔｅｍ［＊］．ｎｏ」は、構造体のメンバー「ｎｏ」を表す。このようにして、構文解析処理においてエラーが無い場合には入力データがメモリ展開されるという処理が定義されている。
また、構文解析処理においてエラーがあった場合には、「１．２エラーあり」の部分に定義された処理を行う。即ち、システムで管理している時刻（実行時の時刻）をエラーログの「ｔｉｍｅ」に格納し、システムエラーコードを同じく「ｅｒｒ＿ｃｏｄｅ」に格納し、システムエラーメッセージを「ｅｒｒ＿ｍｓｇ  」に格納し、処理を終了する。
【００２２】
図６は、図４に含まれるオーダー書き込み処理に対応する詳細処理情報を示す概略図である。図示するように、オーダー書き込み処理の入力データは、上述したＸＭＬオーダー情報構文解析処理においてメモリ展開されたオーダー情報である。また、出力データは、オーダーデータベース内の伝票テーブルおよび明細テーブルと、エラーログとである。オーダーデータベースにおいて、伝票テーブルの主キーは注文番号を表す「ＯＲＤＥＲ＿ＮＯ」であり、伝票テーブルのその他の属性項目としては顧客識別情報を表す「ＣＵＳＴ＿ＩＤ  」がある。また、明細テーブルの主キーは上記の「ＯＲＤＥＲ＿ＮＯ」と注文枝番に相当する「ＮＯ」との複合キーであり、明細テーブルのその他の属性項目としては「ＨＩＮＭＥＩ」と「ＴＡＮＫＡ  」と「ＳＵＵＲＹＯＵ  」とがある。なお、伝票テーブルと明細テーブルとは、項目「ＯＲＤＥＲ＿ＮＯ」によって結合される。
【００２３】
そして、処理内容は次の通りである。即ち、「１．オーダーデータベース書き込み」において、メモリ展開されているオーダー情報の「ｏｒｄｅｒ＿ｎｏ」と「ｃｕｓｔ＿ｉｄ  」を、それぞれ、伝票テーブルの「ＯＲＤＥＲ＿ＮＯ」と「ＣＵＳＴ＿ＩＤ  」の各項目に格納するようなレコードのデータを作成する。また、メモリ展開されているオーダー情報の配列「ｉｔｅｍ［］」の各要素について、その要素の「ｎｏ」と「ｈｉｎｍｅｉ」と「ｔａｎｋａ  」と「ｓｕｕｒｙｏｕ  」を、それぞれ、明細テーブルの「ＮＯ」と「ＨＩＮＭＥＩ」と「ＴＡＮＫＡ  」と「ＳＵＵＲＹＯＵ  」の各項目に格納するようなレコードのデータを作成する。また、明細テーブルの「ＯＲＤＥＲ＿ＮＯ」には上記の「ｏｒｄｅｒ＿ｎｏ」が格納される。そして、これらの各レコードが、それぞれ、オーダーデータベースの伝票テーブルおよび明細テーブルに挿入（ｉｎｓｅｒｔ）される。
上記のデータの挿入においてエラーがなかった場合には、「１．１．エラーなし」の処理が行われ、つまり、そのまま処理を終了する。
また、上記のデータの挿入においてエラーがあった場合には、「１．２．エラーあり」の処理が行われ、システム時刻とシステムエラーコードとシステムエラーメッセージとをエラーログに書き出して処理を終了する。
【００２４】
次に、実行環境情報記憶部が記憶する実行環境情報について、説明する。実行環境情報は、実行時に参照される情報であり、上で定義された業務処理を実行するコンピュータの構成に関する情報である。特にこの実行環境情報が意味を持つのは、業務処理を複数台のコンピュータで分散処理する場合である。１つの業務処理を複数台のコンピュータで分散処理する場合、それら複数台のコンピュータはクラスタリンググループを形成する。そして、実行環境情報は、最低限このクラスタリンググループに属するコンピュータを識別する為の、各コンピュータのアドレス情報（ホスト名あるいはＩＰアドレスなど）を含んでいる。
なお、業務処理を複数台のコンピュータで分散処理させずに単一のコンピュータで処理する場合には、実行環境情報にそのような単一のコンピュータによる構成であることを表わす情報を含むようにしても良いし、実行環境情報記憶部そのものを持たないようにしても良い。後者の場合には、実行環境情報記憶部が無いときには、実行時に、実行環境は単一のコンピュータによる構成であると解釈することが出来る。
【００２５】
プログラム生成部（図１の符号１０）は、以上説明したデータ構造定義情報と処理フロー定義情報とを各記憶部から読み出し、これらの情報に基づいてプログラムを生成する。ここで説明している例の場合、プログラム生成部は、ＸＭＬオーダー情報構文解析処理プログラムと、オーダー書き込み処理プログラムと、ディスパッチングプログラムの３つのプログラムを生成する。
これら３つのプログラムのうち、ＸＭＬオーダー情報構文解析処理プログラムと、オーダー書き込み処理プログラムとは、利用者によって定義された処理フロー情報に従って、１件分の処理データを処理する利用者定義処理プログラムである。なお、１件分のデータとは、前述のデータ構造定義情報の定義によって取り出される単位であり、具体的には、例えば、図２に示したデータの「＜ＲＥＣＯＲＤ＞」タグで始まって「＜／ＲＥＣＯＲＤ＞  」タグで終了するレコードである。
また、ディスパッチングプログラムは、入力データから１件分ずつデータを取り出し、これをトランザクションデータとして、トランザクションをディスパッチし、実行環境に応じて複数のトランザクションを並列的に実行させるような制御を行うプログラムである。なお、ここで、トランザクションとは、ＸＭＬオーダー情報構文解析処理プログラムとオーダー書き込み処理プログラムとによって１件分のデータを処理する処理単位である。
【００２６】
図７は、プログラム生成部が生成するディスパッチングプログラムの処理手順を示すフローチャートである。以下、このフローチャートに沿って説明する。
まず、ステップＳ５１において、変数「ｐａｒａｌｌｅｌ」を０に初期化する。この変数「ｐａｒａｌｌｅｌ」はトランザクション実行の並列度を表すものである。
次に、ステップＳ５２において、変数「ｐａｒａｌｌｅｌ」が定数「ＭＡＸ」以上かどうかを判断する。この定数「ＭＡＸ」は、実行環境情報等に基づいて定められ、トランザクション実行時の最大並列度を表すものである。判断結果が「ＹＥＳ」ならばステップＳ５７へ飛び、「ＮＯ」ならば次のステップＳ５３へ進む。
次に、ステップＳ５３において、入力データが既に終了しているかどうかを判断する。この判断は、例えば、入力データを読み込むための命令を実行して、その結果として「ＥＯＦ（ｅｎｄ  ｏｆ  ｆｉｌｅ）  」コードが返されるかどうかにより行う。判断結果が「ＹＥＳ」ならばステップＳ５７へ飛び、「ＮＯ」ならば次のステップＳ５４へ進む。
【００２７】
次に、ステップＳ５４において、入力データから１トランザクション分のデータを取り出し、割り当てられたメモリにこのデータを展開する。なお、１トランザクション分のデータを取り出す方法は、前述のデータ構造定義情報記憶部に記憶されている情報によって決まる。例えば、図３（ａ）に示したデータ構造定義情報を用いてデータを取り出す場合には、入力データを字句解析することにより、「＜ＲＥＣＯＲＤ＞」で始まり「＜／ＲＥＣＯＲＤ＞  」で終わる部分のデータを１トランザクション分のデータとする。
次に、ステップＳ５５において、変数「ｐａｒａｌｌｅｌ」に１を加算する。これは、下でディスパッチするトランザクションにより、並列度が１だけ増加することを表す。
そして、ステップＳ５６において、ディスパッチ先を選択し、上で取り出したデータによるトランザクションをディスパッチする。なお、このステップにおけるディスパッチ先の選択のしかたは、実行環境情報記憶部に記憶された情報に基づいて決まる。ディスパッチ先は、ディスパッチングプログラムと同じコンピュータである場合もあるし、他のコンピュータあるいは他のＣＰＵである場合もある。
【００２８】
次に、ステップＳ５７では、トランザクションの終了を待つ。既にディスパッチしたトランザクションのいずれかが終了すると、その結果を受けてこの待ちを抜け出し、次のステップへ進む。
次に、ステップＳ５８では、終了したトランザクション結果の後処理を行う。次に、ステップＳ５９では、変数「ｐａｒａｌｌｅｌ」から１を減算する。これは、上でトランザクションが終了したため、並列度が１だけ減少することを表す。
そして、ステップＳ６０では、終了条件の判定を行う。すなわち、入力データがすべて終了しており、かつ、変数「ｐａｒａｌｌｅｌ」が０（実行中のトランザクションが無いことを表す）であれば、処理を終了する。そうでなければ、ステップＳ５２に戻って処理を続ける。
なお、ディスパッチングプログラムの処理機能のうち、ディスパッチングの制御に関する部分だけを共通のディスパッチング制御ルーチンとして切り出す場合には、例えば、図７の処理におけるステップＳ５２、Ｓ５５、Ｓ５６、Ｓ５７の機能をディスパッチング制御ルーチンに持たせるようにする。そして、このディスパッチング制御ルーチンは、個々の具体的な業務処理からは独立なプログラム部品として用意する。但し、上記のような機能の切り出し方は単なる一例であり、他の方法でプログラム部品の機能分割を行っても良い。
【００２９】
最後に、生成されるプログラムの実行環境等について説明する。
実行環境情報記憶部に記憶されている情報に基づいてトランザクションのディスパッチ先が決定されることは既に述べた通りであるが、この実行環境情報にクラスタリンググループが定義されている場合、ディスパッチングプログラムは、まず同じクラスタリンググループに所属するホストのアドレス情報（ホスト名又はＩＰアドレス等）を取得し、クラスタリンググループに所属する他のマシン上で利用者定義処理プログラムを実行する。このとき、データベースなどの入出力対象資源は、同じクラスタリンググループに所属するマシン間で共有されているものとする。
前述のように、ディスパッチングプログラムは、同じクラスタリンググループに属する他のマシンに利用者定義処理プログラムの実行を依頼するが、このとき、負荷の高いマシンに処理を依頼するより、負荷の低いマシンに処理を依頼するほうが全体の処理効率が良いので、負荷の低いマシンを選んで処理を依頼するようにする。そして、他のマシンが全て自分自身より処理負荷が高い場合には、自分自身に処理を依頼するようにする。
【００３０】
クラスタリング処理を行う場合、処理に関わるマシンの数が増えるので、その中のいずれかのマシンが障害となる確率も高くなる。従って、障害に備えたフェイルセーフ機能を組み込んでおく。ディスパッチングプログラムは、処理を依頼した先のマシンが処理を完了したかどうかを監視し、依頼先のマシンのシステムダウン等の障害を検知した場合には、そのトランザクションを他のマシンに引き継がせるようにすることで、耐障害性を向上させる。
また、同様に、ディスパッチングプログラムが稼動しているマシンがダウンすることも考えられる。ディスパッチングプログラムからトランザクション処理を依頼された先のマシンは、常にディスパッチ元のマシンを監視し、ディスパッチングプログラムが稼動するマシンがダウンした場合には、ディスパッチングの処理を途中から引き継ぐようにする。処理の引き継ぎのために、ディスパッチングプログラムは、常に、処理が完了したデータを記録することによってどこまでの処理が完了したかを管理する。ディスパッチングプログラムの処理を引き継ぐマシンは、処理再開時に、処理済のデータを読み飛ばし、処理が済んでないデータのみについて処理を行うようにする。
【００３１】
図８は、クラスタリングを実施しない場合の実行環境における動きを示す概略図である。この図において、ディスパッチングプログラムおよび利用者定義処理プログラムは、それぞれプログラム記憶部（図示せず）から読み出されて、業務処理プログラム実行コンピュータにローディングされる。この図の例では、ディスパッチングプログラムの一部の処理であるディスパッチング制御ルーチンが、サブルーチンとして呼び出される。そして、利用者定義処理プログラムは、ディスパッチングプログラムが実行される業務処理プログラム実行コンピュータと同一のコンピュータ上で実行される。なお、業務処理プログラム実行コンピュータとプログラム生成装置とは同一のコンピュータであっても良いし、異なるコンピュータであっても良い。
なお、図８に示す例では、ディスパッチングプログラム内のディスパッチング制御ルーチンが実行環境情報記憶部から実行環境情報を読み出すようになっているが、前述の通り、クラスタリングを実施しない場合には、実行環境情報記憶部を持たないようにしても良い。
【００３２】
図９は、クラスタリングを行う場合の実行環境における動きを示す概略図である。図９が図８と異なる点は、ディスパッチングプログラムが実行されるコンピュータと利用者定義処理プログラムが実行されるコンピュータとが異なっており、また利用者定義処理プログラムが複数の異なるコンピュータ上で実行されることである。ディスパッチングプログラムは、実行環境情報記憶部からクラスタリンググループに関する情報を得て、クラスタリングクループを形成する各メンバー（業務処理プログラム実行コンピュータ）に業務処理プログラムの実行を依頼する。
【００３３】
上述したプログラム生成装置はコンピュータシステムを用いて実現している。そして、プログラム生成装置におけるデータ構造定義部と処理フロー定義部とプログラム生成部における各処理の過程は、プログラムの形式でコンピュータ読み取り可能な記録媒体に記憶されており、このプログラムをコンピュータが読み出して実行することによって、上記処理が行われる。ここでコンピュータ読み取り可能な記録媒体とは、磁気ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、半導体メモリ等をいう。また、このコンピュータプログラムを通信回線によってコンピュータに配信し、この配信を受けたコンピュータが当該プログラムを実行するようにしても良い。
【００３４】
なお、ディスパッチング制御ルーチンをプログラム部品として切り出すことにより、次のようなことも可能である。
本実施形態によるプログラム生成装置の機能をコンピュータに実行させるプログラムをライセンス販売の形態で販売する場合には、例えば、実行環境においてクラスタリングを行う場合と行わない場合とで、プログラム生成プログラムのライセンス価格に変化を持たせたい場合がある。つまり、その場合には価格の異なる２種類のライセンスを用意して、価格が安い方のライセンスでは業務処理のクラスタリングを行わないようにして、価格が高いほうのライセンスのみにおいて業務処理のクラスタリングを行えるようにする。そして、このライセンスの種類に応じて、プログラム部品として提供されるディスパッチング制御ルーチンも２種類用意し、この２種類のディスパッチング制御ルーチンのうちの一方がクラスタリング環境での利用者定義処理のディスパッチングを行い、他方では単一コンピュータ上での利用者定義処理のディスパッチングのみを行うようにする。
【００３５】
これにより、ディスパッチング制御ルーチンを入れ替えるだけで、２種類のライセンスを適切に販売することができる。
また、ある利用者が、価格の安い方のライセンスから価格の高い方のライセンスにアップグレードする際にも、利用者定義処理プログラムを書き換えたり再コンパイルしたりすることなく、ディスパッチング制御ルーチンを入れ替えるだけで、システムの移行をスムースに行え、ソフトウェアの販売者にとっても利用者にとっても手間がかからないというメリットが得られる。
【００３６】
以上、図面を参照してこの発明の実施形態を詳述してきたが、具体的な構成はこれらの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【００３７】
【発明の効果】
以上説明したように、この発明によれば、データ構造定義情報記憶部がデータの構造を定義したデータ構造定義情報を記憶し、処理フロー定義情報記憶部が前記データを用いた処理フローを定義した処理フロー定義情報を記憶する。そして、プログラム生成部は、データ構造定義情報記憶部から読み出したデータ構造定義情報に基づいて前記データのうちの並列処理可能な単位を把握することによって、前記データを該並列処理可能な単位に分けられたデータ毎に処理フロー定義情報記憶部から読み取った処理フロー定義情報に基づく処理をコンピュータに実行させるための業務処理プログラムを生成する。これにより、利用者が定義した処理フローに基づいて、自動的に並列化処理を行うプログラムを生成できる。従って、利用者が処理を定義する際にその並列性を意識する必要が無く、かつデータの処理時間を短縮することができる。これにより、熟練プログラマが、効率の良い並列処理プログラムをわざわざ作成する必要が無い。
【００３８】
また、本発明によれば、プログラム生成部が生成する業務処理プログラムは、業務処理コンピュータプログラムを実行する環境に関する実行環境情報を実行環境情報記憶部から読み出し該実行環境情報に基づいて処理フロー定義情報に基づく処理をコンピュータに並列的に実行させる。これにより、生成されたプログラムを実行環境情報に応じて最適な状況で並列的に実行させることが可能となる。例えば、クラスタリング構成を有する実行環境などにおいて、処理の並列化を実現できるため、業務処理にスケーラビリティを持たせることが可能となる。
【００３９】
また、本発明によれば、ディスパッチングプログラムは、当該ディスパッチングプログラムに入力さえるデータを並列処理可能な単位に分割する過程と、プログラム部品として予め用意されており処理フロー定義情報からは独立な処理として利用者定義処理プログラムをディスパッチする処理を行うディスパッチング制御ルーチンを呼び出す過程とをコンピュータに実行させる。即ち、ディスパッチング制御ルーチンを利用者定義処理からは独立な共通プログラムとして切り出している。これにより、例えば、ディスパッチング制御ルーチンとして、クラスタ環境対応用のものと非対応用のものとの２種類を用意し、これを使い分けることにより、プログラム生成装置あるいはプログラム生成プログラムの機能を変えることができる。また、利用者がこれら異なる機能間で移行を行う際にも、ディスパッチング制御ルーチンを入れ替えるだけで利用者定義処理プログラムを再作成あるいは再コンパイル等することなく、簡単な移行が行えるようになる。
【図面の簡単な説明】
【図１】この発明の一実施形態によるプログラム生成装置の構成を示すブロック図である。
【図２】同実施形態において、処理対象となる入力データの一例を示す概略図である。
【図３】同実施形態において、データ構造定義情報記憶部に記憶されるデータ構造定義情報の例を示す概略図である。
【図４】同実施形態において、処理フロー定義情報記憶部に記憶される処理フロー定義情報の一部であるフローチャート情報の例を示す概略図である。
【図５】図４に含まれるＸＭＬオーダー情報構文解析処理に対応する詳細処理情報を示す概略図である。
【図６】図４に含まれるオーダー書き込み処理に対応する詳細処理情報を示す概略図である。
【図７】プログラム生成部が生成するディスパッチングプログラムの処理手順を示すフローチャートである。
【図８】クラスタリングを実施しない場合の実行環境における動きを示す概略図である。
【図９】クラスタリングを実施する場合の実行環境における動きを示す概略図である。
【符号の説明】
１  プログラム生成装置
１０  プログラム生成部
１１  データ構造定義部
１２  処理フロー定義部
２１  データ構造定義情報記憶部
２２  処理フロー定義情報記憶部
３１  プログラム記憶部
９１  表示装置
９２  入力装置
【図１】
2004178316.tif 000003
【図２】
2004178316.tif 000004
【図３】
2004178316.tif 000005
【図４】
2004178316.tif 000006
【図５】
2004178316.tif 000007
【図６】
2004178316.tif 000008
【図７】
2004178316.tif 000009
【図８】
2004178316.tif 000010
【図９】
2004178316.tif 000011