(57)【特許請求の範囲】
【請求項１】
トランザクション制御機構を備えた記憶装置であるデータベースのトランザクションを少なくとも開始およびコミットする実行管理部と、
実行するプログラムの中の前記データベース操作の記述を前記実行管理部が開始したトランザクションの下で行うようプログラムを解釈実行するインタプリタ部と、
このインタプリタ部によって生成され変更されるプログラムの実行状態とこのプログラムの記述内容からプログラム実行によって変更された実行状態範囲を推測し、既に保存されている実行状態のうち変更された範囲のみを更新のために前記実行管理部が開始したトランザクションの下でデータベースに保存する保存手段と、
プログラムに記述されたデータベース操作の実行と前記データベースに保存されたプログラム自身の実行状態を用いて障害発生後にプログラムの実行状態を復旧させる実行状態復旧手段
とを具備することを特徴とする永続プログラム実行装置。
【請求項２】
一つあるいは複数のインタプリタ部と、一つあるいは複数の実行状態保存部と、プログラムとインタプリタ部、実行状態保存部の関係を保持するインタプリタ情報テーブルとを備え、
前記実行管理部がプログラムの記述方式に応じて適切なインタプリタ部と実行状態保存部を選択することで、複数の異なる記述方式で記述されたプログラムを実行可能なことを特徴とする請求項１記載の永続プログラム実行装置。
【請求項３】
前記インタプリタ部と同等の処理を行うネイティブコードを出力するコンパイラと、
インタプリタ部の一つであって、プログラムとして前記コンパイラから出力されたネイティブコードが指定されると、前記ネイティブコードを直接呼び出すネイティブコードの呼出し機構
とを具備することを特徴とする請求項２記載の永続プログラム実行装置。
【請求項４】
複数の異なる記述形式を解釈実行するための複数の異なるインタプリタ部を持ち、各々のインタプリタがプログラムの実行状態を共通のフォーマットに変換することで、一つの実行状態保存部で複数のインタプリタの実行状態を保存することを特徴とする請求項１記載の永続プログラム実行装置。
【請求項５】
前記インタプリタ部が、プログラムの、単一トランザクションで制御可能な複数のデータベースやデータベース以外のリソースの操作の記述を、前記実行管理部が管理するトランザクションの下で処理することを特徴とする請求項１記載の永続プログラム実行装置。
【請求項６】
前記実行管理部が、プログラム実行状態の参照テーブルを持ち、実行状態を普段はメモリ上から削除しておき、必要になった時のみ実行状態がメモリ上にあるか否かをチェックし、無ければ実行状態保存部から該当する実行状態をメモリ上に読み込み、必要が無くなれば再びメモリ上から削除することを特徴とする請求項１記載の永続プログラム実行装置。
【請求項７】
前記インタプリタ部が、実行前にプログラムを解析して一度のトランザクションで実行すべきプログラム範囲を決定し、一度の実行管理部からの実行指示で決定範囲のみを実行することを特徴とする請求項１記載の永続プログラム実行装置。
【請求項８】
データベース操作のトランザクションを開始するトランザクション開始ステップと、
データベース操作の記述を含むプログラム中のデータベース操作の記述をトランザクションの中で行うようプログラムを解釈実行するプログラム解釈実行ステップと、
プログラムの実行状態とこのプログラムの記述内容からプログラム実行によって変更された実行状態の範囲を推測し、既に保存されている実行状態のうち変更された範囲のみを更新のためにデータベースに保存する保存ステップと、
トランザクションをコミットするコミットステップと、
前記プログラムに記述されたデータベース操作の実行と前記データベースに保存されたプログラム自身の実行状態を用いて障害発生後にプログラムの実行状態を復旧させる実行状態復旧ステップ
とを具備することを特徴とする永続プログラム実行方法。
【請求項９】
実行するプログラムの種類に応じてプログラムの解釈実行と実行状態の保存に使用する手段を選択する選択ステップを持ち、前記選択ステップで選択された手段を前記プログラム解釈実行ステップと前記プログラムの実行状態をデータベースに保存する保存ステップで使用することで、複数の異なる記述方式で記述されたプログラムを実行可能にすることを特徴とする請求項８記載の永続プログラム実行方法。
【請求項１０】
実行すべきプログラムの実行状態を選択する実行状態選択ステップと、この実行状態選択ステップで選択したプログラムの実行状態が所定のメモリ上に格納されているか否かを調べる格納有無判別ステップと、この格納有無判別ステップで選択したプログラム実行状態がデータベースに保存されていないと判別されたときそのプログラム実行状態を前記保存ステップで保存した保存先から読み込む読込みステップが前記プログラム解釈実行ステップの処理よりも前に行われ、かつ前記トランザクションをコミットするコミットステップの後に保存したプログラム実行状態を前記メモリ上から削除する削除ステップの処理が行われることを特徴とする請求項８記載の永続プログラム実行方法。
【請求項１１】
前記プログラムの解釈実行を行うプログラム解釈実行ステップが、プログラムの１トランザクションでの実行範囲を決定する実行範囲決定ステップと、この実行範囲決定ステップで決定された実行範囲のみを解釈実行する実行範囲実行ステップとを備えることを特徴とする請求項８記載の永続プログラム実行方法。
【請求項１２】
コンピュータに、
データベース操作のトランザクションを開始するトランザクション開始処理と、
データベース操作の記述を含むプログラム中のデータベース操作の記述をトランザクションの中で行うようプログラムを解釈実行するプログラム解釈実行処理と、
プログラムの実行状態とこのプログラムの記述内容からプログラム実行によって変更された実行状態の範囲を推測し、既に保存されている実行状態のうち変更された範囲のみを更新のためにデータベースに保存する保存処理と、
トランザクションをコミットするコミット処理と、
前記プログラムに記述されたデータベース操作の実行と前記データベースに保存されたプログラム自身の実行状態を用いて障害発生後にプログラムの実行状態を復旧させる実行状態復旧処理
とを実行させることを特徴とする永続プログラム実行プログラム。
【請求項１３】
実行すべきプログラムの実行状態を選択する実行状態選択処理と、この実行状態選択処理で選択したプログラムの実行状態が所定のメモリ上に格納されているか否かを調べる格納有無判別処理と、この格納有無判別処理で選択したプログラム実行状態がデータベースに保存されていないと判別されたときそのプログラム実行状態を前記保存処理で保存した保存先から読み込む読込み処理の各実行が前記プログラム解釈実行処理の実行よりも前に行われ、かつ前記トランザクションをコミットするコミット処理の実行後に保存したプログラム実行状態を前記メモリ上から削除する削除処理が実行されることを特徴とする請求項１２記載の永続プログラム実行プログラム。
【請求項１４】
前記プログラムの解釈実行を行うプログラム解釈実行処理の実行が、プログラムの１トランザクションでの実行範囲を決定する実行範囲決定処理と、この実行範囲決定処理で決定された実行範囲のみを解釈実行する実行範囲実行処理によって少なくとも実行されることを特徴とする請求項１２記載の永続プログラム実行プログラム。
【請求項１５】
コンピュータに、
データベース操作のトランザクションを管理する実行管理処理と、
実行するプログラムの中の前記データベース操作の記述を前記実行管理処理で管理するトランザクションの下で行うようプログラムを解釈実行するインタプリタ処理と、
このインタプリタ処理によって生成され変更されるプログラムの実行状態とこのプログラムの記述内容からプログラム実行によって変更された実行状態範囲を推測し、既に保存されている実行状態のうち変更された範囲のみを更新のために前記実行管理処理で管理するトランザクションの下でデータベースに保存する記憶処理と、
プログラムに記述されたデータベース操作の実行と前記記憶処理で前記データベースに保存されたプログラム自身の実行状態を用いて障害発生後にプログラムの実行状態を復旧させる実行状態復旧処理
とを実行させることを特徴とする永続プログラム実行プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラムの実行状態を外部記憶装置に保存しながら実行することによって、サーバ障害発生時にもプログラムの再開が可能となる永続プログラム実行装置ならびにこのような永続プログラム実行装置を実現するための永続プログラム実行方法および永続プログラム実行プログラムに関する。
【０００２】
【従来の技術】
近年、通信ネットワークの普及と共に、注文書や請求書などを紙の伝票を使わずに、異なる企業間で通信回線によってオンライン処理する電子取引が、活発化している。このような技術は、ＥＤＩ（Electoronic Data Interchange：電子データ交換）と呼ばれている。ＥＤＩに限らず、異なる部門や企業の持つシステム間で、非同期的なメッセージを自動的にやり取りして連携するために、部門や企業にまたがった疎結合の分散システムの構築が数多く行われている。
【０００３】
このような疎結合の分散システムでは、様々なメッセージをやり取りし、メッセージの内容に応じた処理を行う必要がある。やり取りされるメッセージとしては、たとえば商品の購入要求メッセージや購入をキャンセルするためのキャンセルメッセージを挙げることができる。メッセージの処理の例としては購入要求の内容に応じた商品の手配や、要求元への受注確認メッセージの送信などを挙げることができる。
【０００４】
従来、このようなメッセージやメッセージの内容に応じた処理は、電子メールやワークフロー管理システムなどを用いて人手を介して行われてきた。しかしながら、電子取引等の活発化や処理の高速化あるいは処理の効率化の要請から、これらのメッセージの送受信あるいは処理を人手を介さず自動化することが求められている。
【０００５】
一般に、自動処理を行うシステムあるいは装置を構築するためには、必要な処理をプログラムや類似の処理定義として記述し、実行する必要がある。しかしながら、特に商取引を中心とした領域では、このような処理の実行に高い信頼性が求められる。例えば、商品の購入要求を受け取ってその処理の実行中にシステム障害などが発生してその処理が停止してしまったような場合には、購入要求の内容が失われてしまい重大なトラブルに陥る危険性がある。
【０００６】
このような障害に対処するために、失われてはいけないデータを随時データベースやファイルシステムなどの外部記憶装置にバックアップとして格納するようにし、障害発生時に、これら保存されているデータを読み込んで、処理がどこまで行われたかを推測して続きの処理を行う手法が一般に採られている。しかしながら、このような手法を採用すると、処理内容やその実行状態が複雑な場合、障害発生時の処理の状態の推測やその後の処理の継続が困難であるという問題がある。
【０００７】
そこで、処理の実行状態であるプロセス自身を外部記憶装置に随時保存するようにして、障害発生時にはこの情報を用いてプロセス自身を再構築して処理を継続させるようにした永続プログラム技術が提案されている。例えば特開平１０−２３２８５５号公報では、ジョブと呼ぶ動作中のアプリケーションプログラムの実行状態を任意の時点で保存し、障害発生時などにこの保存情報を基にしてジョブを復元する技術を開示している。また、特開２００１−５６７９号公報では、仮想計算機上で動作するアプリケーションプログラムを、仮想計算機の実行状態として取り出して保存し、その保存データからアプリケーションの実行状態を回復する技術を提案している。
【０００８】
一方、通常のワークフロー管理装置では、プログラムの実行状態ではないが、業務に含まれる作業がどこまで行われたか、といったワークフローの実行状態を外部記憶装置などに保存している。例えば特開平８−１５３０６８号公報では、このようなワークフローの状態と外部アプリケーションの操作するデータベース処理を不可分に実行する手段を提供している。一般的にワークフロー管理システムでは人手を介さない自動処理も可能であり、一種の永続プログラムと見なすこともできる。
【０００９】
また、特開平５−０６１７４８号公報では、トランザクションを単位として処理を行うようにしており、アプリケーションプログラムがトランザクションの開始を示すと、各々のトランザクションに識別子が付与されて、メモリに書き込まれるようになっている。そして、アプリケーションプログラムから、トランザクション処理が成功したときに、その結果を確定させるためのコミットの要求が出されると、各アプリケーションプログラムごとに、データベース内に用意されたトランザクションログテーブルにトランザクション識別子が書き込まれる。トランザクションの完了後に障害が生じた場合（コミット後）には、トランザクションログテーブルの内容がデータベース管理システム（ＤＢＭＳ）によって保証されるため、このテーブル内にはトランザクション識別子の情報が残っている。したがって、この場合にはメモリの内容とトランザクションログテーブルの内容とが一致している。一方、トランザクション完了前に障害が発生した場合には、それらの情報はロールバック処理によって失われる。したがって、この後者の場合にはメモリの内容とトランザクションログテーブルの内容に不一致が生じる。
【００１０】
そこでこの特開平５−０６１７４８号公報に記載の技術では、データベースアクセス処理の一時的な中断からの再立ち上げ後にメモリ中に格納されているトランザクション識別子と、トランザクションログテーブル中に格納されているトランザクション識別子のそれぞれを参照するようにしている。そして、両者を比較して、メモリ中のトランザクション識別子とトランザクションログテーブル中のトランザクション識別子が同じである場合には、データベースアクセス処理を中断していた時点で実行されていたトランザクションの次のトランザクションを次に実行すべきトランザクションとして指定する。一方、メモリ中のトランザクション識別子とトランザクションログテーブル中のトランザクション識別子が異なる場合には、データベースアクセス処理を中断していた時点で実行されていたトランザクションを次に実行すべきトランザクションとして指定する。これにより、アプリケーションプログラム側からメモリやトランザクションログテーブルを参照することなく、アプリケーションプログラムとデータベース管理システムの同期確認を行うことができる。
【００１１】
【発明が解決しようとする課題】
以上説明したプログラムの実行状態を外部記憶装置に保存するようにした従来の永続プログラム実行装置、永続プログラム実行方法あるいは永続プログラム実行プログラムは幾つかの問題点を有している。
【００１２】
第一の問題点は、従来のプログラムの実行状態としてのプロセスを保存するようにした技術では、プロセスがプロセス外部に及ぼす影響、特にデータベースの操作を考慮していないという点である。データベースへのデータの格納は、障害発生時のデータの消失を防ぐだけでなく、検索機能の利用や他のシステムとのデータの共有などの意味からも有効である。したがって、プロセス自身が別の手段で永続化されていても不要になるものではない。
【００１３】
しかしながら、特開平１０−２３２８５５号公報や特開２００１−５６７９号公報に記載された従来技術ではプロセスの保存のみを行っている。このため、プログラムがデータベース操作の記述を含んでおり、実際にその操作が行われた後で、プロセスを保存する前にシステムが障害で停止してしまったような場合、後からプロセスのみを復旧すると、プロセスはデータベース操作前の状態で復旧してしまう。このため、本来１度であるべきデータベース操作が重複して行われてしまう恐れがある。
【００１４】
一方、特開平８−１５３０６８号公報に開示された技術では、ワークフロー管理システムとアプリケーションのデータベース操作の両者を管理するトランザクションマネージャを導入することで類似の問題に対処している。しかしながらこの技術は、ワークフローデスクトップやデータベースアプリケーションというプログラムからの、ワークフロー管理システムとアプリケーションのデータベースという２つのリソースの操作を不可分に管理するものであり、データベースを操作するプログラムであるデスクトップやデータベースアプリケーション自身の実行状態が保存されるものではない。加えて、ワークフロー管理システムが自動処理の機能を持っていたとしても、この自動処理の実行の実行状態の保存とデータベースの操作が不可分に行われるものではない。
【００１５】
また、特開平５−０６１７４８号公報に開示された技術では、コミットの実行ログをデータベースに格納するようにしているが、データベースの操作の状態を記録するログの機能は元々一部のデータベース管理システムに備わっている。したがって、この公報に開示された技術ではその機能の実装をデータベース管理システムの外部に持たせることで、製品への依存性を取り除いたものであるに過ぎない。すなわち、特開平５−０６１７４８号公報で実現する機能は、従来のデータベース管理システムで提供されるトランザクション機能を超えるものではない。
【００１６】
そこで本発明の目的は、データベース操作の記述を含むプログラムを、システム障害時に矛盾無くプログラムの実行状態を復元することが可能な永続プログラム実行装置ならびにこのような永続プログラム実行装置を実現するための永続プログラム実行方法および永続プログラム実行プログラムを提供することにある。
【００１９】
【課題を解決するための手段】
請求項１記載の発明では、（イ）データベース操作のトランザクションを管理する実行管理部と、（ロ）実行するプログラムの中のデータベース操作の記述を実行管理部が管理するトランザクションの下で行うようプログラムを解釈実行するインタプリタ部と、（ハ）このインタプリタ部によって生成され変更されるプログラムの実行状態とこのプログラムの記述内容からプログラム実行によって変更された実行状態範囲を推測し、既に保存されている実行状態のうち変更された範囲のみを更新のために実行管理部が開始したトランザクションの下でデータベースに保存する保存手段と、（ニ）プログラムに記述されたデータベース操作の実行とデータベースに保存されたプログラム自身の実行状態を用いて障害発生後にプログラムの実行状態を復旧させる実行状態復旧手段とを永続プログラム実行装置に具備させる。
【００２０】
すなわち本発明では、実行管理部がデータベース操作のトランザクションを管理し、インタプリタ部がプログラムの中のデータベース操作の記述を実行管理部が管理するトランザクションの下で行うようプログラムを解釈実行し、記憶手段がそのプログラムの実行状態を実行管理部が管理するトランザクションの下で保存することで、データベース操作の記述を含むプログラムの実行において、プログラムに記述されたデータベース操作の実行とプログラム自身の実行状態の保存をプログラム実行装置が自動的に不可分に行い、障害発生時に両者の状態の間で矛盾を起こさないようにしている。しかも本発明では、発明では、既に保存されている実行状態のうち変更された範囲のみを更新することで、効率的に実行状態の保存が可能になる。本発明（以下の請求項を含む）で、データベースとは、トランザクション制御機構を備えた外部記憶装置のことをいう。また、トランザクションとは、一連のデータ処理を１つの単位として管理することをいう。トランザクションは、原子性（Atomicity）、一貫性（Consistency）、独立性（Isolation）および耐久性（Durability）の以上４つの特性を持っている。
【００２１】
請求項２記載の発明では、請求項１記載の永続プログラム実行装置が、一つあるいは複数のインタプリタ部と、一つあるいは複数の実行状態保存部と、プログラムとインタプリタ部、実行状態保存部の関係を保持するインタプリタ情報テーブルとを備え、実行管理部がプログラムの記述方式に応じて適切なインタプリタ部と実行状態保存部を選択することで、複数の異なる記述方式で記述されたプログラムを実行可能なことを特徴としている。
【００２２】
すなわち本発明では、永続プログラム実行装置が一つあるいは複数のインタプリタ部と、一つあるいは複数の実行状態保存部を備えているので、実行管理部がプログラムの記述方式に応じて適切なインタプリタ部と実行状態保存部を選択できる。
【００２３】
請求項３記載の発明では、請求項２記載の永続プログラム実行装置が、（イ）インタプリタ部と同等の処理を行うネイティブコードを出力するコンパイラと、（ロ）インタプリタ部の一つであって、プログラムとしてコンパイラから出力されたネイティブコードが指定されると、ネイティブコードを直接呼び出すネイティブコードの呼出し機構とを具備することを特徴としている。
【００２４】
すなわち本発明では、永続プログラム実行装置が、インタプリタ部と同等の処理を行うネイティブコードを出力するコンパイラと、プログラムとしてコンパイラから出力されたネイティブコードが指定されると、ネイティブコードを直接呼び出すネイティブコードの呼出し機構を備えているので、インタプリタによる逐次実行よりも高速に処理を行うことが可能になる。
【００２５】
請求項４記載の発明では、請求項１記載の永続プログラム実行装置が、複数の異なる記述形式を解釈実行するための複数の異なるインタプリタ部を持ち、各々のインタプリタがプログラムの実行状態を共通のフォーマットに変換することで、一つの実行状態保存部で複数のインタプリタの実行状態をデータベースに保存することを特徴としている。
【００２６】
すなわち本発明では、複数の異なる記述形式を解釈実行するための複数の異なるインタプリタ部を持つものの、各々のインタプリタがプログラムの実行状態を共通のフォーマットに変換するので、一つの実行状態保存部で複数のインタプリタの実行状態をデータベースに保存することが可能になる。
【００２９】
請求項５記載の発明では、請求項１記載の永続プログラム実行装置のインタプリタ部が、プログラムの、単一トランザクションで制御可能な複数のデータベースやデータベース以外のリソースの操作の記述を、実行管理部が管理するトランザクションの下で処理することを特徴としている。
【００３０】
すなわち本発明では、プログラムの実行状態を保存するデータベースとは異なる１つあるいは複数のデータベースの操作や、高信頼性メッセージングシステムの操作等を含んだプログラムの実行も、矛盾なく保存することができる。
【００３１】
請求項６記載の発明では、請求項１記載の永続プログラム実行装置の実行管理部が、プログラム実行状態の参照テーブルを持ち、実行状態を普段はメモリ上から削除しておき、必要になった時のみ実行状態がメモリ上にあるか否かをチェックし、無ければ実行状態保存部から該当する実行状態をメモリ上に読み込み、必要が無くなれば再びメモリ上から削除することを特徴としている。
【００３２】
すなわち本発明では、実行状態を普段はメモリ上から削除しておき、必要になった時のみ該当する実行状態をメモリ上に読み込み、必要が無くなれば再びメモリ上から削除するので、少ないメモリで数多くのプログラム実行状態を動作させることができる。
【００３３】
請求項７記載の発明では、請求項１記載の永続プログラム実行装置のインタプリタ部が、実行前にプログラムを解析して一度のトランザクションで実行すべきプログラム範囲を決定し、一度の実行管理部からの実行指示で決定範囲のみを実行することを特徴としている。
【００３４】
すなわち本発明では、インタプリタが独自に最適なトランザクション範囲を決定し、プログラムの記述によらずに実行を効率化したり、異常処理を回避したりすることが可能になる。
【００３７】
請求項８記載の発明では、（イ）データベース操作のトランザクションを開始するトランザクション開始ステップと、（ロ）データベース操作の記述を含むプログラム中のデータベース操作の記述をトランザクションの中で行うようプログラムを解釈実行するプログラム解釈実行ステップと、（ハ）プログラムの実行状態とこのプログラムの記述内容からプログラム実行によって変更された実行状態の範囲を推測し、既に保存されている実行状態のうち変更された範囲のみを更新のためにデータベースに保存する保存ステップと、（ニ）トランザクションをコミットするコミットステップと、（ホ）プログラムに記述されたデータベース操作の実行とデータベースに保存されたプログラム自身の実行状態を用いて障害発生後にプログラムの実行状態を復旧させる実行状態復旧ステップとを永続プログラム実行方法に具備させる。
【００３８】
すなわち本発明では、これにより、データベース操作の記述を含むプログラムの実行において、プログラムに記述されたデータベース操作の実行とプログラム自身の実行状態の保存を自動的に不可分に行い、障害発生時に両者の状態の間で矛盾を起こさないようにしている。しかも本発明では、効率的な実行状態の更新が可能になる。
【００３９】
請求項９記載の発明では、請求項８記載の永続プログラム実行方法が、実行するプログラムの種類に応じてプログラムの解釈実行と実行状態の保存に使用する手段を選択する選択ステップを持ち、選択ステップで選択された手段をプログラム解釈実行ステップとプログラムの実行状態をデータベースに保存する保存ステップで使用することで、複数の異なる記述方式で記述されたプログラムを実行可能にすることを特徴としている。
【００４０】
すなわち本発明では、選択ステップで、実行するプログラムの種類に応じてプログラムの解釈実行と実行状態の保存に使用する手段を選択し、選択された手段をプログラム解釈実行ステップとプログラムの実行状態をデータベースに保存する保存ステップで使用するので、複数の異なる記述方式で記述されたプログラムに対応することができる。
【００４３】
請求項１０記載の発明では、請求項８記載の永続プログラム実行方法において、実行すべきプログラムの実行状態を選択する実行状態選択ステップと、この実行状態選択ステップで選択したプログラムの実行状態が所定のメモリ上に格納されているか否かを調べる格納有無判別ステップと、この格納有無判別ステップで選択したプログラム実行状態がデータベースに保存されていないと判別されたときそのプログラム実行状態を保存ステップで保存した保存先から読み込む読込みステップがプログラム解釈実行ステップの処理よりも前に行われ、かつトランザクションをコミットするコミットステップの後に保存したプログラム実行状態をメモリ上から削除する削除ステップの処理が行われることを特徴としている。
【００４４】
すなわち本発明では、これにより少ないメモリで数多くのプログラム実行状態を動作可能とすることができる。
【００４５】
請求項１１記載の発明では、請求項８記載の永続プログラム実行方法で、プログラムの解釈実行を行うプログラム解釈実行ステップが、プログラムの１トランザクションでの実行範囲を決定する実行範囲決定ステップと、この実行範囲決定ステップで決定された実行範囲のみを解釈実行する実行範囲実行ステップとを備えることを特徴としている。
【００４６】
すなわち本発明では、プログラム解釈実行ステップで独自に最適なトランザクション範囲を決定し、プログラムの記述によらずに実行を効率化したり、異常処理を回避したりすることが可能になる。
【００４９】
請求項１２記載の発明の永続プログラム実行プログラムでは、コンピュータに、（イ）データベース操作のトランザクションを開始するトランザクション開始処理と、（ロ）データベース操作の記述を含むプログラム中のデータベース操作の記述をトランザクションの中で行うようプログラムを解釈実行するプログラム解釈実行処理と、（ハ）プログラムの実行状態とこのプログラムの記述内容からプログラム実行によって変更された実行状態の範囲を推測し、既に保存されている実行状態のうち変更された範囲のみを更新のためにデータベースに保存する保存処理と、（ニ）トランザクションをコミットするコミット処理と、（ホ）プログラムに記述されたデータベース操作の実行とデータベースに保存されたプログラム自身の実行状態を用いて障害発生後にプログラムの実行状態を復旧させる実行状態復旧処理とを実行させることを特徴としている。
【００５０】
すなわち本発明の永続プログラム実行プログラムでは、コンピュータに、請求項８記載の永続プログラム実行方法と同様の処理を実現させている。これにより、効率的な実行状態の更新が可能になる。
【００５３】
請求項１３記載の発明では、請求項１２記載の永続プログラム実行プログラムで、実行すべきプログラムの実行状態を選択する実行状態選択処理と、この実行状態選択処理で選択したプログラムの実行状態が所定のメモリ上に格納されているか否かを調べる格納有無判別処理と、この格納有無判別処理で選択したプログラム実行状態がデータベースに保存されていないと判別されたときそのプログラム実行状態を保存処理で保存した保存先から読み込む読込み処理の各実行がプログラム解釈実行処理の実行よりも前に行われ、かつトランザクションをコミットするコミット処理の実行後に保存したプログラム実行状態をメモリ上から削除する削除処理が実行されることを特徴としている。
【００５４】
すなわち本発明の永続プログラム実行プログラムは、請求項１２記載の永続プログラム実行プログラムに、請求項１０記載の発明と同様の方法を更に実現する処理を追加させている。
【００５５】
請求項１４記載の発明では、請求項１２記載の永続プログラム実行プログラムで、プログラムの解釈実行を行うプログラム解釈実行処理の実行が、プログラムの１トランザクションでの実行範囲を決定する実行範囲決定処理と、この実行範囲決定処理で決定された実行範囲のみを解釈実行する実行範囲実行処理によって少なくとも実行されることを特徴としている。
【００５６】
すなわち本発明の永続プログラム実行プログラムは、請求項１２記載の永続プログラム実行プログラムに、請求項１１記載の発明と同様の方法を更に実現する処理を追加させている。
【００５７】
請求項１５記載の永続プログラム実行プログラムでは、コンピュータに、（イ）データベース操作のトランザクションを管理する実行管理処理と、（ロ）実行するプログラムの中のデータベース操作の記述を実行管理処理で管理するトランザクションの下で行うようプログラムを解釈実行するインタプリタ処理と、（ハ）このインタプリタ処理によって生成され変更されるプログラムの実行状態とこのプログラムの記述内容からプログラム実行によって変更された実行状態範囲を推測し、既に保存されている実行状態のうち変更された範囲のみを更新のために実行管理処理で管理するトランザクションの下でデータベースに保存する記憶処理と、（ニ）プログラムに記述されたデータベース操作の実行と記憶処理でデータベースに保存されたプログラム自身の実行状態を用いて障害発生後にプログラムの実行状態を復旧させる実行状態復旧処理とを実行させることを特徴としている。
【００５８】
すなわち本発明の永続プログラム実行プログラムでは、コンピュータにこれら各処理を実行させることで、プログラムに記述されたデータベース操作の実行とプログラム自身の実行状態の保存を自動的に不可分に行い、障害発生時に両者の状態の間で矛盾を起こさないようにしている。しかも本発明では、効率的な実行状態の更新が可能になる。
【００５９】
【発明の実施の形態】
本発明の具体的な実施例を説明する前に、本発明の永続プログラム実行装置の幾つかの代表的な実施の形態を示すことにする。
【００６０】
図１は、本発明の永続プログラム実行装置の第１の実施の形態を表わしたもので、請求項２、請求項６および請求項９に対応している。この図１に示した第１の実施の形態の永続プログラム実行装置１０１は、トランザクションを管理する実行管理部１０２を備えている。実行管理部１０２は、データベースの操作の記述を含むプログラムの解釈実行を行うインタプリタ部１０３と、インタプリタ部１０３によって生成もしくは変更されたプログラムの実行状態をデータベース格納部１０４のデータベースに保存する実行状態保存部１０５と、メモリ１０６ならびに外部記憶装置１０８を接続している。データベース格納部１０４は、データの変更の不可分性を保証する機構であるトランザクション制御機構を備えた記憶装置であるデータベースを格納している。実行管理部１０２は、データベースのトランザクションの開始とコミットやインタプリタ部１０３と実行状態保存部１０５の呼び出し等といった制御を行う。また、図示しないＣＰＵ（中央処理装置）がこの永続プログラム実行装置１０１の各種プログラムの実行のために用意されている。外部記憶装置１０８は、この永続プログラム実行装置１０１の全体を制御するためのプログラムを格納している。
【００６１】
このような永続プログラム実行装置１０１でメモリ１０６は、データベース操作の記述を含む幾つかのプログラム１２１1、１２１2と、幾つかのプログラム実行状態１２２1、１２２2、１２２3を格納するようになっている。この第１の実施の形態の永続プログラム実行装置１０１では、インタプリタ部１０３が１つだけ配置されているので、一通りのプログラム記述方式に対応している。
【００６２】
図１に示した永続プログラム実行装置１０１で、あるプログラムの実行が指示されたものとする。実行管理部１０２は指定されたプログラムをメモリ１０６に読み込み、メモリ１０６内にプログラム１２１1を生成する。次にトランザクションを開始し、インタプリタ部１０３を呼び出して実行すべきプログラム１２１1と開始したトランザクションのＩＤ（identifier：識別子）を渡す。
【００６３】
一方、呼び出されたインタプリタ部１０３はメモリ１０６内にプログラム実行状態１２２1を生成するとともに、プログラム１２１1の記述内容から一つのトランザクションで処理すべきプログラムの範囲を獲得し、その範囲のみプログラムの実行を行う。プログラムの実行はプログラム実行状態１２２1を変更することで行う。実行するプログラム中にデータベースの操作に関する記述が含まれていた場合、そのデータベースの操作を実行管理部１０２が開始したトランザクションの管理下で実行する。獲得した範囲の実行が終了したら、インタプリタ部１０３は一旦実行を停止して実行管理部１０２に生成したプログラム実行状態１２２1への参照と共に実行の終了を通知する。
【００６４】
インタプリタ部１０３が実行を停止したら、実行管理部１０２はインタプリタ部１０３によって生成・変更されたプログラム実行状態１２２1と開始したトランザクションのＩＤを実行状態保存部１０５に渡す。実行状態保存部１０５は実行管理部１０２が開始したトランザクションの管理下でプログラム実行状態１２２1と対応するプログラム１２１1の情報をデータベースに保存する。
【００６５】
実行状態保存部１０５が実行状態の保存を終了したら、実行管理部１０２はトランザクションをコミットし、実行状態の保存ならびにプログラム中で行われたデータベース操作を同時に完了させる。ここでコミットは、トランザクション開始後のすべての変更内容を永続的に保存することをいう。
【００６６】
実行中のプログラム、すなわちメモリ１０６上のプログラムの実行状態が２つ以上存在する場合がある。このような場合、実行管理部１０２はその中の一つの実行状態を選択する。例えば図１に示したように３つの実行状態１２２1、１２２2、１２２3が存在した場合、実行管理部１０２は適当な判断手法を用いてその中の一つのプログラムの実行状態１２２1を選択し、トランザクションを開始して、インタプリタ部１０３を呼び出し、実行すべき実行状態１２２1と開始したトランザクションのＩＤを渡す。
【００６７】
呼び出されたインタプリタ部１０３は、プログラムの実行状態１２２1から実行の再開ポイントとそこから一つのトランザクションで処理すべき範囲を再び獲得し、その範囲のみ実行する。プログラム開始時と同様に、実行中にデータベースの操作が行われたら実行管理部１０２の開始したトランザクション内で処理し、獲得した範囲の実行が終了したら実行結果をプログラムの実行状態１２２1に反映し、実行管理部１０２に実行の終了を通知する。
【００６８】
インタプリタ部１０３が実行を停止したら、実行管理部１０２はインタプリタ部１０３によって変更されたプログラムの実行状態１２２1と開始したトランザクションのＩＤを実行状態保存部１０５に渡す。実行状態保存部１０５はプログラム１２１1と渡されたプログラムの実行状態１２２1から、既にデータベース格納部１０４に保存されている実行状態の更新方法を決定する。そして実行管理部１０２が開始したトランザクションの管理下でデータベース格納部１０４に保存されている実行状態を更新する。実行状態保存部１０５が実行状態の更新を終了したら、実行管理部１０２はトランザクションをコミットし、実行状態の更新ならびにプログラム中で行われたデータベース操作を同時に完了させる。
【００６９】
障害発生後やサーバの停止後などに、装置を停止前の状態に復旧する場合、実行管理部１０２はまず実行状態保存部１０５を通して保存されている実行状態をメモリ１０６上に読み込む。以後は、通常通り実行する。
【００７０】
インタプリタ部１０３がデータベースの操作に関する記述を、実行状態保存部１０５がプログラム実行状態をデータベースに保存するのと同じトランザクションになるように解釈実行することで、記述中のデータベース操作とその結果となるプログラムの実行状態を不可分に保存することができ、障害時の矛盾の発生を回避することができる。
【００７１】
図２は、本発明の永続プログラム実行装置の第２の実施の形態を表わしたものである。図２で図１と同一部分には同一の符号を付しており、これらの説明を適宜省略する。この第２の実施の形態の永続プログラム実行装置２０１は、請求項３記載の発明に対応するもので、図１に示した第１の実施の形態の永続プログラム実行装置１０１が、複数のプログラム記述方式に対応させた複数（図では２つ）のインタプリタ部１０３1、１０３2と、これらのインタプリタ部１０３1、１０３2にそれぞれ対応させて実行状態を保存する実行状態保存部名を記憶した実行状態保存部１０５1、１０５2ならびにインタプリタ部１０３1、１０３2と実行状態保存部１０５1、１０５2の名前を管理するインタプリタ情報テーブル２０２を備えている。ここで、インタプリタ情報テーブル２０２には、第１の条件、第２の条件等のプログラム条件と、第１のインタプリタ部名、第２のインタプリタ部名等を記したインタプリタ部と、第１の実行状態保存部名、第２の実行状態保存部名等で実行状態を保存する実行状態保存部とが配置されている。
【００７２】
この図２に示した第２の実施の形態の永続プログラム実行装置２０１では、図１に示した第１の実施の形態の永続プログラム実行装置１０１に加えて、実行管理部１０２が実行開始指示を行うプログラムや実行指示を行うプログラム実行状態を決定した後、プログラムとインタプリタ情報テーブル２０２に記載されたプログラム条件を比較して使用するインタプリタ部１０３と実行状態保存部１０５を複数ある中から選択する。そして、以後トランザクションがコミットされるまでの間は、インタプリタ部１０３と実行状態保存部１０５としてこの選択したインタプリタ部１０３と実行状態保存部１０５を用いるようにしている。
【００７３】
次に図３は、本発明の永続プログラム実行装置の第３の実施の形態を表わしたものである。図３で図１と同一部分には同一の符号を付しており、これらの説明を適宜省略する。この第３の実施の形態の永続プログラム実行装置３０１は、請求項４記載の発明に対応するものであり、図１に示した請求項２記載の発明に対応した第１の実施の形態の永続プログラム実行装置１０１が、専用のプログラムのネイティブコードへのコンパイルを行うコンパイラ３０２と、インタプリタ部としてのネイティブコードの呼び出しを行うネイティブ呼出モジュール３０４と、実行状態保存部としてのネイティブコードの実行状態を保存するネイティブ状態保存部３０５を備えたものとなっている。
【００７４】
このような永続プログラム実行装置３０１では、図１に示した構成のうち、インタプリタ部１０３がネイティブ呼出モジュール３０４になり、実行状態保存部１０５がネイティブ状態保存部３０５になり、更にコンパイラ３０２が加えられている。
【００７５】
永続プログラム実行装置３０１ではインタプリタ部３０４が行っていたプログラムの解釈実行処理のうち、解釈の処理をコンパイラ３０２が事前に行い、その結果をネイティブコードとして生成しておく。実行時にはインタプリタ部の一種であるネイティブ呼出モジュール３０４がこのネイティブコードを呼び出すことでプログラムの実行を行う。
【００７６】
次に図４は、本発明の永続プログラム実行装置の第４の実施の形態を表わしたものである。図４で図２と同一部分には同一の符号を付しており、これらの説明を適宜省略する。第４の実施の形態の永続プログラム実行装置４０１は、請求項５記載の発明に対応するものであり、図２に示した請求項３に係わる発明の永続プログラム実行装置２０１が、共通のフォーマットでプログラムの実行状態を保存する複数のインタプリタ部１０３1、１０３2と、共通フォーマットのプログラム実行状態を保存する一つの実行状態保存部１０５1を持っている。
【００７７】
図２に示した請求項３に係わる発明の永続プログラム実行装置２０１と比較すると、実行状態保存部１０５2が存在していない。このため、２つのインタプリタ部１０３1、１０３2の双方の実行状態を一つの実行状態保存部１０５1が保存することになる。
【００７８】
この第４の実施の形態の永続プログラム実行装置４０１の場合には、複数のインタプリタ部１０３1、１０３2が実行状態の共通のデータ形式を採用し、さらにインタプリタ情報テーブル２０２がこれら複数インタプリタ部１０３1、１０３2に対応する実行状態保存部としてこの共通のデータ形式を処理可能な一つの実行状態保存部１０５1を持つ。
【００７９】
次に図５は、本発明の永続プログラム実行装置の第５の実施の形態を表わしたものである。図５で図１と同一部分には同一の符号を付しており、これらの説明を適宜省略する。第５の実施の形態の永続プログラム実行装置５０１は、請求項７記載の発明に対応するもので、図１に示した第１の実施の形態の永続プログラム実行装置１０１が複数のデータベース格納部１０４1、１０４2、１０４3もしくは同等のトランザクション機能をサポートしたリソース５０２に接続される。この図５に示した例ではデータベース格納部１０４1、１０４2、１０４3とリソース５０２の双方に接続されている。
【００８０】
この第５の実施の形態の永続プログラム実行装置５０１では、インタプリタ部１０３のプログラムの解釈実行において、インタプリタ部１０３が、メモリ１０６に接続され、実行管理部１０２が開始したトランザクションで制御可能な全てのデータベースやリソース５０２の操作に関するプログラムの記述を、トランザクションの下で行うよう解釈実行する。
【００８１】
次に図６は、本発明の永続プロセス実行装置の第６の実施の形態を表わしたものである。図６で図１と同一部分には同一の符号を付しており、これらの説明を適宜省略する。第６の実施の形態の永続プログラム実行装置６０１は、請求項８記載の発明に対応するもので、図１に示した第１の実施の形態の永続プログラム実行装置１０１がメモリ上等にプログラム実行状態への参照テーブルである実行状態テーブル６０２を備えている。実行状態テーブル６０２は、プログラムの実行状態名とプログラム名のテーブルとして、メモリもしくはデータベース上に保存されている実行状態名の一覧と、それに対応するプログラム名を保持している。
【００８２】
第６の実施の形態の永続プログラム実行装置６０１では、実行管理部１０２がインタプリタ部１０３にプログラムの実行開始指示を出して結果として新しく生成されたプログラム実行状態を受け取った後、その実行状態への参照情報とプログラムの情報を実行状態テーブル６０２に追加する。そして実行管理部１０２が複数のプログラム実行状態１２２1、１２２2、１２２3の中から実行すべき実行状態を選択する際に、実行状態テーブル６０２を参照してその中から実行すべき実行状態の参照を選択する。次にその参照する実行状態がメモリ１０６上にあるか否かを調べて、なければ実行状態保存部１０５に実行状態の読み込み指示を出し、読み込まれた実行状態をインタプリタ部１０３に渡して実行指示を行う。また、解釈実行と保存を終えてトランザクションをコミットした後、プログラム実行状態をメモリ１０６上から削除するか否かを決定し、削除する場合は実行状態テーブル６０２の参照情報はそのままに実行状態のみをメモリ１０６上から削除する。
【００８３】
なお、請求項６に係わる発明では、図１に示した第１の実施の形態の永続プログラム実行装置１０１で、実行状態保存部１０５がプログラム実行状態の更新を行う際に、プログラムの内容とプログラム実行状態の内容から実行状態中の更新が行われた箇所を予測し、変更が行われた箇所のみのデータの更新を行う。
【００８４】
また、請求項９および請求項１５に係わる発明では、図１に示した第１の実施の形態の永続プログラム実行装置１０１でインタプリタ部１０３のプログラムの解釈実行において、解釈実行前もしくは解釈実行中に一度のトランザクションで処理すべき範囲を決定し、一度の実行開始指示もしくは実行指示でその範囲のみプログラムの実行を行うようになっている。
【００８５】
【実施例】
以下実施例につき本発明を詳細に説明する。
【００８６】
第１の実施例
【００８７】
図７は本発明の第１の実施例における永続プログラム実行装置の構成を表わしたものである。この第１の実施例は、図１に示した第１の実施の形態および請求項２を具体化したものである。そこで、図７で図１と同一部分には同一の符号を付しており、これらの説明を適宜省略する。
【００８８】
永続プログラム実行装置１３１は装置全体の動作およびトランザクションを管理する実行管理部１０２を備えている。実行管理部１０２は、スクリプト言語で記述されたプログラムを実行するためのインタプリタ部であるスクリプトインタプリタ１３２と、スクリプトインタプリタ１３２によるプログラムの実行状態を保存するためのスクリプト状態保存部１３３と、メモリ１０６と、図示しない他のシステムと通信するためのメッセージ通信部１３４と接続されている。
【００８９】
また、永続プログラム実行装置１３１内の各部は外部のデータベース格納部１０４とも接続されている。スクリプトインタプリタ１３２は、スクリプト形式で記述されたプログラムの解釈実行機能と、トランザクション範囲の決定ルールとして“begin”と“end”で囲まれた範囲を１トランザクションとして実行する、というルールを持っている。また、実行状態として、次に実行すべき行番号と、プログラム内で使用される変数を持っている。変数は変数名と値、保存されていない変更があるか否かを示す変更フラグを持っている。メッセージ通信部１３４は受信部１４１と送信部１４２とプログラムテーブル１４３を持っている。
【００９０】
図８および図９は、このような構成の永続プログラム実行装置の動作を表わしたものである。図７と共にこれを説明する。図７に示した実行管理部１０２は、起動されるとまず、保存されているプログラム実行状態があるか否かを調べる（図８ステップＳ８０１）。保存されているプログラム実行状態が無ければ（Ｎ）、メッセージ通信部１３４からの要求があるか否かを調べる（ステップＳ８０２）。要求が無ければ（Ｎ）、メモリ１０６上に実行中のプログラムの実行状態があるかないかを調べる（図９ステップＳ８０３）。以上のステップＳ８０２およびステップＳ８０３のいずれもなければ（Ｎ）、ステップＳ８０２に戻って、いずれかが発生するまで待機する。
【００９１】
所定のタイミングでメッセージ通信部１３４からの要求があったものとする（ステップＳ８０２：Ｙ）。この場合、要求の内容を確認し、これがプログラム開始要求であった場合には（ステップＳ８０４：Ｙ）、起動すべきプログラムを図示しないファイルからメモリ１０６へ読み込む（ステップＳ８０５）。次にトランザクションを開始して（ステップＳ８０６）、インタプリタ部としてのスクリプトインタプリタ１３２へプログラム開始を指示する（ステップＳ８０７）。そして、スクリプトインタプリタ１３２から実行終了の通知を待つ（ステップＳ８０８）。実行終了の通知が来たら（Ｙ）、実行状態保存部１３３へ実行状態を渡して実行状態の保存を行い（ステップＳ８０９）、トランザクションをコミットして（ステップＳ８１０）、ステップＳ８０２に戻る。
【００９２】
一方、図９のステップＳ８０３で実行中のプログラムの実行状態が存在したような場合（Ｙ）、実行対象の実行状態を一つ決定する（ステップＳ８１１）。そして、トランザクションを開始し（ステップＳ８１２）、スクリプトインタプリタ１３２へプログラム実行を指示し（ステップＳ８１３）、スクリプトインタプリタ１３２から実行終了の通知を待つ（ステップＳ８１４）。実行終了の通知が来たら（Ｙ）、実行状態保存部１３３へ実行状態を渡して実行状態の更新を行い（ステップＳ８１５）、トランザクションをコミットして（ステップＳ８１６）、ステップＳ８０２に戻る。
【００９３】
ところで、図８のステップＳ８０１で、既に保存されているプログラム実行状態が存在した場合（Ｙ）、実行管理部１０２は実行状態保存部１３３に対して保存されている全てのプログラムの実行状態の読み込みを指示する（ステップＳ８１７）。そして全てのプログラムの実行状態の読み込みが終了したら、ステップＳ８０２に戻るようになっている。
【００９４】
図１０は、スクリプトインタプリタの動作を表わしたものである。スクリプトインタプリタ１３２は実行管理部１０２からの指示を待っており（ステップＳ８２１）、指示を受けたら（Ｙ）、その指示がプログラム開始であるか否かをチェックする（ステップＳ８２２）。これがプログラム開始指示であった場合（Ｙ）、まずメモリ１０６上に初期状態でプログラム実行状態を生成し（ステップＳ８２３）、実行開始行を１行目とする（ステップＳ８２４）。次にメモリ１０６上のプログラムを解析して実行開始行から“end”という命令が現われる行までを一つのトランザクションで実行される範囲と決定して（ステップＳ８２５）、この範囲のみをプログラム解釈実行機能を用いて実行する（ステップＳ８２６）。ここで、プログラム解釈実行機能は、もし実行する命令がデータベース格納部１０４の操作に関するものであれば、その操作を実行管理部１０２が開始したトランザクションの下で行うよう解釈実行する。また、命令が変数の値を変更するものであった場合、変数の値を変更すると同時にその変数の変更フラグをオンにする。決定された範囲の実行が終了すると、スクリプトインタプリタ１３２は結果変更された変数やプログラムの実行位置を実行状態に反映し（ステップＳ８２７）、実行管理部１０２に実行の終了を通知して（ステップＳ８２８）、ステップＳ８２１に戻る。
【００９５】
ステップＳ８２２で指示がプログラム実行開始ではなかった場合（Ｎ）、指示がプログラム実行であるかどうかを調べる（ステップＳ８２９）。そして、プログラム実行指示であった場合には（Ｙ）、渡された実行状態から次に実行すべき行を取り出しこれを実行開始行とする（ステップＳ８３０）。そして、ステップＳ８２５に移り、以降プログラム開始指示の場合と同様に制御する。
【００９６】
図１１は、スクリプト状態保存部の動作を表わしたものである。スクリプト状態保存部１３３は実行管理部１０２からの指示を待ち（ステップＳ８４１）、指示があったときには（Ｙ）、指示の内容を確認し、指示が実行状態保存だと（ステップＳ８４２：Ｙ）、実行管理部１０２が開始したトランザクションの下で指定された実行状態と対応するプログラムの情報をデータベース格納部１０４に保存し（ステップＳ８４３）、実行状態中の全ての変数の変更フラグをオフにして（ステップＳ８４４）、保存の終了を実行管理部１０２に通知し（ステップＳ８４５）、ステップ８４１の処理に戻る。
【００９７】
ステップＳ８４２で実行状態保存ではなかった場合には（Ｎ）、指示が実行状態の更新か否かを確認し（ステップＳ８４６）、実行状態の更新の指示であった場合には（Ｙ）、実行状態を確認し、次に実行すべき行番号と、変更フラグがオンになっている変数の値のみ実行管理部１０２が開始したトランザクションの下でデータベース格納部１０４に既に保存されている実行状態を更新する（ステップＳ８４７）。そして、変更フラグをオフにして（ステップＳ８４８）、実行管理部１０２に実行状態の更新終了を通知して（ステップＳ８４９）、ステップＳ８４１に戻る。
【００９８】
これに対して、ステップＳ８４６で実行状態更新指示ではなかった場合には（Ｎ）、指示が実行状態読み込み指示か否かを確認する（ステップＳ８５０）。これが実行状態読み込み指示であった場合には（Ｙ）、データベース格納部１０４から保存されている全ての実行状態をメモリ１０６上に読み込み（ステップＳ８５１）、対応するプログラムをメモリ１０６上に読み込んで（ステップＳ８５２）、実行管理部１０２に読み込み終了を通知し（ステップＳ８５３）、ステップＳ８４１の処理に戻る。
【００９９】
図１２は、メッセージ通信部における受信部の動作を表わしたものである。受信部１４１は他のシステムからのメッセージを待機しており（ステップＳ８６１）、メッセージが受信されると（Ｙ）、受信メッセージの要求内容を解析してプログラムテーブル１４３から対応するプログラムファイル名を決定し（ステップＳ８６２）、実行管理部１０２に受信メッセージを引数としたプログラムの開始要求を送り（ステップＳ８６３）、ステップＳ８６１の待機状態に戻ることになる。
【０１００】
図１３は、メッセージ通信部における送信部の動作を表わしたものである。送信部１４２は、インタプリタ部からメッセージ送信要求が送られてくるのを待機している（ステップＳ８７１）。メッセージ送信要求が送られてきたら（Ｙ）、要求されたメッセージを外部のシステムに送信する（ステップＳ８７２）。この後、ステップＳ８７１に戻って次のメッセージ送信要求を待機することになる。
【０１０１】
次に、このような本実施例の永続プログラム実行装置１３１の動作の一例を具体的に説明する。
【０１０２】
図１４は、プログラムであるスクリプトの例を示したものである。このスクリプトは、図７に示した“購入.scr”という名のファイル１５１に保存されている。なお、この図７等の図面では同一のファイルがメモリ１０６上に読み込まれたとき、これに添え字“Ａ”を付加している。スクリプトでは、“begin”と“end”で囲んだ１行目から６行目、７行目から１１行目、１２行目から１４行目、１６行目から１８行目がそれぞれ一つのトランザクション範囲となっている。スクリプトでは、２〜５行目で購入依頼書からの値の取り出しと設定を行い、８行目で見積りデータベースから以前提供した見積り価格を検索して購入依頼書の価格と見積り価格をチェックし、９行目で在庫データベースから商品の在庫数を検索して在庫数のチェックを行い、１０行目で出荷データベースに出荷予約データの保存を行い、購入受け付け処理が正常終了した場合１３行目での確認メッセージを送信し、購入受け付け処理が失敗した場合１７行目でエラーメッセージを送信するようにしている。
【０１０３】
図７に示したメッセージ通信部１３４は、プログラムテーブル１４３として、見積り依頼ではプログラムファイル１５２の“見積り.scr”を、購入要求ではプログラムファイル１５１の“購入.scr”のそれぞれのプログラムを起動するという宣言を持っている。
【０１０４】
ここで、受信部１４１が他の企業のシステムからの購入要求メッセージを受信したとする。受信部１４１は要求内容とプログラムテーブル１４３から“購入.scr”を起動すべきプログラムと決定し、実行管理部１０２に受信メッセージを引数として“購入.scr”の開始要求を送る。
【０１０５】
開始要求を受けた実行管理部１０２は、“購入.scr”ファイル１５１をメモリ１０６上に読み込み、トランザクションを開始してスクリプトインタプリタ１３２にプログラムの実行開始を通知する。
【０１０６】
実行開始を通知されたスクリプトインタプリタ１３２は、“購入.scr”１５１を解析して使用する変数を調べて、次行番号と変数“request”、“item”、“customer”、“price”を持った第１の実行状態１７１を生成する。次に、実行開始行を１行目としてそこから“end”となる行を探し、１〜６行目を実行すべき範囲と決定して、これを実行する。１〜６行目にはデータベース操作は含まれないので、単に変数の値とそれに伴う変更フラグの変更のみが行われる。実行が終了すると、スクリプトインタプリタ１３２は次行番号を７行目に設定し、実行管理部１０２に実行の終了を通知する。
【０１０７】
実行終了の通知を受けた実行管理部１０２は、渡された第１の実行状態１７１をスクリプト状態保存部１３３に渡し第１の実行状態１７１の保存を指示する。指示を受けたスクリプト状態保存部１３３は第１の実行状態１７１の次行番号と変数の名前と値のリストをデータベース格納部１０４に保存する。保存を終えたら実行管理部１０２はトランザクションをコミットし、実行状態の保存を確定する。
【０１０８】
ここで、受信部１４１が他の企業のシステムからの新たな購入要求メッセージを受信すると、先の説明と同様に、受信部１４１は実行管理部１０２にプログラムの開始要求を送り、実行管理部１０２はスクリプトインタプリタ１３２に実行開始を通知し、スクリプトインタプリタ１３２は第２の実行状態１７２を生成して１〜６行目を実行し、スクリプト状態保存部１３３が第２の実行状態１７２をデータベース格納部１０４に保存する。この時、メモリ１０６上には実行中の実行状態が第１の実行状態１７１と第２の実行状態１７２の２つが存在することになる。
【０１０９】
次に実行管理部１０２は、実行中の実行状態が２つ存在することから、いずれか片方、ここでは仮に先に生成された第１の実行状態１７１を実行すべき状態と決定する。そしてトランザクションを開始してスクリプトインタプリタ１３２にプログラムの実行を通知する。
【０１１０】
スクリプトインタプリタ１３２は第１の実行状態１７１を見て、実行開始行を７行目としてそこから“end”となる行を探し、７〜１１行目を実行すべき範囲と決定して、これを実行する。８行目、９行目、１０行目はそれぞれデータベース格納部１０４の操作命令であることから、スクリプトインタプリタ１３２はこれらの命令を実行管理部１０２の開始したトランザクションの下で実行する。実行が終ると、スクリプトインタプリタ１３２は次行番号を１２行目に設定し、実行管理部１０２に実行の終了を通知する。もし８行目や９行目で“goto”命令が実行された場合、“goto”先の１６行目が実行範囲外であることから、スクリプトインタプリタ１３２は次行番号を１６行目に設定してその時点で実行を終了し、実行管理部１０２に実行の終了を通知する。
【０１１１】
実行終了の通知を受けた実行管理部１０２は、渡された第１の実行状態１７１をスクリプト状態保存部１３３に渡して第１の実行状態１７１の更新を指示する。指示を受けたスクリプト状態保存部１３３は、変数が変更されていないことから実行状態の次行番号のみを更新する。更新を終えたら実行管理部１０２はトランザクションをコミットし、プログラム中でのデータベース格納部１０４の操作と実行状態の更新を同時に確定する。実行管理部１０２がトランザクションを開始してからコミットするまでの間にシステムが障害でダウンした場合、トランザクションが完了していないため、データベース格納部１０４の状態は実行管理部１０２がトランザクションを開始した時点の状態に保たれる。
【０１１２】
例えば、“購入.scr”のプログラムファイル１５１の１０行目の実行を終えた後、実行管理部１０２がプログラムの実行状態を保存する前にサーバがダウンした場合、１０行目の出荷データベース操作は無効になり、出荷データベースにデータは追加されない。よってサーバ復旧時に再度７行目からプログラムの実行を再開しても、出荷データベースに２重にデータが追加されることは無い。
【０１１３】
第２の実施例
【０１１４】
図１５は、本発明の第２の実施例における永続プログラム実行装置の構成を表わしたものである。この第２の実施例は、第１の実施の形態に含まれる実施例である。図１５で図７に示した永続プログラム実行装置１３１と同一部分には同一の符号を付しており、これらの説明を適宜省略する。
【０１１５】
先に説明した第１の実施の形態では、図７のスクリプトインタプリタ１３２ならびにスクリプト状態保存部１３３に示されるように、インタプリタ部、実行状態保存部ともプログラムの記述形式をスクリプト言語としていた。しかしながら、記述言語はスクリプト形式に限定されるものではない。記述形式は、オブジェクト指向言語、関数型言語、グラフ形式など、既存の様々なプログラム言語や記述形式が利用可能である。
【０１１６】
図１５に示した第２の実施例の永続プログラム実行装置２３１は、状態遷移形式によるプログラム記述をサポートしたプログラム実行装置である。この永続プログラム実行装置２３１はインタプリタ部として状態遷移形式で記述されたプログラムのための状態遷移インタプリタ２３２と、実行状態保存部としての状態遷移状態保存部２３３を持っている。状態遷移インタプリタ２３２は、状態遷移形式で記述されたプログラムの解釈実行機能と、トランザクション範囲の決定ルールとして１状態遷移を１トランザクションとして実行する、というルールを持っている。また、実行状態として次の状態と、一つ前の状態と、幾つかの変数を持つ。変数は変数名と値を持つ。メッセージ通信部１３４内にはプログラムテーブル２３６が用意されている。本実施例で実行管理部１０２は“状態確認.state”という名のプログラムファイル２３８を実行するようになっている。
【０１１７】
図１６は状態遷移インタプリタの動作を表わしたものである。状態遷移インタプリタ２３２は実行管理部１０２からの指示を待ち（ステップＳ２４１）、指示を受けたら（Ｙ）、その指示がプログラム開始であるか否かを調べる（ステップＳ２４２）。そして、これがプログラム開始指示であった場合には（Ｙ）、メモリ１０６上に初期状態でプログラム実行状態を生成し（ステップＳ２４３）、実行開始状態を、状態遷移図の先頭状態とする（ステップＳ２４４）。そして、この状態を評価し、状態の遷移とそれに付随する処理をプログラム解釈実行機能を用いて実行する（ステップＳ２４５）。ここで、プログラム解釈実行機能は、もし実行する命令がデータベース格納部１０４の操作であれば、その操作を自動的に実行管理部１０２が開始したトランザクションの下で行う。一つの状態の評価が終了すると、状態遷移インタプリタ２３２は次の状態や一つ前の状態、結果変更された変数の値を実行状態に反映し（ステップＳ２４６）、実行管理部１０２に実行の終了を通知し（ステップＳ２４７）、ステップＳ２４１に戻る。
【０１１８】
一方、ステップＳ２４２で指示がプログラム開始指示ではなかった場合には（Ｎ）、この指示がプログラム実行指示であるか否かを調べ（ステップＳ２４８）、プログラム実行指示の場合は（Ｙ）、次の状態を取り出して実行開始状態とし（ステップＳ２４９）、後は実行開始指示の場合と同様に、ステップＳ２４５に進んで状態の評価を行う。
【０１１９】
図１７は、状態遷移状態保存部の動作を表わしたものである。状態遷移状態保存部２３３は実行管理部１０２からの指示を待ち（ステップＳ２６１）、指示があるとその内容を確認する。そして、指示が実行状態保存だと（ステップＳ２６２：Ｙ）、実行管理部１０２が開始したトランザクションの下で指定された実行状態と対応するプログラムの情報をデータベース格納部１０４に保存し（ステップＳ２６３）、保存の終了を実行管理部１０２に通知して（ステップＳ２６４）、ステップＳ２６１に戻る。ステップＳ２６２で実行状態保存ではなかった場合（Ｎ）、次のステップＳ２６５で指示が実行状態更新か否かを確認する。これが実行状態更新であった場合には（Ｙ）、実行状態を確認し、次の状態と一つ前の状態とプログラムからその２つの状態の間の遷移とそれに付随する処理で変更される可能性のある変数の値を予想し、次の状態とひとつ前の状態と予想した変数のみ実行管理部１０２が開始したトランザクションの下でデータベース格納部１０４に既に保存されているデータを更新する（ステップＳ２６６）。そして、更新の終了を実行管理部１０２に通知して（ステップＳ２６７）、ステップＳ２６１に戻る。
【０１２０】
ステップＳ２６５で実行状態更新指示ではなかった場合には（Ｎ）、その指示が実行状態読み込み指示か否かを確認する（ステップＳ２６８）。これが実行状態読み込み指示であった場合には（Ｙ）、データベース１０４から保存されている全ての実行状態をメモリ１０６上に読み込み（ステップＳ２６９）、次のステップで対応するプログラムをメモリ１０６上に読み込んで（ステップＳ２７０）、実行管理部１０２に対して読み込み終了を通知する（ステップＳ２７１）。そして、ステップ２６１に戻ることになる。
【０１２１】
図１８は、プログラムである状態遷移図の例を示したものである。状態遷移図は図１５に示したプログラムテーブル２３６内の“状態確認.state”という名のプログラムファイル２３８に保存されている。状態遷移図では、使用する変数を宣言する変数テーブル２８１と、“開始”（ステップＳ２９１）、“初期化”（ステップＳ２９２）、“出荷状態取り出し”（ステップＳ２９３）、“出荷済み確認”（ステップＳ２９４）、“入荷待確認”（ステップＳ２９５）、“出荷済みメッセージ送信”（ステップＳ２９６）、“入荷待メッセージ送信”（ステップＳ２９７）、“未処理メッセージ送信”（ステップＳ２９８）、“終了”（ステップＳ２９９）、の９つの状態とそれぞれに付随した処理２８２〜２８８とその間の遷移条件を記述している。
【０１２２】
なお、図１９はステップＳ２９２〜ステップＳ２９８の７つの状態に付随した処理２８２〜２８８の一覧を示したものである。
【０１２３】
この第２の実施例の永続プログラム実行装置２３１の構成ならびに動作は、実行すべきプログラムの記述形式と、その記述形式に依存したトランザクション範囲の決定ルールや解釈実行機能、実行状態の保存方法が異なる以外、第１の実施の形態および第１の実施例との違いは無い。他にも記述形式に応じたインタプリタ部や実行状態保存部を用意することで、他のプログラムの記述形式にも対応可能である。
【０１２４】
第３の実施例
【０１２５】
図２０は、本発明の第２の実施の形態および請求項３に基づく第３の実施例における永続プログラム実行装置の構成を表わしたものである。第１の実施の形態では図１に示したようにインタプリタ部１０３および実行状態保存部１０５共に１つずつしか持たなかったが、これらを複数持たせ、プログラムの記述形式に応じて使用するインタプリタ部や実行状態保存部を選択させることもできる。永続プログラム実行装置３３１が複数のプログラム記述形式をサポートすることで、処理の用途、内容、対象領域、処理を記述するプログラマの能力など様々な要因に応じて適切な記述方式を選択し、プログラムの開発を容易に行うことが可能になる。
【０１２６】
永続プログラム実行装置３３１は、スクリプト形式で記述されたプログラムのためのスクリプトインタプリタ３３２とスクリプト状態保存部３３４に加えて、状態遷移形式で記述されたプログラムのための状態遷移インタプリタ３３３と状態遷移状態保存部３３５を持ち、加えてプログラムと使用するインタプリタ部や状態保存部の対応関係を保存するインタプリタ情報テーブル３３６を持っている。また、メッセージ通信部１３４は図７に示したプログラムテーブル１４３に対して、状態確認で“状態確認.state”を起動する宣言を持ったプログラムテーブル３３８を持っている。
【０１２７】
なお、図２１〜図２４は、図２０におけるそれぞれスクリプトインタプリタ３３２（図２１）、スクリプト状態保存部３３４（図２３）、状態遷移インタプリタ３３３（図２２）および状態遷移状態保存部３３５（図２４）を具体的に示したものである。
【０１２８】
図２５および図２６は、この永続プログラム実行装置の実行管理部の動作を表わしたものである。この図２５および図２６で図８あるいは図９と同一部分には同一の符号を付しており、これらの説明を適宜省略する。
【０１２９】
所定のタイミングでメッセージ通信部１３４からの要求があったものとする（図２５ステップＳ８０２：Ｙ）。この場合、要求の内容を確認し、これがプログラム開始要求であった場合には（ステップＳ８０４：Ｙ）、起動すべきプログラムを図示しないファイルからメモリ１０６へ読み込む（ステップＳ８０５）。そして、プログラム名とインタプリタ情報テーブル３３６を使用して使用すべきインタプリタ部と実行状態保存を決定し（ステップＳ３５１）、トランザクションを開始する（ステップＳ８０６）。この後、インタプリタ部としてのスクリプトインタプリタ３３２へプログラム開始を指示する（ステップＳ８０７）。そして、スクリプトインタプリタ３３２から実行終了の通知を待つ（ステップＳ８０８）。実行終了の通知が来たら(Ｙ）、スクリプト状態保存部３３４へ実行状態を渡して実行状態の保存を行い（ステップＳ８０９）、トランザクションをコミットして（ステップＳ８１０）、ステップＳ８０２に戻る。
【０１３０】
一方、図２６のステップＳ８０３で実行中のプログラムの実行状態が存在したような場合（Ｙ）、実行対象の実行状態を一つ決定する（ステップＳ８１１）。そして、インタプリタ部の実行状態保存部３３４を決定して（ステップＳ３５２）、トランザクションを開始し（ステップＳ８１２）、スクリプトインタプリタ３３２へプログラム実行を指示し（ステップＳ８１３）、スクリプトインタプリタ３３２から実行終了の通知を待つ（ステップＳ８１４）。実行終了の通知が来たら（Ｙ）、スクリプト状態保存部３３４へ実行状態を渡して実行状態の更新を行い（ステップＳ８１５）、トランザクションをコミットして（ステップＳ８１６）、ステップＳ８０２に戻る。
【０１３１】
以上説明した永続プログラム実行装置３３１でインタプリタ部３３２、３３３と実行状態保存部３３４、３３５の数は２つずつに限定されるものではなく、また、インタプリタ情報テーブル３３６の参照に使用する情報もプログラム名だけではなくプログラム内に埋め込まれた情報などを用いることも容易に可能である。さらに、ダイナミックリンクライブラリなどのプログラムの動的リンク技術を用いて、インタプリタ部や実行状態保存部の追加やインタプリタ情報テーブル３３６の更新をプログラム実行装置稼働中に動的に行うことも容易に可能である。
【０１３２】
第４の実施例
【０１３３】
第１あるいは第３の実施の形態では、実行管理部１０２はプログラムの実行開始機能のみを提供していたが、これに限るものではない。すなわち、実行管理部１０２はそれ以外にも、実行中のプログラムの一覧の獲得、実行中のプログラムの一時停止、一時停止中のプログラムの実行の再開、実行中のプログラムの削除、インタプリタ部や実行状態保存部の追加、プログラムテーブルやインタプリタ情報テーブルの内容の変更等といった、様々なプログラムの管理機構を備えることができる。更に、それを使用するためのユーザインタフェースを備えることで、プログラム実行装置の管理者が容易に様々なプログラムを実行管理することが可能となる。
【０１３４】
図２７は、第４の実施例における永続プログラム実行装置の構成を表わしたものである。永続プログラム実行装置４３１はユーザインタフェース部４３２を備え、ユーザからの入力を解釈して対応する指示を実行管理部１０２に送るとともに、実行管理部１０２から得られた実行結果をユーザに表示する。
【０１３５】
なお、この図２７でスクリプトインタプリタ３３２は図２１に、スクリプト状態保存部３３４は図２３に、状態遷移インタプリタ３３３は図２２に、状態遷移状態保存部３３５は図２４にそれぞれ示したものと同一である。
【０１３６】
図２８はこの第４の実施例における実行管理部の動作を示したものである。この図２８で図８、図９および図２５、図２６と同一部分には同一の符号を付しており、これらの説明を適宜省略する。また、図８あるいは図２５と同一の制御の前半部分については図示を省略している。本実施例の実行管理部１０２は、先の第１および第３の実施例における動作をベースとしており、次の点で相違している。まず、図８のステップＳ８０２でメッセージ通信部１３４からの要求があるか否かを調べた結果、要求がなかった場合には（Ｎ）、ユーザインタフェース４３２からの要求であるかをチェックする（ステップＳ４４１）。そうであれば（Ｙ）、そのユーザインタフェース４３２からの要求を実行し（ステップＳ４４２）、実行結果をユーザインタフェースへ通知して（ステップＳ４４３）、ステップＳ８０２に戻る。
【０１３７】
ステップＳ４４１でユーザインタフェース４３２からの要求以外の要求であると判別された場合には（Ｎ）、先の図９のステップＳ８０３の処理、すなわちメモリ１０６上に実行中のプログラムの実行状態があるかないかを調べる。これ以降の処理は図２６に示したものと同一である。
【０１３８】
第５の実施例
【０１３９】
第１の実施の形態ではプログラムの実行状態は全てメモリ１０６上にあるとなっていたが、これに限るものではない。すなわち、データベースに保存された実行状態については、実行状態の参照情報と対応するプログラム情報のみメモリ１０６上に残して、実行状態自身をメモリ１０６上から削除してしまい、実行する直前にデータベース格納部１０４から読み込むようにしてもよい。これにより、データベース格納部１０４からの読み込みが必要となる分だけ実行性能は悪くなるが、代わりに使用するメモリ量を減らすことができる。
【０１４０】
図２９は、本発明の第６の実施の形態および請求項８に対応する第５の実施例における永続プログラム実行装置の構成を示したものである。永続プログラム実行装置５３１は実行状態テーブル５３３を持ち、第１〜第３の実行状態の参照情報とそのプログラム名を保持しているが、メモリ１０６上には第３の実行状態１７３しか存在していない。
【０１４１】
図３０および図３１は、この第５の実施例の永続プログラム実行装置における実行管理部の動作を表わしたものである。この図３０および図３１で図８あるいは図９と同一部分には同一の符号を付しており、これらの説明を適宜省略する。実行管理部１０２は、第１の実施例における処理をベースとしており、次の点で相違している。まず、プログラム開始指示の処理を終えたステップＳ８１０の後に、実行状態テーブルに実行状態の参照情報を追加する（図３０ステップＳ５５１）。
【０１４２】
また、メモリ１０６上に実行中のプログラムの実行状態があるかないかを調べ（図３１ステップＳ８０３）、実行状態がある場合には（Ｙ）、これを選択するに際して実行状態テーブル５３３から実行対象を選択し（ステップＳ５５２）、トランザクションを開始する（ステップＳ８１２）。そしてこの後に、該当する実行状態がメモリ１０６上にあるかどうかをチェックし（ステップＳ５５３）、あれば（Ｙ）、インタプリタ部３３２へプログラム実行を指示することになる（ステップＳ８１３）。該当する実行状態がメモリ１０６上にない場合には（ステップＳ５５３：Ｎ）、実行状態保存部（スプリプト状態保存部）３３３に該当する実行状態の読み込みを指示し（ステップＳ５５４）、その後、ステップＳ８１３に進んで実行を行う。
【０１４３】
また、実行開始および実行の処理でトランザクションのコミット終了後（ステップＳ５５１、Ｓ８１６）、保存した実行状態をメモリ１０６上から削除するか否かを決定し（ステップＳ５５５）、削除する場合は（Ｙ）、実行状態テーブル６０２に参照情報は残したまま該当する実行状態をメモリ上から削除することになる（ステップＳ５５６）。
【０１４４】
次に、本発明の第６の実施の形態について説明を補足する。第３の実施の形態ではプログラムの実行状態の保存は各インタプリタ部に専用の実行状態保存部により行っていたが、これを、各インタプリタ部が実行状態をメモリ上にバイナリや特定のクラスのオブジェクトなどの共通の形式で記録し、この共通の形式の実行状態を保存する実行状態保存部を１つ用意して、インタプリタ情報テーブルで複数のインタプリタ部に対してこの実行状態保存部を使用するよう指定することで、複数のインタプリタ部が一つの実行状態保存部を共有するようにすることもできる。
【０１４５】
これにより、インタプリタに特化した効率的な実行状態の保存はできないものの、インタプリタ毎の個別の実行状態保存部を作る必要が無くなり、新しい記述方式への対応が容易になる。
【０１４６】
第６の実施例
【０１４７】
先に説明した第３の実施例ではプログラムの実行が全てインタプリタによって行われていた。コンパイラによってプログラムをインタプリタと同等の処理を行うネイティブコードに変換し、これをインタプリタの代わりに直接実行するようにすることで、インタプリタで逐次実行するよりも高速に処理を実行することができる。
【０１４８】
図３２は、本発明の第３の実施の形態および請求項４に対応した第６の実施例における永続プログラム実行装置の構成を示したものである。永続プログラム実行装置７３１には、コンパイラ７３２と、このコンパイラ７３２によって生成されたネイティブ（Native）コードを呼び出すネイティブ呼出モージュル７３３と、ネイティブ実行状態保存部７３４を持っている。また、インタプリタ情報テーブル７３５は、拡張子が“.dll”であるプログラムをネイティブ呼出モージュル７３３とネイティブ状態保存部７３４を使用するように定義される。本実施例では実行管理部１０２に、ネイティブコードファイル“prg.dll”７３７と共にプログラムソースファイル“prg.scr”７３８が接続されている。
【０１４９】
なお、図３３および図３４は、図３２におけるそれぞれネイティブ呼出モジュール７３３（図３３）およびネイティブ状態保存部７３４（図３４）を具体的に示したものである。
【０１５０】
ここで、実行管理部１０２にコンパイラによって生成されたネイティブコード“prg.dll”の実行が要求された場合、実行管理部１０２は他のインタプリタと同様に実行すべきインタプリタ部としてネイティブ呼出モジュール７３３を決定し、実行を指示する。このとき、ネイティブ呼出モジュール７３３はネイティブコードファイル“prg.dll”７３７をメモリ１０６上に読み込んだプログラム“Prg.dll”７３７Aを解釈実行するのではなく、実行可能コードとして直接“prg.dll”７３７を呼び出す。
【０１５１】
次に、本発明の第８の実施の形態について説明を補足する。第１の実施の形態では一つのデータベースの操作のみをトランザクションの管理対象としたが、これを、単一トランザクションで制御可能な複数のデータベースや他のリソースへの操作もプログラム実行状態と同一のトランザクションで管理することもできる。
【０１５２】
このような他のリソースの例としては、高信頼メッセージ通信機構があげられる。通信機構としてこのような高信頼メッセージ通信機構を用いることで、通信処理も含めた高信頼なプログラムの実行が可能となる。
【０１５３】
次に、本発明の第９の実施の形態（請求項９に対応する。）について説明を補足する。第１の実施の形態ではスクリプトインタプリタはプログラムに記述された“begin”や“end”といった記述を基に一度のトランザクションで実行すべき範囲を決定していたが、これを、このようなプログラムの記述によらずに、インタプリタが最適な実行範囲を独自に判断して決定するようにすることもできる。
【０１５４】
たとえば図１４記載のスクリプトによるプログラム例では、１行目から７行目はデータベースの操作を含まないことから、後に続く７行目から１１行目と併せて、１トランザクションで実行すべき範囲を１行目から１１行目として決定することで、データベースへのアクセスを減らし、処理速度を向上させることができる。同様に第２の実施の形態の状態遷移インタプリタでも、複数の状態遷移を一つのトランザクションで実行するよう決定することができる。
【０１５５】
また、ある“goto”文で同じ“begin”と“end”に囲まれた範囲内へのジャンプが指定されて、処理がループとなり１トランザクション内での処理がいつまでも完了しないような場合、インタプリタが一度のトランザクションでの最大実行行数を決めて、指定範囲の実行が完了しなくても実行を終了させてしまうこともできる。
【０１５６】
インタプリタが独自に最適なトランザクション範囲を決定することで、プログラムの記述によらずに実行を効率化したり、異常処理を回避したりすることが可能となる。
【０１５７】
【発明の効果】
以上説明したように請求項１、請求項８、請求項１２または請求項１５記載の発明によれば、インタプリタ部がそのトランザクションの下でデータベース操作を行うようプログラムのデータベース操作に関する記述を解釈実行し、実行状態保存部が同じトランザクションの下でプログラムの実行状態をデータベースに格納するので、データベース操作の記述を含むプログラムを、プログラム実行装置が、プログラム記述によるデータベース操作とプログラムの実行状態の保存とを単一のトランザクションで行うように解釈実行することで、プログラマが不可分性について特に意識しなくても、障害発生時に、復旧されたプログラムの実行状態とプログラムによって操作されたデータベースの状態との間での矛盾の発生を回避することができる。
【０１５８】
また、請求項２記載の発明によれば、プログラム実行装置を実行管理部、インタプリタ部、実行状態保存部によって構成し、一つの実行管理部が複数のインタプリタ部や実行状態保存部を管理し、実行すべきプログラムによってこれらを切り替えて使用することができるので、同時に複数の記述方式で記述されたプログラムを実行状態を保存しながら実行すると共に、その実行制御を一つの実行管理部でまとめてスケジューリング・実行・管理することができる。
【図面の簡単な説明】
【図１】本発明の永続プログラム実行装置の第１の実施の形態を表わしたブロック図である。
【図２】本発明の永続プログラム実行装置の第２の実施の形態を表わしたブロック図である。
【図３】本発明の永続プログラム実行装置の第３の実施の形態を表わしたブロック図である。
【図４】本発明の永続プログラム実行装置の第４の実施の形態を表わしたブロック図である。
【図５】本発明の永続プログラム実行装置の第５の実施の形態を表わしたブロック図である。
【図６】本発明の永続プログラム実行装置の第６の実施の形態を表わしたブロック図である。
【図７】本発明の一実施例における永続プログラム実行装置の構成を表わしたブロック図である。
【図８】第１の実施例における永続プログラム実行装置の動作の前半部分を表わした流れ図である。
【図９】第１の実施例における永続プログラム実行装置の動作の後半部分を表わした流れ図である。
【図１０】第１の実施例におけるスクリプトインタプリタの動作を表わした流れ図である。
【図１１】第１の実施例におけるスクリプト状態保存部の動作を表わした流れ図である。
【図１２】第１の実施例におけるメッセージ通信部における受信部の動作を表わした流れ図である。
【図１３】第１の実施例におけるメッセージ通信部における送信部の動作を表わした流れ図である。
【図１４】第１の実施例におけるプログラムであるスクリプトの例を示した説明図である。
【図１５】本発明の第２の実施例における永続プログラム実行装置の構成を表わしたブロック図である。
【図１６】第２の実施例における状態遷移インタプリタの動作を表わしたブロック図である。
【図１７】第２の実施例における状態遷移状態保存部の動作を表わした流れ図である。
【図１８】第２の実施例におけるプログラムである状態遷移図の例を示した説明図である。
【図１９】ステップＳ２９２〜ステップＳ２９８の９つの状態に付随した処理の一覧を示した説明図である。
【図２０】本発明の第３の実施例における永続プログラム実行装置の構成を表わしたブロック図である。
【図２１】図２０に示したスクリプトインタプリタの内容を示したブロック図である。
【図２２】図２０に示したスクリプト状態保存部の内容を示したブロック図である。
【図２３】図２０に示した状態遷移インタプリタの内容を示したブロック図である。
【図２４】図２０に示した状態遷移状態保存部の内容を示したブロック図である。
【図２５】本発明の第３の実施例における永続プログラム実行装置の実行管理部の動作の前半部分を表わした流れ図である。
【図２６】本発明の第３の実施例における永続プログラム実行装置の実行管理部の動作の後半部分を表わした流れ図である。
【図２７】本発明の第４の実施例における永続プログラム実行装置の構成を表わしたブロック図である。
【図２８】第４の実施例における実行管理部の動作の一部を示した流れ図である。
【図２９】本発明の第５の実施例における永続プログラム実行装置の構成を表わしたブロック図である。
【図３０】第５の実施例の永続プログラム実行装置における実行管理部の動作の前半部分を表わした流れ図である。
【図３１】第５の実施例の永続プログラム実行装置における実行管理部の動作の後半部分を表わした流れ図である。
【図３２】本発明の第６の実施例における永続プログラム実行装置の構成を示したブロック図である。
【図３３】本発明の第６の実施例におけるネイティブ呼出モジュールのブロック図である。
【図３４】第６の実施例におけるネイティブ実行状態保存部のブロック図である。
【符号の説明】
１０１、２０１、３０１、５０１、６０１、１３１  永続プログラム実行装置
１０２  実行管理部
１０３、３０４  インタプリタ部
１０４  データベース格納部
１０５  実行状態保存部
１０６  メモリ
１０８  外部記憶装置
１２１  プログラム
１２２  プログラム実行状態
１３２  スクリプトインタプリタ
１３４  メッセージ通信部
１４３、２３６、３３８  プログラムテーブル
１５１  ファイル
１７１  第１の実行状態
２０２、３３６  インタプリタ情報テーブル
３０２、７３２  コンパイラ
３０５  ネイティブ状態保存部
５３３、６０２  実行状態テーブル
【図１】
0004062947.tif 000002
【図２】
0004062947.tif 000003
【図３】
0004062947.tif 000004
【図４】
0004062947.tif 000005
【図５】
0004062947.tif 000006
【図６】
0004062947.tif 000007
【図７】
0004062947.tif 000008
【図８】
0004062947.tif 000009
【図９】
0004062947.tif 000010
【図１０】
0004062947.tif 000011
【図１１】
0004062947.tif 000012
【図１２】
0004062947.tif 000013
【図１３】
0004062947.tif 000014
【図１４】
0004062947.tif 000015
【図１５】
0004062947.tif 000016
【図１６】
0004062947.tif 000017
【図１７】
0004062947.tif 000018
【図１８】
0004062947.tif 000019
【図１９】
0004062947.tif 000020
【図２０】
0004062947.tif 000021
【図２１】
0004062947.tif 000022
【図２２】
0004062947.tif 000023
【図２３】
0004062947.tif 000024
【図２４】
0004062947.tif 000025
【図２５】
0004062947.tif 000026
【図２６】
0004062947.tif 000027
【図２７】
0004062947.tif 000028
【図２８】
0004062947.tif 000029
【図２９】
0004062947.tif 000030
【図３０】
0004062947.tif 000031
【図３１】
0004062947.tif 000032
【図３２】
0004062947.tif 000033
【図３３】
0004062947.tif 000034
【図３４】
0004062947.tif 000035