(57)【特許請求の範囲】
【請求項１】
同一種類の複数のジョブリクエストに応じて複数回実行されるアプリケーションプログラムを、前記複数のジョブリクエストを一括して処理する一括処理プログラムに変換する変換装置であって、
前記アプリケーションプログラムにおける、他サーバへ処理を要求するサーバ処理要求を発行するアクセス要求コードを含む部分と、前記サーバ処理要求以外の処理を実行する処理コードを含む部分とを識別するコード識別部と、
前記アプリケーションプログラム中の前記アクセス要求コードを、前記複数のジョブリクエストに対応する複数のサーバ処理要求を一括して発行する一括アクセス要求コードに変換する一括化部と、
前記アプリケーションプログラム中の前記処理コードを、前記複数のジョブリクエストに対応する複数の処理をそれぞれ実行する多重処理コードに変換する多重化部と、
前記一括化部および前記多重化部により処理された後の前記アプリケーションプログラムを、前記一括処理プログラムとして出力する出力部と
を備える変換装置。
【請求項２】
前記アプリケーションプログラムは、前記サーバ処理要求として、データベースサーバへの処理要求を発行するクエリを含み、
前記一括化部は、前記アプリケーションプログラム中のクエリを発行するコードを、前記複数のジョブリクエストに対応する複数のクエリを列挙して一つの記述にまとめた一の一括アクセス要求コードに変換する
請求項１に記載の変換装置。
【請求項３】
前記アプリケーションプログラムは、前記サーバ処理要求として、データベースサーバへの処理要求を発行するクエリを含み、
前記一括化部は、前記アプリケーションプログラム中のクエリを発行するコードを、前記複数のジョブリクエストに対応する複数のクエリを合成した合成クエリを発行するコードに変換する
請求項１に記載の変換装置。
【請求項４】
前記アプリケーションプログラムに含まれる前記クエリを発行するコードが一のデータベーステーブルをアクセスするＳＥＬＥＣＴステートメントにより記述されている場合、前記一括化部は、前記合成クエリを発行するコードを、前記複数のジョブリクエストに対応する複数のＷＨＥＲＥ条件の和集合がＷＨＥＲＥ条件とされたＳＥＬＥＣＴステートメントにより記述する
請求項３に記載の変換装置。
【請求項５】
前記アプリケーションプログラムから、他のジョブリクエストの処理結果に影響を与える処理を実行するコードを検出するサイドエフェクト検出部と、
前記サイドエフェクト検出部において検出されたコードの前段に、前記複数のジョブリクエストの全てについて行なった全てのサーバ処理要求をロールバックさせるロールバック要求を発行するコードを、前記アプリケーションプログラムに挿入するロールバック挿入部と
を更に備え、
前記出力部は、更に前記ロールバック挿入部により処理された後の前記アプリケーションプログラムを、前記一括処理プログラムとして出力する
請求項１に記載の変換装置。
【請求項６】
前記アプリケーションプログラムは、前記サーバ処理要求として、データベースサーバに対して行なったサーバ処理要求をロールバックさせるロールバック要求を含み、
前記複数のジョブリクエストのうちいずれかのジョブリクエストに応じて前記ロールバック要求を発行すべきことを条件として、前記複数のジョブリクエストの全てについて行なった全てのサーバ処理要求をロールバックさせるロールバック要求を発行するコードを、前記アプリケーションプログラムに挿入するロールバック挿入部
を更に備え、
前記出力部は、更に前記ロールバック挿入部により処理された後の前記アプリケーションプログラムを、前記一括処理プログラムとして出力する
請求項１に記載の変換装置。
【請求項７】
前記ロールバック挿入部が前記ロールバック要求を発行するコードを挿入する場合、前記複数のジョブリクエストのそれぞれに応じて前記アプリケーションプログラムを個別に呼び出すコードを、前記アプリケーションプログラムに挿入する再呼出挿入部
を更に備え、
前記出力部は、更に前記再呼出挿入部により処理された後の前記アプリケーションプログラムを、前記一括処理プログラムとして出力する
請求項５から請求項６のいずれか一項に記載の変換装置。
【請求項８】
前記アプリケーションプログラム中の変数を、前記複数のジョブリクエストのそれぞれに対応するインデックスが割り当てられたベクトル変数に変換する変数変換部
を更に備え、
前記出力部は、更に前記変数変換部により処理された後の前記アプリケーションプログラムを、前記一括処理プログラムとして出力する
請求項１に記載の変換装置。
【請求項９】
前記アプリケーションプログラムに含まれるコード列を分割した複数のステージのそれぞれについて、マスクベクトルを生成するコードを、前記アプリケーションプログラムに挿入するマスクベクトル挿入部
を更に備え、
前記マスクベクトルは、複数のインデックスのそれぞれに前記複数のジョブリクエストのそれぞれが割り当てられた配列であり、前記複数のインデックスのそれぞれに、割り当てられたジョブリクエストの処理において対応するステージを実行するか否かを示す値を格納し、
前記出力部は、更に前記マスクベクトル挿入部により処理された後の前記アプリケーションプログラムを、前記一括処理プログラムとして出力する
請求項１に記載の変換装置。
【請求項１０】
前記マスクベクトル挿入部は、
当該ステージの次に１つの次ステージが実行される場合、当該ステージのマスクベクトルの各インデックスの値を前記次のステージのマスクベクトルの各インデックスの値として引き継がせるコードを、前記アプリケーションプログラムに挿入し、
当該ステージの次に複数の次ステージが実行される場合、当該ステージのマスクベクトルのインデックス毎に、当該インデックスの値を前記複数の次ステージのうちいずれか一の次ステージのマスクベクトルにおける対応するインデックスの値として引き継がせるコードを、アプリケーションプログラムに挿入し、
当該ステージの直前に実行されるべきステージとして、１つの前ステージが存在する場合、前記前ステージのマスクベクトルの各インデックスの値を当該ステージのマスクベクトルの各インデックスの値としてそのまま引き継いで当該ステージのマスクベクトルを生成するコードを、前記アプリケーションプログラムに挿入し、
当該ステージの直前に実行されるべきステージとして、複数の前ステージが存在する場合、前記複数の前ステージのそれぞれから引き継いだ各インデックスの値をインデックス毎にＯＲ演算して、当該ステージのマスクベクトルを生成するコードを、アプリケーションプログラムに挿入する
請求項９に記載の変換装置。
【請求項１１】
クライアントから与えられたジョブリクエストに応じた処理を実行して、前記クライアントに対して処理結果を応答するサーバシステムであって、
同一種類の複数のジョブリクエストに応じて複数回実行されるアプリケーションプログラムを、前記複数のジョブリクエストを一括して処理する一括処理プログラムに変換する変換装置と、
複数のジョブリクエスト毎に前記一括処理プログラムを呼び出して実行して、前記複数のジョブリクエストに応じた複数の実行結果を出力する実行部と
を備え、
前記変換装置は、
前記アプリケーションプログラムにおける、他サーバへ処理を要求するサーバ処理要求を発行するアクセス要求コードを含む部分と、前記サーバ処理要求以外の処理を実行する処理コードを含む部分とを識別するコード識別部と、
前記アプリケーションプログラム中の前記アクセス要求コードを、前記複数のジョブリクエストに対応する複数のサーバ処理要求を一括して発行する一括アクセス要求コードに変換する一括化部と、
前記アプリケーションプログラム中の前記処理コードを、前記複数のジョブリクエストに対応する複数の処理をそれぞれ実行する多重処理コードに変換する多重化部と、
前記一括化部および前記多重化部により処理された後の前記アプリケーションプログラムを、前記一括処理プログラムとして出力する出力部と
を有するサーバシステム。
【請求項１２】
前記変換装置は、一括して処理すべきジョブリクエストの数を指定可能な一括処理プログラムを生成し、
前記実行部は、当該サーバシステムの与えられたジョブリクエストに対する応答時間に応じて、一括して処理すべきジョブリクエストの数を選択し、呼び出した前記一括処理プログラムに選択した数のジョブリクエストを一括処理させる
請求項１１に記載のサーバシステム。
【請求項１３】
同一種類の複数のジョブリクエストに応じて複数回実行されるアプリケーションプログラムを、前記複数のジョブリクエストを一括して処理する一括処理プログラムに変換する変換方法であって、
前記アプリケーションプログラムにおける、他サーバへ処理を要求するサーバ処理要求を発行するアクセス要求コードを含む部分と、前記サーバ処理要求以外の処理を実行する処理コードを含む部分とを識別するコード識別ステップと、
前記アプリケーションプログラム中の前記アクセス要求コードを、前記複数のジョブリクエストに対応する複数のサーバ処理要求を一括して発行する一括アクセス要求コードに変換する一括化ステップと、
前記アプリケーションプログラム中の前記処理コードを、前記複数のジョブリクエストに対応する複数の処理をそれぞれ実行する多重処理コードに変換する多重化ステップと、
前記一括化ステップおよび前記多重化ステップにより処理された後の前記アプリケーションプログラムを、前記一括処理プログラムとして出力する出力ステップと
を備える変換方法。
【請求項１４】
同一種類の複数のジョブリクエストに応じて複数回実行されるアプリケーションプログラムを、前記複数のジョブリクエストを一括して処理する一括処理プログラムに変換する変換装置として、コンピュータを機能させるプログラムであって、
前記コンピュータを、
前記アプリケーションプログラムにおける、他サーバへ処理を要求するサーバ処理要求を発行するアクセス要求コードを含む部分と、前記サーバ処理要求以外の処理を実行する処理コードを含む部分とを識別するコード識別部と、
前記アプリケーションプログラム中の前記アクセス要求コードを、前記複数のジョブリクエストに対応する複数のサーバ処理要求を一括して発行する一括アクセス要求コードに変換する一括化部と、
前記アプリケーションプログラム中の前記処理コードを、前記複数のジョブリクエストに対応する複数の処理をそれぞれ実行する多重処理コードに変換する多重化部と、
前記一括化部および前記多重化部により処理された後の前記アプリケーションプログラムを、前記一括処理プログラムとして出力する出力部と
として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、変換装置、サーバシステム、変換方法およびプログラムに関する。特に本発明は、複数のジョブリクエストを一括して処理する一括処理プログラムを生成する変換装置、サーバシステム、変換方法およびプログラムに関する。
【背景技術】
【０００２】
ウェッブアプリケーションおよび銀行業務システム等を実現するサーバシステムにおいては、クライアントから与えられたジョブリクエストをサーバが処理して、その処理結果をクライアントに返信する、オンライントランザクション処理を行っている。このようなサーバシステムは、膨大なジョブリクエストを即時に処理する必要があり、大規模となっていた。
【０００３】
ところで、オンライントランザクション処理を行うサーバシステムは、ジョブリクエスト毎に独立に処理が実行されるので、これらの処理間に様々なオーバーヘッドが含まれる。例えばデータベースサーバへのアクセスを伴うオンライントランザクション処理を実行する場合、アプリケーションサーバは、アプリケーションプログラムをジョブリクエスト毎に起動して、データベースサーバと通信しなければならなかった。
【０００４】
このような問題を解決することを目的として、適当な個数のジョブリクエストを一括して処理するバッチプログラムを実行するサーバシステムが提案されている（非特許文献１）。このようなサーバシステムによれば、データベースサーバへのアクセスを複数のジョブリクエスト毎にまとめることができるので、アプリケーションプログラムの起動およびデータベースサーバへの通信回数を減らすことができる。この結果、このようなサーバシステムによれば、複数のジョブリクエスト毎に行われる複数の処理間に含まれるオーバーヘッドを少なくして、システム全体のスループットを向上させたオンライントランザクション処理を実現することができる。
【０００５】
また、非特許文献２には、データベースサーバのプログラム自体を再構成することにより、複数のクエリをまとめて処理する技術が提案されている（非特許文献２）。このような技術によれば、データベースサーバにおける処理のスループットを向上させることができる。
【０００６】
【非特許文献１】日本電気株式会社、「大規模、高速のトランザクション処理を実現するシステムアーキテクチャ並びにミドルウェア製品を開発」、２００７年９月２６日、ＮＥＣホームページ  プレスリリース、［平成２０年２月２２日検索］、インターネット、＜ http://www.nec.co.jp/press/ja/0709/2601.html ＞
【非特許文献２】Harizopoulos， S. and Ailamaki， A.， "Improving instruction cache performance in OLTP，" ACM Trans. Database Syst. 31， 3 （Sep. 2006）， 887-920.
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかし、非特許文献１に記載のサーバシステムでは、複数のジョブリクエストを一括して処理するバッチプログラムを新たに開発しなければならないので、開発負担が大きかった。さらに、その開発は、ジョブリクエスト同士の整合性を保たなければならないので、一のジョブリクエストの処理を実行させるアプリケーションプログラムの開発と比較して難しい。また、非特許文献２に記載の技術では、データベースサーバのプログラム自体を大規模に変更しなければならなく、オンライントランザクション処理を行う既存のデータベースサーバに適用することが困難であった。そこで本発明は、上記の課題を解決することのできる変換装置、サーバシステム、変換方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明の第１の形態においては、同一種類の複数のジョブリクエストに応じて複数回実行されるアプリケーションプログラムを、複数のジョブリクエストを一括して処理する一括処理プログラムに変換する変換装置であって、アプリケーションプログラムにおける、他サーバへ処理を要求するサーバ処理要求を発行するアクセス要求コードを含む部分と、サーバ処理要求以外の処理を実行する処理コードを含む部分とを識別するコード識別部と、アプリケーションプログラム中のアクセス要求コードを、複数のジョブリクエストに対応する複数のサーバ処理要求を一括して発行する一括アクセス要求コードに変換する一括化部と、アプリケーションプログラム中の処理コードを、複数のジョブリクエストに対応する複数の処理をそれぞれ実行する多重処理コードに変換する多重化部と、一括化部および多重化部により処理された後のアプリケーションプログラムを、一括処理プログラムとして出力する出力部とを備える変換装置を提供する。また、当該変換装置を備えるサーバシステム、当該変換装置としてコンピュータを機能させる方法およびプログラムを提供する。なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【発明を実施するための最良の形態】
【０００９】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１０】
図１は、本実施形態に係るサーバシステム１０の構成を示す。サーバシステム１０は、１又は複数のクライアント（例えば端末装置）から与えられたジョブリクエストに応じた処理を実行して、クライアントに対して処理結果を応答する。サーバシステム１０は、アプリケーションサーバ１２と、データベースサーバ１４と、変換装置２０とを備える。
【００１１】
アプリケーションサーバ１２は、クライアントからネットワークを介してジョブリクエストが与えられる。アプリケーションサーバ１２は、与えられたジョブリクエストに応じて一括処理プログラムを呼び出して実行する。また、一括処理プログラムを用いてジョブリクエストに応じた処理が実行できない場合、アプリケーションサーバ１２は、アプリケーションプログラムを呼び出して実行する。これにより、アプリケーションサーバ１２は、与えられたジョブリクエストに応じた処理を実行することができる。
【００１２】
アプリケーションサーバ１２は、ジョブリクエストに応じた処理の実行中において、データベースサーバ１４等のバックエンドサーバ（当該アプリケーションサーバ１２の後段のサーバ）に対してサーバ処理要求を発行して、処理結果を取得してよい。そして、アプリケーションサーバ１２は、ジョブリクエストに応じた処理結果を、対応するクライアントにネットワークを介して送信する。なお、アプリケーションサーバ１２は、１又は複数のサーバにより負荷分散する構成であってよい。
【００１３】
アプリケーションサーバ１２は、ジョブ蓄積部２２と、一括処理プログラム格納部２４と、アプリケーションプログラム格納部２６と、実行部２８とを有する。ジョブ蓄積部２２は、クライアントから与えられた複数のジョブリクエストを蓄積する。
【００１４】
一括処理プログラム格納部２４は、複数のジョブリクエストを一括して処理する一括処理プログラムを格納する。すなわち、一括処理プログラム格納部２４は、複数のジョブリクエスト毎に１回呼び出されて実行される一括処理プログラムを格納する。
【００１５】
アプリケーションプログラム格納部２６は、複数のジョブリクエストのそれぞれに応じて毎回実行されるアプリケーションプログラムを格納する。すなわち、アプリケーションプログラム格納部２６は、個別のジョブリクエスト毎に毎回呼び出されて実行されるアプリケーションプログラムを格納する。
【００１６】
実行部２８は、複数のジョブリクエスト毎に一括処理プログラムを呼び出して実行して、複数のジョブリクエストに応じた複数の実行結果を出力する。また、一括処理プログラムを用いてジョブリクエストに応じた処理が実行できない場合、実行部２８は、複数のジョブリクエストに応じて複数のアプリケーションプログラムを呼び出して実行して、複数のジョブリクエストに応じた複数の処理結果を出力してよい。
【００１７】
データベースサーバ１４は、データベース内に情報を格納する。データベースサーバ１４は、アプリケーションサーバ１２から与えられたサーバ処理要求に応じて、データベースレコードの検索、更新および削除等の処理を実行する。そして、データベースサーバ１４は、これらの処理結果をアプリケーションサーバ１２に応答する。なお、サーバシステム１０は、アプリケーションサーバ１２からサーバ処理要求が与えられるバックエンドサーバとして、データベースサーバ１４以外のサーバを備える構成であってもよい。
【００１８】
変換装置２０は、アプリケーションプログラムを、一括処理プログラムに変換する。アプリケーションサーバ１２は、一例として、アプリケーションプログラム格納部２６に格納されているアプリケーションプログラムを読み出して、一括処理プログラムに自動的に変換してよい。そして、アプリケーションサーバ１２は、一例として、生成した一括処理プログラムを一括処理プログラム格納部２４に書き込んでよい。変換装置２０の構成および処理の詳細は、図４以降において説明する。
【００１９】
図２は、サーバシステム１０の処理フローを示す。まず、サーバシステム１０は、クライアントからジョブリクエストが与えられると、与えられたジョブリクエストを蓄積する（ステップＳ１１）。
【００２０】
続いて、サーバシステム１０は、蓄積したジョブリクエストのうち、他のジョブリクエストと依存関係を有するジョブリクエストを抽出する（ステップＳ１２）。サーバシステム１０は、一例として、予めユーザが設計したフィルタにより、他のジョブリクエストの処理結果に影響を与えるジョブリクエストを抽出する。サーバシステム１０は、一例として、他のジョブリクエストと依存関係を有する可能性が生じる処理を予め登録しておき、与えられたジョブリクエストのＩＤ等を検出して登録された処理を実行させるジョブリクエストか否かを判断してよい。
【００２１】
他のジョブリクエストと依存関係を有するジョブリクエストを抽出した場合、サーバシステム１０は、抽出したジョブリクエストの種類に対応するアプリケーションプログラムを呼び出して実行する（ステップＳ１３）。これにより、サーバシステム１０は、他のジョブリクエストと依存関係を有するジョブリクエストに応じた処理を、個別に実行することができる。
【００２２】
なお、オンライントランザクション処理は、ほぼ同時刻に到着する複数のジョブリクエスト同士に依存関係が存在しない場合が多い。従って、サーバシステム１０は、ステップＳ１２およびステップＳ１３の処理を行なわない構成であってもよい。
【００２３】
続いて、サーバシステム１０は、ステップＳ１２において他のジョブリクエストと依存関係を有さないと判断したジョブリクエストの種類を判別する（ステップＳ１４）。続いて、サーバシステム１０は、所定数（対応する一括処理プログラムがまとめて処理するジョブリクエスト数）のジョブリクエストを種類毎に蓄積したことを条件として（ステップＳ１５）、対応する種類のジョブリクエストを処理する一括処理プログラムを呼び出して実行する（ステップＳ１６）。これに代えて、サーバシステム１０は、一例として、ジョブリクエストを種類毎に蓄積して、一定時間毎に対応する種類のジョブリクエストを処理する一括処理プログラムを呼び出して実行してもよい。
【００２４】
このように、サーバシステム１０は、複数のジョブリクエスト毎に一括処理プログラムを１回呼び出して実行する。これにより、サーバシステム１０によれば、複数のジョブリクエストに応じた複数の処理間に含まれるオーバーヘッドを少なくして、システム全体のスループットを向上させたオンライントランザクション処理を実現することができる。
【００２５】
なお、与えられたジョブリクエストを処理する一括処理プログラムが存在しない場合には、サーバシステム１０は、対応するアプリケーションプログラムを複数回呼び出してよい。また、ステップＳ１５において、予め定められた時間を経過しても、所定数のジョブリクエストが蓄積されない場合には、サーバシステム１０は、一例として、一括処理プログラムを呼び出すことに代えて、アプリケーションプログラムを複数回呼び出してよい。
【００２６】
また、本実施形態の変形例として、変換装置２０は、パラメータ等を与えることにより、一括して処理すべきジョブリクエストの数を指定することが可能な一括処理プログラムを生成してもよい。この場合、サーバシステム１０の実行部２８は、当該サーバシステム１０の与えられたジョブリクエストに対する応答時間に応じて、一括して処理すべきジョブリクエストの数を選択し、呼び出した一括処理プログラムに選択した数のジョブリクエストを一括処理させてよい。これにより、サーバシステム１０は、当該サーバシステム１０の負荷に応じて、最適な数のジョブリクエストを一括処理することができる。
【００２７】
図３は、図２に示されたステップＳ１６において一括処理プログラムを呼び出した場合の、サーバシステム１０の処理フローを示す。まず、サーバシステム１０は、呼び出した一括処理プログラムの実行を開始する（ステップＳ２１）。
【００２８】
続いて、サーバシステム１０は、一括処理プログラムの実行中において、例外処理が発生するか否かを判断する（ステップＳ２２）。ここで、例外処理とは、他のジョブリクエストの処理結果に影響を与える処理（サイドエフェクト）、または、その可能性がある処理をいう。例外処理は、一例として、サイドエフェクトを発生させるＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）またはライブラリを呼び出す処理、データの入出力処理等であってよい。さらに、例外処理は、一例として、いずれか一のジョブリクエストに応じてデータベースサーバ１４に対して行なうべきサーバ処理要求をロールバックさせる処理あってもよい。
【００２９】
一括処理プログラムの実行中において例外処理が発生しなかった場合（ステップＳ２２のＮＯ）、サーバシステム１０は、そのまま処理を終了する。この結果、サーバシステム１０は、複数のジョブリクエストに応じた複数の処理結果を出力することができる。
【００３０】
一括処理プログラムの実行中において例外処理が発生した場合（ステップＳ２２のＹＥＳ）、サーバシステム１０は、複数のジョブリクエストに応じて行なったこれまでの処理を全てロールバックする（ステップＳ２３）。続いて、サーバシステム１０は、複数のジョブリクエストのそれぞれに対応して、複数回アプリケーションプログラムを呼び出して実行する（ステップＳ２４）。この結果、サーバシステム１０は、複数のジョブリクエストに応じた複数の処理結果を出力することができる。
【００３１】
このようにサーバシステム１０は、例外処理が発生しない場合には一括処理プログラムを実行して、複数のジョブリクエストに応じた複数の処理を実行する。そして、サーバシステム１０は、一括処理プログラムの実行中においてサイドエフェクト等の例外処理が発生した場合には、複数のジョブリクエストに応じて行ったこれまでの全処理を一旦ロールバックした後、複数回アプリケーションプログラムを実行して、複数のジョブリクエストに応じた複数の処理を再実行する。
【００３２】
これにより、サーバシステム１０によれば、複数のジョブリクエストについて、互いに整合性のある処理結果を確実に出力することができる。さらに、サーバシステム１０により用いられる一括処理プログラムは、例外処理に対応したプログラムでなくてよいので、容易に開発することができる。
【００３３】
図４は、本実施形態に係る変換装置２０の構成を示す。変換装置２０は、複数のジョブリクエストに応じて複数回実行されるアプリケーションプログラムを、複数のジョブリクエストを一括して処理する一括処理プログラムに変換する。
【００３４】
変換装置２０は、入力部３２と、記憶装置３４と、出力部３６と、演算処理装置３８とを備える。入力部３２は、アプリケーションプログラムをアプリケーションプログラム格納部２６から入力して、記憶装置３４に書き込む。
【００３５】
記憶装置３４は、アプリケーションプログラムを記憶する。さらに、記憶装置３４は、アプリケーションプログラムに基づき生成された一括処理プログラムを記憶する。出力部３６は、記憶装置３４から一括処理プログラムを読み出して、一括処理プログラム格納部２４に出力する。
【００３６】
演算処理装置３８は、記憶装置３４に記憶されたアプリケーションプログラムを一括処理プログラムに変換し、変換した一括処理プログラムを記憶装置３４に記憶させる。より具体的には、演算処理装置３８は、記憶装置３４上のアプリケーションプログラム中のコードを解析する。そして、演算処理装置３８は、アプリケーションプログラム中の各コードを検索、複製、削除、変換、入れ替え等し、さらに、アプリケーションプログラム中に新たなコードを挿入して、記憶装置３４上に一括処理プログラムのコードを生成する。
【００３７】
演算処理装置３８は、コード識別部４２と、変数変換部４４と、マスクベクトル挿入部４６と、多重化部４８と、サイドエフェクト検出部５０と、ロールバック挿入部５２と、再呼出挿入部５４と、一括化処理部５６と、実行順変更部５８とを有する。これらの部材のそれぞれは、一例として、演算処理装置３８が変換プログラムを実行することにより実現される機能ブロックであってよい。
【００３８】
図５は、変換装置２０による処理フローを示す。変換装置２０は、例えばユーザから処理開始の指示を受けると、まず、ステップＳ１０１において、アプリケーションプログラム格納部２６からアプリケーションプログラムを入力して、記憶装置３４に書き込む。
【００３９】
続いて、ステップＳ１０２において、コード識別部４２は、アプリケーションプログラムのコードを順次に読み出して解析する。そして、コード識別部４２は、アプリケーションプログラムにおける、他サーバへ処理を要求するサーバ処理要求を発行するアクセス要求コードを含む部分と、サーバ処理要求以外の処理を実行する処理コードを含む部分とを識別する。
【００４０】
本実施形態においては、コード識別部４２は、アプリケーションプログラムに含まれるコード列を、複数のステージに分割する。より具体的には、コード識別部４２は、アプリケーションプログラムに含まれるコード列を、データベースサーバ１４へのサーバ処理要求を含むＳＱＬステージと、データベースサーバ１４へのサーバ処理要求を含まないプログラムステージとに分割する。
【００４１】
続いて、ステップＳ１０３において、変数変換部４４は、アプリケーションプログラム中の変数を、複数のジョブリクエストのそれぞれに対応するインデックスが割り当てられたベクトル変数に変換する。例えば、当該一括処理プログラムが一括処理すべきジョブリクエストの数がＮ個であれば、変数変換部４４は、アプリケーションプログラム中の各変数（例えば、Ａ）を、Ｎ個のインデックスが割り当てられたベクトル変数（例えば、Ａ［１，２，３，…，Ｎ］に変換する。これにより、コード識別部４２は、アプリケーションプログラムを、複数のジョブリクエストのそれぞれに対応して発生する複数のパラメータを一括して格納するベクトル変数を用いたプログラムに変換することができる。
【００４２】
続いて、ステップＳ１０４において、マスクベクトル挿入部４６は、複数のステージのそれぞれについて、マスクベクトルを生成するコードをアプリケーションプログラムに挿入する。本実施形態において、マスクベクトルは、一括処理すべき複数のジョブリクエストのそれぞれが、複数のインデックスのそれぞれに割り当てられ、さらに、複数のインデックスのそれぞれに、当該インデックスに対応するジョブリクエストが当該ステージを実行するか否かを指定する値を格納する配列であってよい。
【００４３】
このようなマスクベクトル挿入部４６は、当該ステージを実行させるか否かを複数のジョブリクエストのそれぞれ毎に制御する制御コードを、アプリケーションプログラムの各ステージに挿入させることができる。なお、マスクベクトルの詳細な内容については、図６を参照して説明する。
【００４４】
続いて、ステップＳ１０５において、多重化部４８は、アプリケーションプログラム中のサーバ処理要求以外の処理を実行する処理コードを、複数のジョブリクエストに対応する複数の処理をそれぞれ実行する多重処理コードに変換する。本実施形態においては、多重化部４８は、プログラムステージに記述されたコードを、多重処理コードに変換する。これにより、多重化部４８は、アプリケーションプログラムを、複数のジョブリクエストに応じた複数の処理を実行するプログラムに変換することができる。
【００４５】
多重化部４８は、一例として、各プログラムステージの処理コードを一括処理すべきジョブリクエストの数だけループさせるコードを、アプリケーションプログラムに挿入してよい。さらに、多重化部４８は、一例として、各プログラムステージに含まれるベクトル変数のインデックスを指定する値を、ループ毎に順次にシフトさせるコードを、アプリケーションプログラムに挿入してよい。
【００４６】
さらに、ステップＳ１０５において、多重化部４８は、マスクベクトルにより指定されたジョブリクエストについてのみ当該プログラムステージを実行させる制御コードを、アプリケーションプログラムに挿入する。これにより、多重化部４８は、アプリケーションプログラムを、対応するジョブリクエストについてのみ当該プログラムステージを実行させるプログラムに変換することができる。
【００４７】
続いて、ステップＳ１０６において、サイドエフェクト検出部５０は、アプリケーションプログラムから、他のジョブリクエストの処理結果に影響を与える処理を実行するコードを検出する。他のジョブリクエストの処理結果に影響を与える処理は、一例として、サイドエフェクトを発生させるＡＰＩまたはライブラリを呼び出す処理およびデータの入出力処理等であってよい。サイドエフェクト検出部５０は、一例として、アプリケーションプログラム中の各コードと、ユーザによりサイドエフェクトを発生させる（またはその可能性のある）として予め登録されたコードとを比較することにより、該当するコード検出してよい。
【００４８】
さらに、アプリケーションプログラムは、サーバ処理要求として、データベースサーバ１４に対して行なったサーバ処理要求をロールバックさせるロールバック要求を含む場合がある。この場合、サイドエフェクト検出部５０は、いずれかのジョブリクエストについてロールバック要求を発行するコードを、他のジョブリクエストの処理結果に影響を与える処理を実行するコードとして検出する。
【００４９】
続いて、ステップＳ１０７において、ロールバック挿入部５２は、サイドエフェクト検出部５０において検出されたコードの前段に、複数のジョブリクエストの全てについて行なった全てのサーバ処理要求をロールバックさせるロールバック要求を発行するコードを、アプリケーションプログラムに挿入する。すなわち、ロールバック挿入部５２は、一例として、サイドエフェクトを発生させるＡＰＩまたはライブラリを呼び出す処理およびデータの入出力処理を実行するコードの前段に、ロールバック要求を発行するコードを挿入してよい。
【００５０】
また、ロールバック挿入部５２は、一例として、いずれかのジョブリクエストに応じてロールバック要求を発行すべきことを条件として、ロールバック要求を発行するコードを挿入してよい。これにより、ロールバック挿入部５２は、アプリケーションプログラムを、いずれか一のジョブリクエストに応じて他のジョブリクエストの処理結果に影響を与える処理がされるべき場合において、当該処理が実行される前に、複数のジョブリクエストに応じてこれまで行った処理を全てロールバックするプログラムに変換することができる。
【００５１】
続いて、ステップＳ１０８において、再呼出挿入部５４は、ロールバック挿入部５２がロールバック要求を発行するコードを挿入する場合、複数のジョブリクエストのそれぞれに応じてアプリケーションプログラムを個別に呼び出すコードを、当該アプリケーションプログラムに挿入する。これにより、ロールバック挿入部５２および再呼出挿入部５４は、アプリケーションプログラムを、複数のジョブリクエストについて互いに整合性のある処理結果を確実に出力するプログラムに変換することができる。
【００５２】
続いて、ステップＳ１０９において、一括化処理部５６は、アプリケーションプログラムにおける、他サーバへ処理を要求するサーバ処理要求を発行するアクセス要求コードを、複数のジョブリクエストに対応する複数のサーバ処理要求を一括して発行する一括アクセス要求コードに変換する。本実施形態においては、一括化処理部５６は、ＳＱＬステージに記述されたコードを一括アクセス要求コードに変換する。
【００５３】
より具体的には、例えば、アプリケーションプログラムが、サーバ処理要求として、データベースサーバ１４への処理要求を発行するクエリを含む場合がある。この場合、一括化処理部５６は、一例として、アプリケーションプログラム中のクエリを発行するコードを、複数のジョブリクエストに対応する複数のクエリを列挙して一つの記述にまとめた一の一括アクセス要求コードに変換してよい。これにより、一括化処理部５６は、データベースサーバ１４が複数のクエリを処理することに伴うオーバーヘッドを少なくしたプログラムを生成することができる。
【００５４】
また、これに代えて、一括化処理部５６は、一例として、アプリケーションプログラム中のクエリを発行するコードを、複数のジョブリクエストに対応する複数のクエリを合成した一の合成クエリを発行するコードに変換してもよい。これにより、一括化処理部５６は、データベースサーバ１４におけるクエリに対する実行回数を減らしたオーバーヘッドのより少ないプログラムを生成することができる。
【００５５】
さらに、アプリケーションプログラムに含まれるクエリを発行するコードが一のデータベーステーブルをアクセスするＳＥＬＥＣＴステートメントにより記述されている場合がある。この場合、一括化処理部５６は、一例として、合成クエリを発行するコードを、複数のジョブリクエストに対応する複数のＷＨＥＲＥ条件の和集合（ＯＲ演算による集合）がＷＨＥＲＥ条件とされたＳＥＬＥＣＴステートメントにより記述してよい。さらに、ジョブリクエスト同士でＷＨＥＲＥ条件が同一の場合には、一括化処理部５６は、一例として、ＷＨＥＲＥ条件を１つにまとめてもよい。
【００５６】
そして、以上の合成クエリを生成する場合において、一括化処理部５６は、合成クエリのクエリ結果を、複数のジョブリクエストのそれぞれに対応するＷＨＥＲＥ条件により再評価して、再評価した結果を複数のジョブリクエストのそれぞれのクエリ結果に代入するコードを、アプリケーションプログラムに挿入する。なお、合成クエリのクエリ結果を、複数のジョブリクエストのクエリ結果に代入する処理時間が予め定められた時間より長い場合、一括化処理部５６は、一例として、アプリケーションプログラムに含まれるクエリを発行するコードを、複数のクエリを列挙して一つの記述にまとめた一括アクセス要求コードに変換してよい。また、複数のジョブリクエストに対応する複数のクエリが全て同一となる場合には、一括化処理部５６は、一例として、一のジョブリクエストに対応する一のクエリ結果を、複数のジョブリクエストの全てのクエリ結果に代入するコードを、アプリケーションプログラムに挿入してよい。
【００５７】
さらに、ステップＳ１０９において、一括化処理部５６は、マスクベクトルにより指定されたジョブリクエストについてのみ当該ＳＱＬステージを実行させる制御コードを、アプリケーションプログラムに挿入する。これにより、一括化処理部５６は、アプリケーションプログラムを、対応するジョブリクエストについてのみ当該ＳＱＬステージを実行させるプログラムに変換することができる。
【００５８】
以上の一括化処理部５６は、アプリケーションプログラムを、複数のジョブリクエストに応じた複数のサーバ処理要求を一のコードにまとめて発行するプログラムに変換することができる。これにより、一括化処理部５６は、複数のジョブリクエスト毎に行われる複数のサーバ処理要求に含まれるオーバーヘッドを少なくして、システム全体のスループットを向上させたオンライントランザクション処理を実現するプログラムを生成することができる。
【００５９】
続いて、ステップＳ１１０において、実行順変更部５８は、ロールバック要求を含むコードがより早く実行されるように、アプリケーションプログラムのステージを並べ替える。これにより、実行順変更部５８は、複数のアプリケーションプログラムを呼び出す場合において計算量を最小にしたプログラムを生成することができる。
【００６０】
また、さらに、実行順変更部５８は、データベースサーバ１４に対して要求したこれまでの処理をデータベースレコードに反映させる反映要求（Ｃｏｍｍｉｔ）を含むコードがより遅く実行されるように、アプリケーションプログラムのステージを並べ替える。実行順変更部５８は、一例として、反映要求を含むコードを含むステージ以外に実行可能なステージが存在しない場合に、反映要求を含むコードが実行されるように、ステージを並べ替えてよい。
【００６１】
なお、ステップＳ１１０において、実行順変更部５８は、実行順が矛盾しない範囲でステージを並べ替える。すなわち、実行順変更部５８は、複数のステージのそれぞれが、当該ステージより前に実行されるべき他のステージが全て実行された後に実行される範囲で、ステージを並べ替える。
【００６２】
続いて、ステップＳ１１１において、出力部３６は、ステップＳ１０２〜ステップＳ１１０の各ステップにおいて処理された後のアプリケーションプログラムを、一括処理プログラムとして出力する。すなわち、出力部３６は、変数変換部４４、マスクベクトル挿入部４６、多重化部４８、ロールバック挿入部５２、再呼出挿入部５４、一括化処理部５６および実行順変更部５８によりコードの変換、挿入および並べ替え等の処理がされた後のアプリケーションプログラムを、一括処理プログラムとして出力する。
【００６３】
以上のように、変換装置２０は、既存のアプリケーションプログラム（すなわち、複数のジョブリクエストに応じて複数回実行されるアプリケーションプログラム）を、複数のトランザクションをオンラインで一括して実行する一括処理プログラムを変換することができる。これにより、変換装置２０によれば、より少ない開発負担により一括処理プログラムを生成することができる。
【００６４】
図６は、６個のステージ（ステージ１〜６）を有するアプリケーションプログラムにおける各ステージの実行順序の流れ、および、６個のステージのそれぞれに対して生成されるマスクベクトル（ｍａｓｋ１〜ｍａｓｋ６）の一例を示す。なお、図６に示されたマスクベクトルは、４つのジョブリクエストのそれぞれに対応した４つのインデックスのそれぞれに、当該ステージを実行するか否かを示す値（１または０）を格納する。
【００６５】
マスクベクトル挿入部４６は、一例として、先頭のステージのマスクベクトルとして、一括処理すべき複数のジョブリクエストの全てが当該ステージを実行することを指定するマスクベクトルを生成するコードを、アプリケーションプログラムに挿入してよい。図６に示す場合であれば、マスクベクトル挿入部４６は、先頭ステージであるステージ１のマスクベクトル（ｍａｓｋ１）の全インデックスに、当該ステージを実行することを示す値（１）を格納するコードを、アプリケーションプログラムに挿入する。
【００６６】
また、一のステージの次に次ステージが実行される場合であって、一のステージから複数の他のステージへ分岐すること無く、且つ、複数の他のステージが次のステージへ合流すること無い場合がある（一のステージのイグジットポイントおよび次のステージのエントリポイントが共に一つの関係）。このような場合、マスクベクトル挿入部４６は、一例として、一のステージのマスクベクトルの各インデックスの値を次のステージのマスクベクトルの各インデックスの値としてそのまま引き継がせるコードを、アプリケーションプログラムに挿入してよい。
【００６７】
図６に示すアプリケーションプログラムの場合、ステージ１（一のステージ）とステージ２（次ステージ）との関係が、上記の一のステージのイグジットポイントおよび次のステージのエントリポイントが共に一つの関係に該当する。従って、図６に示すアプリケーションプログラムの場合、マスクベクトル挿入部４６は、ステージ１のマスクベクトル（ｍａｓｋ１）の各インデックスの値を、ステージ２のマスクベクトル（ｍａｓｋ２）の各インデックスの値としてそのまま引き継がせるコードを、アプリケーションプログラムに挿入してよい。
【００６８】
また、アプリケーションプログラムにおいて、一のステージの次に実行されるべき複数の次ステージが存在する場合がある（一のステージのイグジットポイントが複数存在する場合の一のステージと次ステージとの関係）。図６に示す例においては、マスクベクトル挿入部４６は、一例として、一のステージのマスクベクトルのインデックス毎に、当該インデックスの値を複数の次ステージのいずれか一のマスクベクトルにおける対応するインデックスの値として引き継がされるコードを、アプリケーションプログラムに挿入してよい。
【００６９】
図６に示すアプリケーションプログラムの場合、ステージ２（一のステージ）とステージ３およびステージ４（複数の次ステージ）との関係が、上記の一のステージのイグジットポイントが複数存在する場合の一のステージと次ステージとの関係に該当する。図６に示す例においては、ステージ２のマスクベクトル（ｍａｓｋ２）の１番目および４番目のインデックスの値を、ステージ３のマスクベクトル（ｍａｓｋ３）の１番目および４番目のインデックスが引き継いでいる。また、ステージ２のマスクベクトル（ｍａｓｋ２）の２番目および３番目のインデックスの値を、ステージ４のマスクベクトル（ｍａｓｋ４）の２番目および３番目のインデックスが引き継いでいる。
【００７０】
また、アプリケーションプログラムにおいて、直前に実行されるべきステージとして、複数の前ステージが存在する場合がある（エントリポイントが複数存在する当該ステージと、直前のステージとの関係）。このような場合、マスクベクトル挿入部４６は、一例として、複数の前ステージのそれぞれから値が引き渡される当該ステージの複数のマスクベクトルを、インデックス毎にＯＲ演算して当該ステージのマスクベクトルを生成するコードを、アプリケーションプログラムに挿入してよい。
【００７１】
図６に示すアプリケーションプログラムの場合、ステージ５（一のステージ）とステージ３およびステージ４（複数の前ステージ）の関係が、上記の一のステージのエントリポイントが複数存在する場合の一のステージと前ステージとの関係に該当する。この例では、マスクベクトル挿入部４６は、ステージ３およびステージ４から引き渡されたステージ５のマスクベクトル（ｍａｓｋ５（３）、ｍａｓｋ５（４））をインデックス毎にＯＲ演算して、ステージ５のマスクベクトル（ｍａｓｋ５）を生成するコードを、アプリケーションプログラムに挿入する。
【００７２】
以上のように、マスクベクトル挿入部４６は、それぞれのステージのマスクベクトルを生成するコードをアプリケーションプログラムに挿入する。これにより、一括処理プログラムは、複数のジョブリクエストに対応する複数の処理が矛盾なく実行されるように制御することができる。
【００７３】
図７は、擬似コードにより記述されたアプリケーションプログラムの一例を示す。図８は、図７に示されたアプリケーションプログラムを、ステージ毎に分割した一例を示す。
【００７４】
図７の例のアプリケーションプログラムは、 ａｃｃｏｕｎｔ＿ｔａｂｌｅテーブルのｓｒｃ＿ａｃｃｏｕｎｔレコードから、ａｃｃｏｕｎｔ＿ｔａｂｌｅテーブルのｄｓｔ＿ａｃｃｏｕｎｔレコードへ、ａｍｏｕｎｔを転送する処理を実行する。そして、図７の例のアプリケーションプログラムは、ｓｒｃ＿ａｃｃｏｕｎｔレコードの値（ｂａｌａｎｃｅ）が負になる場合には、これまでの処理をロールバックして、エラー処理を実行する。一方、ｓｒｃ＿ａｃｃｏｕｎｔレコードの値（ｂａｌａｎｃｅ）が負にならない場合には、これまでの処理をデータベースに反映して、成功処理を実行する。
【００７５】
具体的には、ステージ２において、ｓｒｃ＿ａｃｃｏｕｎｔレコードのａｃｃｏｕｎｔフィールドの値（ｂａｌａｎｃｅ）から、ａｍｏｕｎｔを減算して、更新する。続いて、ステージ３において、ｄｓｔ＿ａｃｃｏｕｎｔレコードのａｃｃｏｕｎｔフィールドの値（ｂａｌａｎｃｅ）に、ａｍｏｕｎｔを加算して、更新する。
【００７６】
続いて、ステージ４において、ｓｒｃ＿ａｃｃｏｕｎｔレコードのａｃｃｏｕｎｔフィールドの値（ｂａｌａｎｃｅ）をクエリにより読み出して、クエリ結果をｒｅｓｕｌｔに格納する。続いて、ステージ５において、ｒｅｓｕｌｔが０より小さいか否かを判断する。
【００７７】
続いて、ステージ６において、ｒｅｓｕｌｔが０より小さいことを条件として、データベースサーバ１４に対して要求したこれまでの処理をロールバックさせるロールバック要求を発行し、続くステージ７において、エラー処理を実行する。一方、ステージ８において、ｒｅｓｕｌｔが０より小さくないことを条件として、データベースサーバ１４に対して要求したこれまでの処理をデータベースレコードに反映させる反映要求を発行し、続くステージ９において、転送の成功処理を実行する。
【００７８】
図９、図１０および図１１は、図７に示されたアプリケーションプログラムから変換された一括処理プログラムの一例を示す。図９は、ステージ１〜３の記述、図１０は、ステージ４〜５の記述、図１１はステージ６〜９の記述を示す。
【００７９】
ステージ２およびステージ３は、ＳＱＬステージの一例を示す。ステージ２およびステージ３には、複数のジョブリクエストに対応する複数のクエリを列挙して一つの記述にまとめた一の一括アクセス要求コードが記述されている。また、ステージ２およびステージ３には、ベクトル変数（ｓｒｃ＿ａｃｃｏｕｎｔ［ｉ］、ｄｓｔ＿ａｃｃｏｕｎ［ｉ］、ａｍｏｕｎｔ［ｉ］）が記述されている。
【００８０】
ステージ４は、ＳＱＬステージの一例を示す。ステージ４には、複数のジョブリクエストに対応する複数のクエリを合成した一の合成クエリを発行するコードが記述されている。より詳しくは、ステージ４には、複数のジョブリクエストに対応する複数のＷＨＥＲＥ条件の和集合（ＯＲ演算による集合）がＷＨＥＲＥ条件とされたＳＥＬＥＣＴステートメントにより記述された合成クエリを発行するコードが記述されている。
【００８１】
ステージ５は、プログラムステージの一例を示す。ステージ６は、ＳＱＬステージの一例を示す。
【００８２】
ステージ６には、ロールバック要求を発行するコードが記述されている。ステージ５には、複数のジョブリクエストのうちいずれか一でもステージ６のコードを実行する条件が成立した場合、ステージ６へジャンプして、全てのジョブリクエストについて処理をロールバックするコードが記述されている。より詳しくは、ステージ５には、ＲｅｓｕｌｔＬｏｏｋｕｐ（）関数を用いて、合成クエリのクエリ結果を、複数のジョブリクエストのそれぞれに対応するＷＨＥＲＥ条件により再評価して、再評価した結果を複数のジョブリクエストのそれぞれのクエリ結果に代入するコードが記述されている。すなわち、図７のアプリケーションプログラムでの各ジョブリクエストのＷＨＥＲＥ条件がａｃｃｏｕｎｔであるので、ステージ５には、合成クエリのクエリ結果の中から各ジョブリクエストに対応するａｃｃｏｕｎｔを有するレコードを選択するコードが記述されている。
【００８３】
ステージ７は、プログラムステージの一例を示す。ステージ７には、ロールバックした場合に実行するフェイル処理を実行するコードが記述されている。より詳しくは、ステージ７には、複数のジョブリクエストのそれぞれに応じてアプリケーションプログラムを個別に呼び出して実行するコードが記述されている。
【００８４】
ステージ８は、ＳＱＬステージの一例を示す。ステージ８には、要求したこれまでの処理をデータベースレコードに反映させる反映要求（Ｃｏｍｍｉｔ）を実行するコードが記述されている。
【００８５】
ステージ９は、プログラムステージの一例を示す。ステージ９には、複数のジョブリクエストに対して行った処理が全て成功した場合の成功処理を実行するコードが記述されている。ステージ９には、この成功処理を全てのジョブリクエストについて実行させるコードが記述されている。
【００８６】
図１２は、本実施形態に係るコンピュータ１９００のハードウェア構成の一例を示す。本実施形態に係るコンピュータ１９００は、ホスト・コントローラ２０８２により相互に接続されるＣＰＵ２０００、ＲＡＭ２０２０、グラフィック・コントローラ２０７５、及び表示装置２０８０を有するＣＰＵ周辺部と、入出力コントローラ２０８４によりホスト・コントローラ２０８２に接続される通信インターフェイス２０３０、ハードディスクドライブ２０４０、及びＣＤ−ＲＯＭドライブ２０６０を有する入出力部と、入出力コントローラ２０８４に接続されるＲＯＭ２０１０、フレキシブルディスク・ドライブ２０５０、及び入出力チップ２０７０を有するレガシー入出力部とを備える。
【００８７】
ホスト・コントローラ２０８２は、ＲＡＭ２０２０と、高い転送レートでＲＡＭ２０２０をアクセスするＣＰＵ２０００及びグラフィック・コントローラ２０７５とを接続する。ＣＰＵ２０００は、ＲＯＭ２０１０及びＲＡＭ２０２０に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィック・コントローラ２０７５は、ＣＰＵ２０００等がＲＡＭ２０２０内に設けたフレーム・バッファ上に生成する画像データを取得し、表示装置２０８０上に表示させる。これに代えて、グラフィック・コントローラ２０７５は、ＣＰＵ２０００等が生成する画像データを格納するフレーム・バッファを、内部に含んでもよい。
【００８８】
入出力コントローラ２０８４は、ホスト・コントローラ２０８２と、比較的高速な入出力装置である通信インターフェイス２０３０、ハードディスクドライブ２０４０、ＣＤ−ＲＯＭドライブ２０６０を接続する。通信インターフェイス２０３０は、ネットワークを介して他の装置と通信する。ハードディスクドライブ２０４０は、コンピュータ１９００内のＣＰＵ２０００が使用するプログラム及びデータを格納する。ＣＤ−ＲＯＭドライブ２０６０は、ＣＤ−ＲＯＭ２０９５からプログラム又はデータを読み取り、ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供する。
【００８９】
また、入出力コントローラ２０８４には、ＲＯＭ２０１０と、フレキシブルディスク・ドライブ２０５０、及び入出力チップ２０７０の比較的低速な入出力装置とが接続される。ＲＯＭ２０１０は、コンピュータ１９００が起動時に実行するブート・プログラム、及び／又は、コンピュータ１９００のハードウェアに依存するプログラム等を格納する。フレキシブルディスク・ドライブ２０５０は、フレキシブルディスク２０９０からプログラム又はデータを読み取り、ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供する。入出力チップ２０７０は、フレキシブルディスク・ドライブ２０５０を入出力コントローラ２０８４へと接続すると共に、例えばパラレル・ポート、シリアル・ポート、キーボード・ポート、マウス・ポート等を介して各種の入出力装置を入出力コントローラ２０８４へと接続する。
【００９０】
ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供されるプログラムは、フレキシブルディスク２０９０、ＣＤ−ＲＯＭ２０９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、記録媒体から読み出され、ＲＡＭ２０２０を介してコンピュータ１９００内のハードディスクドライブ２０４０にインストールされ、ＣＰＵ２０００において実行される。
【００９１】
コンピュータ１９００にインストールされ、コンピュータ１９００を変換装置２０として機能させるプログラムは、入力モジュールと、出力モジュールと、記憶モジュールと、コード識別モジュールと、変数変換モジュールと、マスクベクトル処理モジュールと、多重化モジュールと、サイドエフェクト検出モジュールと、ロールバック挿入モジュールと、再呼出挿入モジュールと、一括化処理モジュールと、実行順変更モジュールとを備える。これらのプログラム又はモジュールは、コンピュータ１９００の通信インターフェイス２０３０等を入力部３２および出力部３６として機能される。また、これらのプログラム又はモジュールは、コンピュータ１９００のＲＡＭ２０２０等を記憶装置３４として機能される。また、これらのプログラム又はモジュールは、コンピュータ１９００のＣＰＵ２０００を、コード識別部４２、変数変換部４４、マスクベクトル挿入部４６、多重化部４８、サイドエフェクト検出部５０、ロールバック挿入部５２、再呼出挿入部５４、一括化処理部５６および実行順変更部５８としてそれぞれ機能させる。
【００９２】
これらのプログラムに記述された情報処理は、コンピュータ１９００に読込まれることにより、ソフトウェアと上述した各種のハードウェア資源とが協働した具体的手段である入力部３２、記憶装置３４、出力部３６、コード識別部４２、変数変換部４４、マスクベクトル挿入部４６、多重化部４８、サイドエフェクト検出部５０、ロールバック挿入部５２、再呼出挿入部５４、一括化処理部５６および実行順変更部５８として機能する。そして、これらの具体的手段によって、本実施形態におけるコンピュータ１９００の使用目的に応じた情報の演算又は加工を実現することにより、使用目的に応じた特有の変換装置２０が構築される。
【００９３】
一例として、コンピュータ１９００と外部の装置等との間で通信を行う場合には、ＣＰＵ２０００は、ＲＡＭ２０２０上にロードされた通信プログラムを実行し、通信プログラムに記述された処理内容に基づいて、通信インターフェイス２０３０に対して通信処理を指示する。通信インターフェイス２０３０は、ＣＰＵ２０００の制御を受けて、ＲＡＭ２０２０、ハードディスクドライブ２０４０、フレキシブルディスク２０９０、又はＣＤ−ＲＯＭ２０９５等の記憶装置上に設けた送信バッファ領域等に記憶された送信データを読み出してネットワークへと送信し、もしくは、ネットワークから受信した受信データを記憶装置上に設けた受信バッファ領域等へと書き込む。このように、通信インターフェイス２０３０は、ＤＭＡ（ダイレクト・メモリ・アクセス）方式により記憶装置との間で送受信データを転送してもよく、これに代えて、ＣＰＵ２０００が転送元の記憶装置又は通信インターフェイス２０３０からデータを読み出し、転送先の通信インターフェイス２０３０又は記憶装置へとデータを書き込むことにより送受信データを転送してもよい。
【００９４】
また、ＣＰＵ２０００は、ハードディスクドライブ２０４０、ＣＤ−ＲＯＭドライブ２０６０（ＣＤ−ＲＯＭ２０９５）、フレキシブルディスク・ドライブ２０５０（フレキシブルディスク２０９０）等の外部記憶装置に格納されたファイルまたはデータベース等の中から、全部または必要な部分をＤＭＡ転送等によりＲＡＭ２０２０へと読み込ませ、ＲＡＭ２０２０上のデータに対して各種の処理を行う。そして、ＣＰＵ２０００は、処理を終えたデータを、ＤＭＡ転送等により外部記憶装置へと書き戻す。このような処理において、ＲＡＭ２０２０は、外部記憶装置の内容を一時的に保持するものとみなせるから、本実施形態においてはＲＡＭ２０２０および外部記憶装置等をメモリ、記憶部、または記憶装置等と総称する。本実施形態における各種のプログラム、データ、テーブル、データベース等の各種の情報は、このような記憶装置上に格納されて、情報処理の対象となる。なお、ＣＰＵ２０００は、ＲＡＭ２０２０の一部をキャッシュメモリに保持し、キャッシュメモリ上で読み書きを行うこともできる。このような形態においても、キャッシュメモリはＲＡＭ２０２０の機能の一部を担うから、本実施形態においては、区別して示す場合を除き、キャッシュメモリもＲＡＭ２０２０、メモリ、及び／又は記憶装置に含まれるものとする。
【００９５】
また、ＣＰＵ２０００は、ＲＡＭ２０２０から読み出したデータに対して、プログラムの命令列により指定された、本実施形態中に記載した各種の演算、情報の加工、条件判断、情報の検索・置換等を含む各種の処理を行い、ＲＡＭ２０２０へと書き戻す。例えば、ＣＰＵ２０００は、条件判断を行う場合においては、本実施形態において示した各種の変数が、他の変数または定数と比較して、大きい、小さい、以上、以下、等しい等の条件を満たすかどうかを判断し、条件が成立した場合（又は不成立であった場合）に、異なる命令列へと分岐し、またはサブルーチンを呼び出す。
【００９６】
また、ＣＰＵ２０００は、記憶装置内のファイルまたはデータベース等に格納された情報を検索することができる。例えば、第１属性の属性値に対し第２属性の属性値がそれぞれ対応付けられた複数のエントリが記憶装置に格納されている場合において、ＣＰＵ２０００は、記憶装置に格納されている複数のエントリの中から第１属性の属性値が指定された条件と一致するエントリを検索し、そのエントリに格納されている第２属性の属性値を読み出すことにより、所定の条件を満たす第１属性に対応付けられた第２属性の属性値を得ることができる。
【００９７】
以上に示したプログラム又はモジュールは、外部の記録媒体に格納されてもよい。記録媒体としては、フレキシブルディスク２０９０、ＣＤ−ＲＯＭ２０９５の他に、ＤＶＤ又はＣＤ等の光学記録媒体、ＭＯ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワーク又はインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムをコンピュータ１９００に提供してもよい。
【００９８】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【図面の簡単な説明】
【００９９】
【図１】図１は、本実施形態に係るサーバシステム１０の構成を示す。
【図２】図２は、サーバシステム１０の処理フローを示す。
【図３】図３は、図２に示されたステップＳ１６において一括処理プログラムを呼び出した場合の、サーバシステム１０の処理フローを示す。
【図４】図４は、本実施形態に係る変換装置２０の構成を示す。
【図５】図５は、変換装置２０による処理フローを示す。
【図６】図６は、６個のステージ（ステージ１〜６）を有するアプリケーションプログラムにおける各ステージの実行順序の流れ、および、６個のステージのそれぞれに対して生成されるマスクベクトル（ｍａｓｋ１〜ｍａｓｋ６）の一例を示す。
【図７】図７は、擬似コードにより記述されたアプリケーションプログラムの一例を示す。
【図８】図８は、図７に示されたアプリケーションプログラムを、ステージ毎に分割した例を示す。
【図９】図９は、図７に示されたアプリケーションプログラムから変換された一括処理プログラムのステージ１〜３の記述の一例を示す。
【図１０】図１０は、図７に示されたアプリケーションプログラムから変換された一括処理プログラムのステージ４〜５の記述の一例を示す。
【図１１】図１１は、図７に示されたアプリケーションプログラムから変換された一括処理プログラムのステージ６〜９の記述の一例を示す。
【図１２】本発明の実施形態に係るコンピュータ１９００のハードウェア構成の一例を示す。
【符号の説明】
【０１００】
１０  サーバシステム
１２  アプリケーションサーバ
１４  データベースサーバ
２０  変換装置
２２  ジョブ蓄積部
２４  一括処理プログラム格納部
２６  アプリケーションプログラム格納部
２８  実行部
３２  入力部
３４  記憶装置
３６  出力部
３８  演算処理装置
４２  コード識別部
４４  変数変換部
４６  マスクベクトル挿入部
４８  多重化部
５０  サイドエフェクト検出部
５２  ロールバック挿入部
５４  再呼出挿入部
５６  一括化処理部
５８  実行順変更部
１９００  コンピュータ
２０００  ＣＰＵ
２０１０  ＲＯＭ
２０２０  ＲＡＭ
２０３０  通信インターフェイス
２０４０  ハードディスクドライブ
２０５０  フレキシブルディスク・ドライブ
２０６０  ＣＤ−ＲＯＭドライブ
２０７０  入出力チップ
２０７５  グラフィック・コントローラ
２０８０  表示装置
２０８２  ホスト・コントローラ
２０８４  入出力コントローラ
２０９０  フレキシブルディスク
２０９５  ＣＤ−ＲＯＭ
【図１】
0005181183.tif 000002
【図２】
0005181183.tif 000003
【図３】
0005181183.tif 000004
【図４】
0005181183.tif 000005
【図５】
0005181183.tif 000006
【図６】
0005181183.tif 000007
【図７】
0005181183.tif 000008
【図８】
0005181183.tif 000009
【図９】
0005181183.tif 000010
【図１０】
0005181183.tif 000011
【図１１】
0005181183.tif 000012
【図１２】
0005181183.tif 000013