(57)【要約】【課題】持続的に記憶されたオブジェクトをアクセスしかつ更新するプログラムの中に主メモリに記憶されたオブジェクトをアクセスするコンパイルされたプログラムを自動的に変換するシステム及び方法を提供する。【解決手段】初期コンピュータ・プログラムは、少なくとも第１のオブジェクト・クラスにおけるオブジェクトをアクセスしかつ更新するためのオリジナル命令を含む。オリジナル命令は、コンピュータの主メモリのオブジェクトをアクセスしかつ更新する。システムは、オブジェクト・ローディング命令及びオブジェクト記憶命令をオリジナル命令に追加することによって改訂されたコンピュータ・プログラムを生成すべく初期コンピュータ・プログラムを自動的に改訂する。【選択図】図１
2008262585.tif 000002
【特許請求の範囲】
【請求項１】
持続的に記憶されたオブジェクトをアクセスしかつ更新するオブジェクト指向型コンピュータ・プログラムを生成する方法であって、
コンピュータの主メモリに記憶されたオブジェクトをアクセスしかつ更新するオリジナル命令を含む初期コンピュータ・プログラムを受け取り、
改訂されたコンピュータ・プログラムの実行中に、各前記オブジェクトが最初にアクセスされるときに前記オブジェクトのそれぞれを持続性記憶装置から前記主メモリの中にロードする、オブジェクト・ローディング命令を追加し、
前記改訂されたコンピュータ・プログラムの実行中に、所定事象の発生により前記コンピュータの主メモリの前記オブジェクトの内のそれぞれを前記持続性記憶装置の中に記憶するオブジェクト記憶命令を追加することによって、
前記改訂されたコンピュータ・プログラムを生成すべく前記初期コンピュータ・プログラムを自動的に改訂する
段階を具備することを特徴とする方法。
【請求項２】
前記改訂段階は、前記改訂されたコンピュータ・プログラムの実行中に、前記コンピュータの主メモリのどのオブジェクトが新しい及び／又は更新されたデータを含むのかを示しているデータを記憶するダーティ・オブジェクト・マーキング命令を追加することを更に含み、
前記オブジェクト記憶命令は、新しい及び／又は更新されたデータを含む前記コンピュータの主メモリの前記オブジェクトのそれらを前記持続性記憶装置に記憶することを特徴とする請求項１に記載の方法。
【請求項３】
前記オリジナル命令によってアクセスされかつ更新された前記オブジェクトは、オブジェクト・クラスの第１のセットにおけるオブジェクトを含み、かつ前記オブジェクト記憶命令によって前記持続性記憶装置に記憶された前記オブジェクトは、前記第１のセットのサブセットであるオブジェクト・クラスの第２のセットにおけるオブジェクトを含み、
前記オリジナル命令は、前記オブジェクト・クラスの第１のセットにおける前記オブジェクトに関連付けられたデータ構造を定義するためのオブジェクト・データ構造定義命令を含み、
前記改訂段階は、
前記オブジェクト・クラスの第２のセットにおける前記オブジェクトに、前記オブジェクト・クラスの第２のセットにおける前記オブジェクトによって参照されるオブジェクトに対する主メモリ・オブジェクト・ポインタ及び持続性記憶装置オブジェクト識別子の両方を記憶することができるように前記オブジェクト・クラスの第２のセットに関連付けられた前記データ構造を改訂する補足オブジェクト定義命令を追加することを更に含む
ことを特徴とする請求項１または２に記載の方法。
【請求項４】
前記オブジェクト・ローディング命令によって主メモリの中にロードされたオブジェクトは、主メモリにロードされた前記オブジェクトによって参照される持続性記憶装置におけるオブジェクトに対するヌル・オブジェクト・ポインタを含み、
前記改訂段階は、前記オブジェクト・クラスの第２のセットにおけるオブジェクトのヌル・オブジェクト・ポインタがアクセスされるときにはいつでも前記オブジェクト・ローディング命令が呼出されるように前記初期コンピュータ・プログラムを改訂することを含むことを特徴とする請求項３に記載の方法。
【請求項５】
前記オリジナル命令によってアクセスされかつ更新された前記オブジェクトは、オブジェクト・クラスの第１のセットにおけるオブジェクトを含み、かつ前記オブジェクト記憶命令によって前記持続性記憶装置に記憶された前記オブジェクトは、前記第１のセットのサブセットであるオブジェクト・クラスの第２のセットにおけるオブジェクトを含み、
前記オリジナル命令は、前記オブジェクト・クラスの第１のセットにおける前記オブジェクトに関連付けられたデータ構造を定義するためのオブジェクト・データベース構造定義命令を含み、
前記改訂段階は、
前記オブジェクト・クラスの第２のセットにおける前記オブジェクトに、前記オブジェクト・クラスの第２のセットにおける前記オブジェクトによって参照されるオブジェクトに対する主メモリ・オブジェクト・ポインタ及び持続性記憶装置オブジェクト識別子の両方を記憶することができるように前記オブジェクト・クラスの第２のセットに関連付けられた前記データ構造を改訂する補足オブジェクト定義命令を追加することを更に含む
ことを特徴とする請求項１に記載の方法。
【請求項６】
データ処理システム上で実行されるプログラムによるアクセスに対するデータを記憶するためのメモリであって、
コンピュータの主メモリに記憶されたオブジェクトをアクセスしかつ更新するためのオリジナル命令を含む初期コンピュータ・プログラムを変更するためのポストプロセッサ手順を備え、
前記ポストプロセッサ手順は、前記初期コンピュータ・プログラムに補足命令を追加することによって改訂されたコンピュータ・プログラムを生成すべく前記初期コンピュータ・プログラムを自動的に改訂する命令を含み、前記補足命令は、
前記改訂されたコンピュータ・プログラムの実行中に、各前記オブジェクトが最初にアクセスされるときに前記オブジェクトのそれぞれを持続性記憶装置から前記主メモリの中にロードするオブジェクト・ローディング命令、
前記改訂されたコンピュータ・プログラムの実行中に、所定の事象の発生により前記コンピュータの主メモリの前記オブジェクトの内のそれぞれを前記持続性記憶装置の中に記憶するオブジェクト記憶命令
を含んでいることを特徴とするメモリ。
【請求項７】
前記補足命令は、前記改訂されたコンピュータ・プログラムの実行中に、前記コンピュータの主メモリにおけるどのオブジェクトが新しい及び／又は更新されたデータを含むものかを示しているデータを記憶するダーティ・オブジェクト・マーキング命令を含み、
前記オブジェクト記憶命令は、新しい及び／又は更新されたデータを含む前記コンピュータの主メモリにおける前記オブジェクトのそれらを前記持続性記憶装置に記憶することを特徴とする請求項６に記載のメモリ。
【請求項８】
前記オリジナル命令によってアクセスされかつ更新された前記オブジェクトは、オブジェクト・クラスの第１のセットにおけるオブジェクトを含み、かつ前記オブジェクト記憶命令によって前記持続性記憶装置に記憶された前記オブジェクトは、前記第１のセットのサブセットであるオブジェクト・クラスの第２のセットにおけるオブジェクトを含み、
前記オリジナル命令は、前記オブジェクト・クラスの第１のセットにおける前記オブジェクトに関連付けられたデータ構造を定義するためのオブジェクト・データ構造定義命令を含み、
前記補足命令は、
前記オブジェクト・クラスの第２のセットにおける前記オブジェクトに、前記オブジェクト・クラスの第２のセットにおける前記オブジェクトによって参照されるオブジェクトに対する主メモリ・オブジェクト・ポインタ及び持続性記憶装置オブジェクト識別子の両方を記憶することができるように前記オブジェクト・クラスの第２のセットに関連付けられた前記データ構造を改訂する補足オブジェクト定義命令を更に含む
ことを特徴とする請求項６または７に記載のメモリ。
【請求項９】
前記オブジェクト・ローディング命令によって主メモリの中にロードされたオブジェクトは、主メモリにロードされた前記オブジェクトによって参照される持続性記憶装置におけるオブジェクトに対するヌル・オブジェクト・ポインタを含み、
前記ポストプロセッサ手順は、前記オブジェクト・クラスの第２のセットにおけるオブジェクトのヌル・オブジェクト・ポインタがアクセスされるときにはいつでも前記オブジェクト・ローディング命令が呼出されるように前記初期コンピュータ・プログラムを改訂することを特徴とする請求項８に記載のメモリ。
【請求項１０】
前記オリジナル命令によってアクセスされかつ更新された前記オブジェクトは、オブジェクト・クラスの第１のセットにおけるオブジェクトを含み、かつ前記オブジェクト記憶命令によって前記持続性記憶装置に記憶された前記オブジェクトは、前記第１のセットのサブセットであるオブジェクト・クラスの第２のセットにおけるオブジェクトを含み、
前記オリジナル命令は、前記オブジェクト・クラスの第１のセットにおける前記オブジェクトに関連付けられたデータ構造を定義するためのオブジェクト・データ構造定義命令を含み、
前記補足命令は、
前記オブジェクト・クラスの第２のセットに、前記オブジェクト・クラスの第２のセットにおける前記オブジェクトによって参照されるオブジェクトに対して主メモリ・オブジェクト・ポインタ及び持続性記憶装置オブジェクト識別子の両方を記憶することができるように前記オブジェクト・クラスの第２のセットに関連付けられた前記データ構造を改訂する補足オブジェクト定義命令を更に含む
ことを特徴とする請求項６に記載のメモリ。
【請求項１１】
コンピュータ・システムであって、
オブジェクトを記憶するための主メモリを含んでいる、メモリを備え、
前記メモリは、初期コンピュータ・プログラム、改訂されたコンピュータ・プログラム及び、前記主メモリに記憶されたオブジェクトをアクセスしかつ更新するためのオリジナル命令を含む初期コンピュータ・プログラムを変更するためのポストプロセッサ手順を更に記憶しており、
前記ポストプロセッサ手順は、前記初期コンピュータ・プログラムに補足命令を追加することによって改訂されたコンピュータ・プログラムを生成すべく前記初期コンピュータ・プログラムを自動的に改訂するための命令を含んでおり、該補足命令は、
前記改訂されたコンピュータ・プログラムの実行中に、各前記オブジェクトが最初にアクセスされるときに前記オブジェクトのそれぞれを持続性記憶装置から前記主メモリの中にロードするオブジェクト・ローディング命令、及び
前記改訂されたコンピュータ・プログラムの実行中に、所定の事象の発生により前記コンピュータの主メモリの前記オブジェクトの対応するものを前記持続性記憶装置の中に記憶するオブジェクト記憶命令
を含むことを特徴とするコンピュータ・システム。
【請求項１２】
前記補足命令は、前記改訂されたコンピュータ・プログラムの実行中に、前記コンピュータの主メモリにおけるどのオブジェクトが新しい及び／又は更新されたデータを含むものかを示しているデータを記憶するダーティ・オブジェクト・マーキング命令を含み、
前記オブジェクト記憶命令は、新しい及び／又は更新されたデータを含む前記コンピュータの主メモリにおける前記オブジェクトのそれらを前記持続性記憶装置に記憶することを特徴とする請求項１１に記載のコンピュータ・システム。
【請求項１３】
前記オリジナル命令によってアクセスされかつ更新された前記オブジェクトは、オブジェクト・クラスの第１のセットにおけるオブジェクトを含み、かつ前記オブジェクト記憶命令によって前記持続性記憶装置に記憶された前記オブジェクトは、前記第１のセットのサブセットであるオブジェクト・クラスの第２のセットにおけるオブジェクトを含み、
前記オリジナル命令は、前記オブジェクト・クラスの第１のセットにおける前記オブジェクトに関連付けられたデータ構造を定義するためのオブジェクト・データ構造定義命令を含み、
前記補足命令は、
前記オブジェクト・クラスの第２のセットに、前記オブジェクト・クラスの第２のセットにおける前記オブジェクトによって参照されるオブジェクトに対して主メモリ・オブジェクト・ポインタ及び持続性記憶装置オブジェクト識別子の両方を記憶することができるように前記オブジェクト・クラスの第２のセットに関連付けられた前記データ構造を改訂する補足オブジェクト定義命令を更に含む
ことを特徴とする請求項１１または１２に記載のコンピュータ・システム。
【請求項１４】
前記オブジェクト・ローディング命令によって主メモリの中にロードされたオブジェクトは、主メモリにロードされた前記オブジェクトによって参照される持続性記憶装置におけるオブジェクトに対するヌル・オブジェクト・ポインタを含み、
前記ポストプロセッサ手順は、前記オブジェクト・クラスの第２のセットにおけるオブジェクトのヌル・オブジェクト・ポインタがアクセスされるときにはいつでも前記オブジェクト・ローディング命令が呼出されるように前記初期コンピュータ・プログラムを改訂することを特徴とする請求項１３に記載のコンピュータ・システム。
【請求項１５】
前記オリジナル命令によってアクセスされかつ更新された前記オブジェクトは、オブジェクト・クラスの第１のセットにおけるオブジェクトを含み、かつ前記オブジェクト記憶命令によって前記持続性記憶装置に記憶された前記オブジェクトは、前記第１のセットのサブセットであるオブジェクト・クラスの第２のセットにおけるオブジェクトを含み、
前記オリジナル命令は、前記オブジェクト・クラスの第１のセットにおける前記オブジェクトに関連付けられたデータ構造を定義するためのオブジェクト・データ構造定義命令を含み、
前記補足命令は、
前記オブジェクト・クラスの第２のセットに、前記オブジェクト・クラスの第２のセットにおける前記オブジェクトによって参照されるオブジェクトに対して主メモリ・オブジェクト・ポインタ及び持続性記憶装置オブジェクト識別子の両方を記憶することができるように前記オブジェクト・クラスの第２のセットに関連付けられた前記データ構造を改訂する補足オブジェクト定義命令を更に含む
ことを特徴とする請求項１３に記載のコンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、データベースに記憶されたデータを処理するためにオブジェクト指向型コンピュータ・プログラムを用いるシステム及び方法に関し、特に、データベースからデータを検察し、かつ適切な時間にデータベースの中に戻して新しくかつ変更されたデータを記憶するために命令を挿入するようにデータベースのデータをアクセスするオブジェクト分類方法を自動的に変更するシステム及び方法に関する。
【背景技術】
【０００２】
オブジェクト指向型ＤＢＭＳｓ（データベース管理システム）は、言語オブジェクトをプログラムするための持続的な記憶(persistent storage)を供給し、かつそれらは、プログラミング言語の事実上あらゆるデータ構造の記憶を支持する。対照的に、従来のレコード−構造型ＤＢＭＳｓは、データをデータベース及びプログラミング言語表現の間で前後にコピーすべく埋込型データベース言語（例えば、ＳＱＬ）ステートメントまたは手順呼出しを必要とし、かつそれらは、レコードの記録だけを支持する。ある新しい製品は、従来のレコード−指向型データベースをプログラミング言語オブジェクトに自動的にマップさせ、それゆえに、オブジェクト指向型ＤＢＭＳとして同じプログラマーのビューを供給する。本発明は、これらのオブジェクト指向型マッピング及びオブジェクト指向型ＤＢＭＳｓに対する革新的インプリメンテーション技術である。我々の目的のために、両方に対して後者の用語を用いる。
【０００３】
オブジェクト指向型データベースの興味をそそる態様は、そのようなデータベースを処理（操作）するために用いるコンピュータ・プログラムが従来のデータベース・アクセス・プログラムよりも理解するのが容易であるということである。オブジェクト指向型データベースのより重要な利点は、“静的データ型エンフォースメント(static data type enforcement)”がデータベースをアクセスするコンピュータ・プログラムに適用できるということである。これは、そのようなプログラムのコンパイラが、特定のデータベース・フィールドに記憶された全てのデータベースがそのフィールドに対して定義されたデータ型に一致することを確実にすることができるということを意味する。それゆえに、整数を従業員（雇い人）の名前フィードの中に入れることを試みるプログラムは、オブジェクト指向型システムのコンパイラによって拒否されるであろう。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
残念ながら、ＤＢＭＳ（データベース管理システム）のディスクまたは他の２次メモリ上に記憶されたデータをアクセスするためにオブジェクト指向型プログラムを書くことは、一見してそれが見えるよりも難しい。オブジェクト・フィールドへのアクセスをデータベース照会の中に変換（翻訳）するオブジェクト分類方法を書くことは、かなり直接的であるが、データがデータベースから読取られることが必要なとき及びデータがデータベースの中に書き戻されることが必要なときを一貫して決定するためにコードを書くことは、オブジェクトへの参照（即ち、他のオブジェクトに対するオブジェクトにおける参照）が用いられるような方法なので、ある程度注意を要する。例えば、同じデータベース・オブジェクトを表わすメモリにおいて二つのオブジェクトを不注意に生成しないことは、重要である。
【０００５】
この文書の目的に対して、用語“メモリ”及び“主メモリ”は、コンピュータ・システムのランダム・アクセス・メモリまたは１次メモリを意味すべく定義され、用語“２次メモリ”及び“持続的記憶”は、ディスク・メモリまたは、主メモリよりも持続的または長い期間ベイシスでデータを保持する記憶の他の形を意味する。
実際の持続的記憶データからデータを読取りかつそれに書くための機構でそれら自体を考慮することなく、それらが主メモリにおけるデータベース・オブジェクトを単に処理することであっても、プログラマがオブジェクト指向型データベース使用プログラムを書くことができるようにすることが、本プログラムの目的である。
【０００６】
より特定的には、適時に、データベースからメモリのオブジェクトの中にデータをコピーしかつメモリのオブジェクトからデータの中に新しくかつ変更されたデータをコピーするために必要な追加のコードを自動的に挿入するようにコンパイルされたオブジェクト指向型データベース・プログラムを“後処理(post processing) ”するシステム及び方法を供給することが本発明の目的である。この方法で、プログラマは、非持続的データを記憶しているオブジェクトとは異ならない、初期ソース・コード・プログラムの目的に対して、持続的に記憶されたデータを表しているオブジェクトが処理されるようなオジェクト指向型データベース・プログラムを書くことができる。
【課題を解決するための手段】
【０００７】
本発明の上記目的は、持続的に記憶されたオブジェクトをアクセスしかつ更新するオブジェクト指向型コンピュータ・プログラムを生成する方法であって：コンピュータの主メモリに記憶されたオブジェクトをアクセスしかつ更新するオリジナル命令を含む初期コンピュータ・プログラムを受け取り；改訂されたコンピュータ・プログラムの実行中に、各対応オブジェクトが最初にアクセスされるときにオブジェクトの対応するもの持続性記憶装置から主メモリの中にロードする、オブジェクト・ローディング命令を追加し；かつ改訂されたコンピュータ・プログラムの実行中に、所定事象の発生によりコンピュータの主メモリのオブジェクトの対応するものを持続性記憶装置の中に記憶するオブジェクト記憶命令を追加することによって：改訂されたコンピュータ・プログラムを生成すべく初期コンピュータ・プログラムを自動的に改訂する段階を具備する方法によって達成される。
【０００８】
本発明の方法では、改訂段階は、改訂されたコンピュータ・プログラムの実行中に、コンピュータの主メモリのどのオブジェクトが新しい及び／又は更新されたデータを含むのかを示しているデータを記憶するダーティ・オブジェクト・マーキング命令を追加することを更に含み、オブジェクト記憶命令は、新しい及び／又は更新されたデータを含むコンピュータの主メモリのオブジェクトのそれらを持続性記憶装置に記憶するようにしてもよい。
本発明の方法では、オリジナル命令によってアクセスされかつ更新されたオブジェクトは、オブジェクト・クラスの第１のセットにおけるオブジェクトを含み、かつオブジェクト記憶命令によって持続性記憶装置に記憶されたオブジェクトは、第１のセットのサブセットであるオブジェクト・クラスの第２のセットにおけるオブジェクトを含み；オリジナル命令は、オブジェクト・クラスの第１のセットにおけるオブジェクトに関連付けられたデータ構造を定義するためのオブジェクト・データ構造定義命令を含み；改訂段階は：オブジェクト・クラスの第２のセットにおけるオブジェクトに、オブジェクト・クラスの第２のセットにおけるオブジェクトによって参照されるオブジェクトに対する主メモリ・オブジェクト・ポインタ及び持続性記憶装置オブジェクト識別子の両方を記憶することができるようにオブジェクト・クラスの第２のセットに関連付けられたデータ構造を改訂する補足オブジェクト定義命令を追加することを更に含むようにしてもよい。
【０００９】
本発明の方法では、オブジェクト・ローディング命令によって主メモリの中にロードされたオブジェクトは、主メモリにロードされたオブジェクトによって参照される持続性記憶装置におけるオブジェクトに対するヌル・オブジェクト・ポインタを含み；改訂段階は、オブジェクト・クラスの第２のセットにおけるオブジェクトのヌル・オブジェクト・ポインタがアクセスされるときにはいつでもオブジェクト・ローディング命令が呼出されるように初期コンピュータ・プログラムを改訂することを含むようにしてもよい。
本発明の方法では、オリジナル命令によってアクセスされかつ更新されたオブジェクトは、オブジェクト・クラスの第１のセットにおけるオブジェクトを含み、かつオブジェクト記憶命令によって持続性記憶装置に記憶されたオブジェクトは、第１のセットのサブセットであるオブジェクト・クラスの第２のセットにおけるオブジェクトを含み；オリジナル命令は、オブジェクト・クラスの第１のセットにおけるオブジェクトに関連付けられたデータ構造を定義するためのオブジェクト・データベース構造定義命令を含み；改訂段階は：
オブジェクト・クラスの第２のセットにおけるオブジェクトに、オブジェクト・クラスの第２のセットにおけるオブジェクトによって参照されるオブジェクトに対する主メモリ・オブジェクト・ポインタ及び持続性記憶装置オブジェクト識別子の両方を記憶することができるようにオブジェクト・クラスの第２のセットに関連付けられたデータ構造を改訂する補足オブジェクト定義命令を追加することを更に含むようにしてもよい。
【００１０】
また、本発明の上記目的は、データ処理システム上で実行されるプログラムによるアクセスに対するデータを記憶するためのメモリであって：コンピュータの主メモリに記憶されたオブジェクトをアクセスしかつ更新するためのオリジナル命令を含む初期コンピュータ・プログラムを変更するためのポストプロセッサ手順を備え；ポストプロセッサ手順は、初期コンピュータ・プログラムに補足命令を追加することによって改訂されたコンピュータ・プログラムを生成すべく初期コンピュータ・プログラムを自動的に改訂する命令を含み、補足命令は：改訂されたコンピュータ・プログラムの実行中に、各対応オブジェクトが最初にアクセスされるときにオブジェクトの対応するものを持続性記憶装置から主メモリの中にロードするオブジェクト・ローディング命令；及び改訂されたコンピュータ・プログラムの実行中に、所定の事象の発生によりコンピュータの主メモリのオブジェクトの対応するものを持続性記憶装置の中に記憶するオブジェクト記憶命令を含んでいるメモリによって達成される。
【００１１】
本発明のメモリでは、補足命令は、改訂されたコンピュータ・プログラムの実行中に、コンピュータの主メモリにおけるどのオブジェクトが新しい及び／又は更新されたデータを含むものかを示しているデータを記憶するダーティ・オブジェクト・マーキング命令を含み；オブジェクト記憶命令は、新しい及び／又は更新されたデータを含むコンピュータの主メモリにおけるオブジェクトのそれらを持続性記憶装置に記憶するようにしてもよい。
本発明のメモリでは、オリジナル命令によってアクセスされかつ更新されたオブジェクトは、オブジェクト・クラスの第１のセットにおけるオブジェクトを含み、かつオブジェクト記憶命令によって持続性記憶装置に記憶されたオブジェクトは、第１のセットのサブセットであるオブジェクト・クラスの第２のセットにおけるオブジェクトを含み；オリジナル命令は、オブジェクト・クラスの第１のセットにおけるオブジェクトに関連付けられたデータ構造を定義するためのオブジェクト・データ構造定義命令を含み；補足命令は：オブジェクト・クラスの第２のセットにおけるオブジェクトに、オブジェクト・クラスの第２のセットにおけるオブジェクトによって参照されるオブジェクトに対する主メモリ・オブジェクト・ポインタ及び持続性記憶装置オブジェクト識別子の両方を記憶することができるようにオブジェクト・クラスの第２のセットに関連付けられたデータ構造を改訂する補足オブジェクト定義命令を更に含むようにしてもよい。
【００１２】
本発明のメモリでは、オブジェクト・ローディング命令によって主メモリの中にロードされたオブジェクトは、主メモリにロードされたオブジェクトによって参照される持続性記憶装置におけるオブジェクトに対するヌル・オブジェクト・ポインタを含み；ポストプロセッサ手順は、オブジェクト・クラスの第２のセットにおけるオブジェクトのヌル・オブジェクト・ポインタがアクセスされるときにはいつでもオブジェクト・ローディング命令が呼出されるように初期コンピュータ・プログラムを改訂するようにしてもよい。
本発明のメモリでは、オリジナル命令によってアクセスされかつ更新されたオブジェクトは、オブジェクト・クラスの第１のセットにおけるオブジェクトを含み、かつオブジェクト記憶命令によって持続性記憶装置に記憶されたオブジェクトは、第１のセットのサブセットであるオブジェクト・クラスの第２のセットにおけるオブジェクトを含み；オリジナル命令は、オブジェクト・クラスの第１のセットにおけるオブジェクトに関連付けられたデータ構造を定義するためのオブジェクト・データ構造定義命令を含み；補足命令は：オブジェクト・クラスの第２のセットに、オブジェクト・クラスの第２のセットにおけるオブジェクトによって参照されるオブジェクトに対して主メモリ・オブジェクト・ポインタ及び持続性記憶装置オブジェクト識別子の両方を記憶することができるようにオブジェクト・クラスの第２のセットに関連付けられたデータ構造を改訂する補足オブジェクト定義命令を更に含むようにしてもよい。
【００１３】
更に本発明の上記目的は、コンピュータ・システムであって：オブジェクトを記憶するための主メモリを含んでいる、メモリを備え；メモリは、初期コンピュータ・プログラム、改訂されたコンピュータ・プログラム及び、主メモリに記憶されたオブジェクトをアクセスしかつ更新するためのオリジナル命令を含む初期コンピュータ・プログラムを変更するためのポストプロセッサ手順を更に記憶しており；ポストプロセッサ手順は、初期コンピュータ・プログラムに補足命令を追加することによって改訂されたコンピュータ・プログラムを生成すべく初期コンピュータ・プログラムを自動的に改訂するための命令を含んでおり、補足命令は：改訂されたコンピュータ・プログラムの実行中に、各対応オブジェクトが最初にアクセスされるときにオブジェクトの対応するものを持続性記憶装置から主メモリの中にロードするオブジェクト・ローディング命令；及び改訂されたコンピュータ・プログラムの実行中に、所定の事象の発生によりコンピュータの主メモリのオブジェクトの対応するものを持続性記憶装置の中に記憶するオブジェクト記憶命令を含むコンピュータ・システムによって達成される。
【００１４】
本発明のコンピュータ・システムでは、補足命令は、改訂されたコンピュータ・プログラムの実行中に、コンピュータの主メモリにおけるどのオブジェクトが新しい及び／又は更新されたデータを含むものかを示しているデータを記憶するダーティ・オブジェクト・マーキング命令を含み；オブジェクト記憶命令は、新しい及び／又は更新されたデータを含むコンピュータの主メモリにおけるオブジェクトのそれらを持続性記憶装置に記憶するようにしてもよい。
本発明のコンピュータ・システムでは、オリジナル命令によってアクセスされかつ更新されたオブジェクトは、オブジェクト・クラスの第１のセットにおけるオブジェクトを含み、かつオブジェクト記憶命令によって持続性記憶装置に記憶されたオブジェクトは、第１のセットのサブセットであるオブジェクト・クラスの第２のセットにおけるオブジェクトを含み；オリジナル命令は、オブジェクト・クラスの第１のセットにおけるオブジェクトに関連付けられたデータ構造を定義するためのオブジェクト・データ構造定義命令を含み；補足命令は：オブジェクト・クラスの第２のセットに、オブジェクト・クラスの第２のセットにおけるオブジェクトによって参照されるオブジェクトに対して主メモリ・オブジェクト・ポインタ及び持続性記憶装置オブジェクト識別子の両方を記憶することができるようにオブジェクト・クラスの第２のセットに関連付けられたデータ構造を改訂する補足オブジェクト定義命令を更に含むようにしてもよい。
【００１５】
本発明のコンピュータ・システムでは、オブジェクト・ローディング命令によって主メモリの中にロードされたオブジェクトは、主メモリにロードされたオブジェクトによって参照される持続性記憶装置におけるオブジェクトに対するヌル・オブジェクト・ポインタを含み；ポストプロセッサ手順は、オブジェクト・クラスの第２のセットにおけるオブジェクトのヌル・オブジェクト・ポインタがアクセスされるときにはいつでもオブジェクト・ローディング命令が呼出されるように初期コンピュータ・プログラムを改訂するようにしてもよい。
本発明のコンピュータ・システムでは、オリジナル命令によってアクセスされかつ更新されたオブジェクトは、オブジェクト・クラスの第１のセットにおけるオブジェクトを含み、かつオブジェクト記憶命令によって持続性記憶装置に記憶されたオブジェクトは、第１のセットのサブセットであるオブジェクト・クラスの第２のセットにおけるオブジェクトを含み；オリジナル命令は、オブジェクト・クラスの第１のセットにおけるオブジェクトに関連付けられたデータ構造を定義するためのオブジェクト・データ構造定義命令を含み；補足命令は：オブジェクト・クラスの第２のセットに、オブジェクト・クラスの第２のセットにおけるオブジェクトによって参照されるオブジェクトに対して主メモリ・オブジェクト・ポインタ及び持続性記憶装置オブジェクト識別子の両方を記憶することができるようにオブジェクト・クラスの第２のセットに関連付けられたデータ構造を改訂する補足オブジェクト定義命令を更に含むようにしてもよい。
【００１６】
纏めると、本発明は、主メモリに記憶されたオブジェクトをアクセスするコンパイルされたプログラムを、持続的に記憶されたオブジェクトをアクセスしかつ更新するプログラムの中に自動的に変換するシステム及び方法である。初期コンピュータ・プログラムは、少なくとも第１のオブジェクト・クラスにおけるオブジェクトをアクセスしかつ更新するための原始命令(original instructions) を含む。原始命令は、コンピュータの主メモリのオブジェクトをアクセスしかつ更新する。本発明のシステム及び方法は、オブジェクト・ローディングド命令及びオブジェクト記憶命令を原始命令に追加することによって改訂版コンピュータ・プログラムを生成すべく初期コンピュータ・プログラムを自動的に改訂する。
【００１７】
改訂版コンピュータ・プログラムの実行中、オブジェクト・ローディング命令は、オブジェクトが初めてアクセスされるときに持続的に記憶されたオブジェクトの一つのコピーをコンピュータの主メモリの対応オブジェクトの中にロードする。オブジェクト記憶命令は、トランザクションの終了のような、所定の事象の発生により新しいかまたは変更されたデータを含むコンピュータの主メモリのオブジェクトを対応している持続的に記憶されたオブジェクトの中にコピーする。
本発明のシステム及び方法は、改訂版コンピュータ・プログラムの実行中に、新しい及び／又は更新されたデータを含むコンピュータの主メモリのオブジェクトを追跡する、ダーティ・オブジェクト・マーキング命令を原始命令に追加することによって改訂版コンピュータ・プログラムを生成すべく初期コンピュータ・プログラムを更に改訂する。オブジェクト記憶命令は、新しい及び／又は更新されたデータを含むコンピュータの主メモリのオブジェクトのそれらだけをコピーする。
【発明の効果】
【００１８】
本発明の方法は、持続的に記憶されたオブジェクトをアクセスしかつ更新するオブジェクト指向型コンピュータ・プログラムを生成する方法であって：コンピュータの主メモリに記憶されたオブジェクトをアクセスしかつ更新するオリジナル命令を含む初期コンピュータ・プログラムを受け取り；改訂されたコンピュータ・プログラムの実行中に、各対応オブジェクトが最初にアクセスされるときにオブジェクトの対応するもの持続性記憶装置から主メモリの中にロードする、オブジェクト・ローディング命令を追加し；かつ改訂されたコンピュータ・プログラムの実行中に、所定事象の発生によりコンピュータの主メモリのオブジェクトの対応するものを持続性記憶装置の中に記憶するオブジェクト記憶命令を追加することによって：改訂されたコンピュータ・プログラムを生成すべく初期コンピュータ・プログラムを自動的に改訂する段階を具備するので、実際の持続的記憶データからデータを読取りかつそれに書くための機構でそれら自体を考慮することなく、それらが主メモリにおけるデータベース・オブジェクトを単に処理することであっても、プログラマがオブジェクト指向型データベース使用プログラムを書くことができ、かつ適時に、データベースからメモリのオブジェクトの中にデータをコピーしかつメモリのオブジェクトからデータの中に新しくかつ変更されたデータをコピーするために必要な追加のコードを自動的に挿入するようにコンパイルされたオブジェクト指向型データベース・プログラムを後処理することができる。
【００１９】
本発明のメモリは、データ処理システム上で実行されるプログラムによるアクセスに対するデータを記憶するためのメモリであって：コンピュータの主メモリに記憶されたオブジェクトをアクセスしかつ更新するためのオリジナル命令を含む初期コンピュータ・プログラムを変更するためのポストプロセッサ手順を備え；ポストプロセッサ手順は、初期コンピュータ・プログラムに補足命令を追加することによって改訂されたコンピュータ・プログラムを生成すべく初期コンピュータ・プログラムを自動的に改訂する命令を含み、補足命令は：改訂されたコンピュータ・プログラムの実行中に、各対応オブジェクトが最初にアクセスされるときにオブジェクトの対応するものを持続性記憶装置から主メモリの中にロードするオブジェクト・ローディング命令；及び改訂されたコンピュータ・プログラムの実行中に、所定の事象の発生によりコンピュータの主メモリのオブジェクトの対応するものを持続性記憶装置の中に記憶するオブジェクト記憶命令を含んでいるので、実際の持続的記憶データからデータを読取りかつそれに書くための機構でそれら自体を考慮することなく、それらが主メモリにおけるデータベース・オブジェクトを単に処理することであっても、プログラマがオブジェクト指向型データベース使用プログラムを書くことができ、かつ適時に、データベースからメモリのオブジェクトの中にデータをコピーしかつメモリのオブジェクトからデータの中に新しくかつ変更されたデータをコピーするために必要な追加のコードを自動的に挿入するようにコンパイルされたオブジェクト指向型データベース・プログラムを後処理することができる。
【００２０】
本発明のコンピュータ・システムは、オブジェクトを記憶するための主メモリを含んでいる、メモリを備え；メモリは、初期コンピュータ・プログラム、改訂されたコンピュータ・プログラム及び、主メモリに記憶されたオブジェクトをアクセスしかつ更新するためのオリジナル命令を含む初期コンピュータ・プログラムを変更するためのポストプロセッサ手順を更に記憶しており；ポストプロセッサ手順は、初期コンピュータ・プログラムに補足命令を追加することによって改訂されたコンピュータ・プログラムを生成すべく初期コンピュータ・プログラムを自動的に改訂するための命令を含んでおり、補足命令は：改訂されたコンピュータ・プログラムの実行中に、各対応オブジェクトが最初にアクセスされるときにオブジェクトの対応するものを持続性記憶装置から主メモリの中にロードするオブジェクト・ローディング命令；及び改訂されたコンピュータ・プログラムの実行中に、所定の事象の発生によりコンピュータの主メモリのオブジェクトの対応するものを持続性記憶装置の中に記憶するオブジェクト記憶命令を含むので、実際の持続的記憶データからデータを読取りかつそれに書くための機構でそれら自体を考慮することなく、それらが主メモリにおけるデータベース・オブジェクトを単に処理することであっても、プログラマがオブジェクト指向型データベース使用プログラムを書くことができ、かつ適時に、データベースからメモリのオブジェクトの中にデータをコピーしかつメモリのオブジェクトからデータの中に新しくかつ変更されたデータをコピーするために必要な追加のコードを自動的に挿入するようにコンパイルされたオブジェクト指向型データベース・プログラムを後処理することができる。
【発明を実施するための最良の形態】
【００２１】
本発明の更なるオブジェクト及び特徴は、図面を参照することにより以下の詳細の説明及び添付した特許請求の範囲からより容易に明らかであろう。
【００２２】
この文書の目的に対して、用語“データベース使用プログラム”及び“データベース利用プログラム”は、持続的に記憶されたデータベースまたは持続的に記憶されたファイルに記憶されたデータをアクセスするあらゆるプログラムを意味する。
好ましい実施例では、データベース使用プログラムの著者は、用いられるデータベース全体が主メモリに記憶されていても、プログラムを書く。データベース使用プログラムのソース・コードは、従って、現行トランザクションが処理されるならばデータベースに書き戻されることが結果として必要である新しい及び／又は更新されたデータを含む主メモリのオブジェクトを追跡するために、かつ新しいまたは変更されたデータを有するオブジェクトをデータベースに書き戻すために、オブジェクトが持続的に記憶されたデータベースから主メモリにコピーされるべきときを決定するために必要な全てのプログラム・コードが不要である。
結果として、ソース・コード・プログラムは、データベースと主メモリの間で前後に情報を転送するために必要な全てのコードを含んだソース・コード・プログラムよりも読取りかつ改訂することが容易である。
【００２３】
好ましい実施例では、データベース利用プログラムのソース・コードは、サン・マイクロシステムズ（Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，Ｉｎｃ．）によって市販された“マシン・プラットフォーム独立”プログラミング言語である、Ｊａｖａ（登録商標）（ジャワ）プログラミング言語に書き込まれる。データベース利用プログラムのソース・コード２００（図２及び図３参照）は、通常のＪａｖａ（登録商標）コンパイラ２０２を用いてＪａｖａ（登録商標）バイトコード・プログラム２０４の中にコンパイルされ、それにより、多数のオブジェクト・クラスを一般に含むバイトコード・ファイルを生成する。
Ｊａｖａ（登録商標）バイトコード・プログラムは、バーチャル・マシン（仮想計算機）を形成するバイトコード・プログラム・インタープリタ１７６に関して実行される。Ｊａｖａ（登録商標）バイトコード・プログラムは、Ｊａｖａ（登録商標）バイトコード・プログラム・インタープリタがコンピュータ上に存在する限り、コンピュータのオペレーティング・システム及びコンピュータ・ハードウェア・プラットフォームに係わりなく、それらがあらゆるコンピュータ上で実行されうるように設計される。
【００２４】
しかしながら、データベース利用プログラムの初期のコンパイルされたバイトコード・プログラム版は、データベースが持続的記憶に実際に記憶されるのに対して、用いられるデータベース全体が主メモリに記憶されるという誤った想定(false assumption)に基づいてそれが書き込まれていたので、真に機能的なプログラムではない。本発明によれば、データベース利用プログラムの初期のコンパイルされたバイトコード・プログラム版は、コンパイルされたプログラムのオブジェクト・クラスを変更する“ポストプロセッサ”プログラム２０６によって改訂される。ポストプロセッサ２０６は、オブジェクト・ポインタを管理しかつ持続的に記憶されたデータベースに記憶されることが必要な“ダーティ”オブジェクトを追跡するために必要な追加情報の記憶を可能にすべく持続的に記憶されたオブジェクトのコピーを主メモリに記憶するために用いられるオブジェクト・クラスのオブジェクト・データ構造を変更する。また、ポストプロセッサは、オブジェクトが持続的に記憶されたデータベースから主メモリにコピーされるべきときを決定し、データベースから主メモリにオブジェクトをコピーし、現行トランザクションが処理されるならばデータベースへ書き戻されることが結果として必要な新しいまたは変更されたデータを含む主メモリのオブジェクトを追跡し、新しいまたは変更されたデータを有するオブジェクトをデータベースに書き戻すための追加命令を加えることによってコンパイルされたプログラムのオブジェクト・クラスの方法を変更する。
【００２５】
図１を参照すると、データ使用プログラムの動作に関連付けられた１次データ構造のあるものが示されている。この説明の目的に対して、本発明を用いているコンピュータ・システム１００は、高速ランダム・アクセス・メモリから一般に構成されている、主メモリ１０２と、装置がパワー・オフされるときでさえもその中に記憶された情報を保持する一般に磁気ディスク記憶または他の記憶装置である、持続性データ記憶１０４（２次メモリとも呼ばれる）を含むということを想定する。
持続性データ記憶１０４は、この場合には、多数のオブジェクト１０８を記憶するオブジェクト指向型データベースであると想定される、データベース１０６を記憶する。記憶されたオブジェクト１０８の全てまたはほとんどは、データベースにおけるオブジェクトの他のものへのポインタを含む。更に、データベース１０６は、一般に、データベースに記憶されたデータへの全てのアクセスを管理するデータベース管理システム（ＤＢＭＳ）１１０の一部であり、データベースへのアクセスが、ＳＱＬの種々の版に含まれたそれらのようなよく定義された指令を用いて実行されることを一般的に必要とする。この説明の目的に対して、ＤＢＭＳ１１０及びデータベース１０６は、本発明によって変更されないということが想定される。
好ましい実施例では、ランタイム・システム１１２は、データを主メモリ１０２に記憶する、プログラムの実行を制御する。ランタイム・システム１１２によて実行されるプログラムは、オブジェクト指向型プログラムであるとこのアプリケーションの目的に対して想定され、従って、オブジェクト１１４の形でデータを主メモリに記憶する傾向がある。主メモリ１０２に記憶された、オブジェクト１１４−３のような、オブジェクトのあるものは、それらが持続性記憶装置１０４に決して記憶されずそれゆえにそれらを生成した処理よりも長くは存在しないので、“トランジエント（一時）”オブジェクトと呼ばれる。オブジェクト１１４−１及び１１４−２のような、他のオブジェクトは、（Ａ）それらのオブジェクトのコピーが持続性記憶装置１０４に記憶されか、または（Ｂ）それらを生成したトランザクションが成功裏に終了したならばこれらのオブジェクトが持続性記憶装置１０４における記憶に対して構成されるので、“持続性”オブジェクトと呼ばれる。
【００２６】
本発明は、一組のオブジェクト記憶基準の充足（例えば、第１のセットの定義された事象のあるものの発生）によりオブジェクト・データが持続性記憶装置媒体に記憶され、かつ一組のオブジェクト検索基準の充足（例えば、第２のセットの定義された事象のあるものの発生）によりオブジェクト・データが持続性記憶装置媒体から検索されるようなあらゆるシステムに適用可能であるということが理解されるべきである。
図１に示すように、好ましい実施例では、持続性オブジェクトは、持続性データ記述子１２２へのポインタ１２０を含む。好ましい実施例では、持続性データ記述子１２２は、Ａ）フル・オブジェクト識別子（ＯＩＤ）１２４または持続性記憶装置のオブジェクトのアドレス、Ｂ）オブジェクトが“ダーティ”オブジェクトのリストに含まれるならば用いられるリスト・ポインタ１２６、及びＣ）フル・オブジェクト識別子（ＯＩＤ）１２８または別のオブジェクトに対するオブジェクトの各レファレンス１３０のアドレスを含む。メモリ使用を最小化するために、持続性オブジェクトだけが持続性データ記述子１２２を含む。
【００２７】
明瞭のために、好ましい実施例では、オブジェクトがＤＢＭＳ１１０から（即ち、持続性記憶装置１０４から）主メモリ１０２にコピーされるときに、コピーされたオブジェクトの全てのオブジェクト・レファレンスは、ＤＢＭＳオブジェクト識別子（ＯＩＤｓ）とここで呼ばれる６４−ビット以上のオブジェクト・アドレスであるということに注目すべきである。それらＯＩＤｓは、持続性データ記述子１２２に記憶され、かつ主メモリ・オブジェクト・コピー１１４のオブジェクト・レファレンス・フィールド１３０は、（Ａ）参照されたオブジェクトが主メモリ１０２に存在しないならばヌル・ポインタ値で、または（Ｂ）参照されたオブジェクトが主メモリにあるならば主メモリの参照されたオブジェクトのコピーへの主メモリ・オブジェクト・ポインタで置換される。代替実施例ではＯＩＤｓは、データベースからコピーされたオブジェクトに関連付けられた固有の１次キー値で構成されうる。
【００２８】
好ましい実施例では、持続性オブジェクトに対する各オブジェクト・クラスは、また、一時オブジェクトを維持する。一時オブジェクトは、同じオブジェクト・クラスの持続性オブジェクトと同じデータ構造を有するが、ヌル持続性データ記述子ポインタ１２０を有する。同じオブジェクト・クラスの一時及び持続性オブジェクトの両方を支持する一つの理由は、一時オブジェクトのデータが持続性記憶装置１０４に記憶される必要が決してなくても、種々の計算中の使用のためにオブジェクト並びに持続性オブジェクトと同じ型の中間または一時“ワーキング”オブジェクトの一時的コピーを作ることがしばしば都合がよいということである。
ある一定のオブジェクト・クラスが持続性オブジェクトに対してだけ用いられるような本発明のインプリメンテーションでは、それらオブジェクト・クラス定義は、持続性データ記述子ポインタ１２０を除去しかつ、その代わりに、主オブジェクト定義の一部として持続性データ記述子１２２自体を含むべく改訂されうる。
【００２９】
主メモリに記憶されたオブジェクト１１４を追跡すべく二つの追加データ構造が好ましい実施例において用いられる。まず、ハッシュ・テーブル１４０は、主メモリに記憶されかつＤＢＭＳ  ＯＩＤｓを主メモリ・オブジェクト・ポインタの中にマップするために用いられる。オブジェクトがＤＢＭＳから主メモリにコピーされるときにはいつでも、対応エントリは、オブジェクトのＯＩＤ並びにその主メモリ・オブジェクト・ポインタを示すハッシュ・テーブルに追加される。
ハッシュ・テーブル１４０のあらゆるオブジェクトのフルＤＢＭＳ  ＯＩＤを探索（ルック・アップ）するとき、対応エントリがハッシュ・テーブル１４０に見出されないならば、オブジェクトは、主メモリにまだコピーされていない。他方、対応エントリがハッシュ・テーブルに見出されるならば、そのエントリのオブジェクト・ポインタは、主メモリのオブジェクトをポイントする（指し示す）。
【００３０】
第２に、リスト・ヘッダ１４２は、持続性記憶装置にコピー・バックされることが必要であるオブジェクトのリンクされたリストをポイントする。それらが主メモリに書き戻されることが必要であるキャッシュ・メモリ（“ダーティ”キャッシュ回線と呼ばれる）における変更されたデータのようなものなので、これらのオブジェクトは、“ダーティ”オブジェクトと呼ばれる。リンクされたリストは、リスト・ヘッダ１４２のポインタ、プラス、ダーティ・オブジェクトの持続性データ記述子１２２における一連のポインタ１２６によって形成される。ダーティ・オブジェクト・リストが空ならば、リスト・ヘッダ１４２は、ヌル・ポインタを含む。ダーティ・オブジェクトが空でないとき、リスト・ヘッダ１４２は、ダーティ・オブジェクト・リストに追加されるべき最終オブジェクト(last object) をポイントし、順次、ダーティ・オブジェクト・リストに追加されるべき最終オブジェクトの次のものをポイントする、等。ダーティ・オブジェクト・リストに追加されるべき最初の項目であった、ダーティ・オブジェクト・リストの最終項目は、その次のポインタ・フィールド１２６にヌル・ポインタを有する。
【００３１】
“新しいオブジェクト”がダーティ・オブジェクト・リストに追加されることが必要であるときに、実行されるべき一連の段階は：（Ａ）リスト・ヘッダ１４２のオブジェクト・ポインタを新しいオブジェクトの次のダーティ・オブジェクト・ポインタ・フィールド１２６の中にコピーし、かつ（Ｂ）新しいオブジェクトへのポインタをリスト・ヘッダ１４２に記憶することである。
好ましい実施例で成された別の組の想定は、データベース・オブジェクトが有限トランザクションのコンテキストで用いられ、かつ各トランザクションが、“スタート・トランザクション(start transaction) ”によって一般に規定された、明確に規定された始まり、及びトランザクションの結果がデータベースに永続的（恒久的）に記憶されるべきであるならば“コミット・トランザクション(commit transaction)”によって及びトランザクションの結果が放棄されるべきであるならば“アボート・トランザクション(abort transaction) ”によって一般に規定された、明確に規定された終りを有する。るということである。更に、各トランザクションの実行中に、ランタイム・システム１１２は、主メモリにコピーされた全てのデータベース・オブジェクト上に読み取りロック(read lock) を要求しなければならず、更に、その内容がランタイム・システム１１２により実行されるプログラムによって変更される全てのデータベース・オブジェクト上に書込みロック(write lock)を要求しなければならないということが想定される。
【００３２】
より特定的に、データ利用プログラムのソース・コードを準備しているプログラマは、各トランザクションの開始におけるデータベース(Database)・オブジェクト・クラスのスタート・トランザクション(StartTransaction)方法を呼出すために
Invoke Database.StartTransaction
に等しいソース・コードにステートメントを含まなければならない。同様にプログラマは、各成功裏に終了したトランザクションの終結(conclusion)におけるデータベース(Database)・オブジェクト・クラスのエンド・トランザクション(EndTransaction)方法を呼出すために
Invoke Database.EndTransaction
に等しいソース・コードにステートメントを含まなければならず、かつ各非成功裏に終了したトランザクションの開始におけるデータベース(Database)・オブジェクト・クラスのアボート・トランザクション(AbortTransaction)方法を呼出すために
InvokeDatabase.AbortTransaction 
に等しいソース・コードにステートメントを含まなければならない。
【００３３】
スタート・トランザクション(StartTransaction)、エンド・トランザクション(EndTransaction)、アボート・トランザクション(AbortTransaction)方法は、図４に関連して以下により詳細に説明される。
ランタイム・システムが動作するような“明確に規定されたトランザクション”コンテキストにより、各トランザクションの終結で、主メモリに記憶された一組のオブジェクトは、好ましくはそのＰＤＤの各オブジェクトのＯＩＤをヌル・アウトすることによって、通常、無効にされる。更に、ハッシュ・テーブル１４０の内容は、クリアされ、かつヌル・ポインタは、ダーティ・リスト・ヘッダ１４２に記憶され、それにより、実行されるプログラマがこれらのオブジェクトのいずれかに対する追加ポインタを生成しない限りガーベッジ・コレクションに対して主メモリのオブジェクトを準備する。しかしながら、全てのそのようなオブジェクトが無効でありかつ使用不可能であると考えられるべきなので、適切に書かれたプログラマは、トランザクションが終了した後に主メモリのあらゆるオブジェクトへのポインタを維持すべきでない。
【００３４】
通常、主メモリに記憶された全てまたはほとんどのトランジエント・オブジェクトは、主メモリに記憶された持続性オブジェクトによって、直接的または間接的に、参照されるということに注目する。主メモリの全ての持続性オブジェクトを無効にしかつ全てのそのような持続性オブジェクトを到達不可能にすることによって、また、主メモリのトランジエント・オブジェクトは、通常、到達不可能になりそれゆえにガーベッジ・コレクションの準備ができる。
代替実施例では、使用不可能なオブジェクトを削除するためにガーベック・コレクションを用いないシステムにおけるように、主メモリのオブジェクトは、明示的に削除されかつ割当てを解除されうる。
コンピュータ・システム構成
図２を参照すると、好ましい実施例では、本発明の好ましい実施例を組み込んでいるコンピュータ・システム１００は、一般に、スタンド・アロン・コンピュータ、またはネットワーク型コンピュータのシステムのクライアント・コンピュータ１５０またはサーバ・コンピュータ１５２のいずれかである。本説明の目的のために、本発明の好ましい実施例は、クライアント・コンピュータ１５０上に埋め込まれるものと想定する。クライアント・コンピュータ１５０は、中央処理装置（ＣＰＵ）１６０、ユーザ・インターフェイス１６２、及び通信ネットワーク１６６を介する他のコンピュータとの通信のための通信インターフェイス１６４を含む。
【００３５】
主メモリ１０２及び持続性記憶装置１０４の両方を含む、メモリ１０２／１０４は、
・  オペレーティング・システム１７０；
・  インターネット通信マネージャ・プログラム１７２；
・  指定されたプログラムがある所定の完全性基準を満足するか否かを検証するＪａｖａ（登録商標）バイトコード・プログラム・ベリファイヤ１７４；
・  アプリケーション・プログラムを実行するＪａｖａ（登録商標）バイトコード・プログラム・インタープリタ１７６；
・  オブジェクト・クラスをユーザのアドレス空間の中にロードし、かつ各ロードされたオブジェクト・クラスに関連付けられた方法の完全性を検証するためにバイコード・プログラム・ベリファイヤを用いる、クラス・ローダ１７８；
・  使用中及び／又はコンピュータ１０２のユーザの使用のために入手可能なオブジェクト・クラス１８２、１８４、１８６を局所的に記憶するための、少なくとも一つのクラス・リポジトリ１８０；
・  オブジェクト・リポジトリ１８２に記憶されたオブジェクト・クラスのオブジェクトの例である、オブジェクト１９２、１９４を記憶するための少なくとも一つのオブジェクト・リポジトリ１９０；
・  ＤＢＭＳデータベース１１０／１０６に記憶されたオブジェクトに対応する主メモリに記憶されたオブジェクトを追跡するための、オブジェクト・ハッシュ・テーブル１４０；及び
・  ダーティ・オブジェクト・リスト・ヘッダ１４２
を記憶する。
【００３６】
また、メモリ１０２／１０４に記憶されるものは、
・  ソース・コード・データベース利用プログラム２００；
・  Ｊａｖａ（登録商標）プログラム・コンパイラ２０２；
・  ソース・コード・プログラム２００からコンパイラ２０２によって生成された初期コンパイルド・プログラム２０４；
・  好ましい実施例のポストプロセッサ手順２０６；及び
・  ポストプロセッサ手順２０６によって生成された変更プログラム２０８
である。
しかしながら、ソース・コード２００、コンパイラ２０２、初期コンパイルド・プログラム２０４、及びポストプロセッサ手順２０６は、変更プログラム２０８の実行中に通常、主メモリ１０２に記憶されないということが理解されるべきである。
【００３７】
好ましい実施例ではオペレーティング・システム１７０は、各規定アドレス空間内の実行の多重スレッドを支持するオブジェクト指向型マルチタスキング・オペレーティング・システムである。オペレーティング・システムは、解放されたデータ構造に関連付けられたメモリ空間を回復するためにガーベッジ・コレクタ手順を更に用いる。ガーベッジ・コレクタ手順は、周期ごと(periodic basis)に自動的に実行され、かつ割り当てに利用可能なメモリの量がしきいレベル以下になるような更なるときにおいて自動的に呼出される。
図３を参照すると、好ましい実施例のシステム及び方法は、初期の、ソース・コード、Ｊａｖａ（登録商標）言語データベース利用プログラム２００を受け取る。この初期ソース・コード・プログラムは、Ｊａｖａ（登録商標）バイトコード・プログラム２０４を生成すべく通常のＪａｖａ（登録商標）コンパイラ２０２によってコンパイルされる。しかしながら、Ｊａｖａ（登録商標）バイトコード・プログラムは、プログラムによって用いられるデータベースは、持続性記憶装置に実際に記憶されるのに対して、用いられるデータベース全体が主メモリに記憶されるという誤想定(false assumption)にそのコードが基づくので、真に機能的なプログラムではない。
【００３８】
データベース利用プログラム２０４の初期の、コンパイルされたバイトコード・プログラム版は、コンパイルされたプログラムのオブジェクト・クラスを変更する“ポストプロセッサ”２０６によって次に改訂され、それにより変更されたＪａｖａ（登録商標）バイトコード・プログラム２０８を生成する。ポストプロセッサ２０６は、オブジェクト・ポインタを管理しかつ持続的に記憶されたデータベースに記憶されることが必要な“ダーティ”オブジェクトを追跡するために必要な更なる情報の記憶を可能にするために持続的に記憶されたオブジェクトのコピーを主メモリに記憶するために用いられるオブジェクト・クラスのオブジェクト・データ構造を変更する。ポストプロセッサ２０６は、また、オブジェクトが持続的に記憶されあデータベースから主メモリにコピーされるべきときを決定し、オブジェクトをデータベースから主メモリにコピーし、現行トランザクションが処理されるならばデータベースに書き戻されることが結果としてに必要な新しいまたは変更されたデータを含む主メモリのオブジェクトを追跡し、かつ新しいまたは変更されたデータを有するオブジェクトをデータベースに書き戻すために更なる命令を追加することによってコンパイルされたプログラムのオブジェクト・クラスの方法を変更する。
【００３９】
変更されたプログラム２０８は、以下に詳述する、一つ以上の所定のオブジェクト・クラス１８２の方法への方法呼出しを含む。しかしながら、一般的に、変更されたプログラムによって用いられる所定のオブジェクト・クラスの方法は、持続性オブジェクトで用いられる持続性データ記述子構造１２２（図１参照）で作動することが必要な方法であり、かつデータベース１０６への及びそれからのデータベースの移動を処理するためである。
結果として得られる変更されたバイトコード・プログラム２０８の完全性は、バイトコード・プログラム・ベリファイヤ１７４によって検証され、そしてバイトコード・プログラム・インタープリタ１７６によって実行される。
図４を参照すると、好ましい実施例では、持続性オブジェクトで作動しかつデータベース１０６へ及びそれからのデータの移動を処理するために必要な全ての方法を含む、Ｄａｔａｂａｓｅ（データベース）オブジェクト・クラスと呼ばれる、所定のオブジェクト・クラスが存在する。Ｄａｔａｂａｓｅオブジェクト・クラスは、二つの変数を含む：１）ダーティ・オブジェクト・リスト・ヘッダ１４２及び２）オブジェクト・ハッシュ・テーブル１４０。Ｄａｔａｂａｓｅオブジェクト・クラスに含まれる方法は：
・  ユーザまたはプログラム指定基準に一致する一つ以上のデータベース・オブジェクトを要求し、かつ主メモリにそれらオブジェクトのコピーを生成する、Ｑｕｅｒｙ（クェリー）方法２２０；
・  指定されたデータベース・オブジェクトから主メモリのオブジェクトの中にデータをロードし、また、主メモリのそのオブジェクトに対する持続性データ記述子の生成をもたらす、ＬｏａｄＤａｔａ方法２２２；ＬｏａｄＤａｔａ方法は、また、対応しているＤＢＭＳオブジェクトに読み取りロックを要求しかつ取得し、かつ主メモリにロードされた各オブジェクトに対してハッシュ・テーブルにエントリを追加する；
・  主メモリの指定オブジェクトをダーティ・オブジェクト・リストに追加する、ダーティ方法２２４としてのＭａｒｋＯｂｊｅｃｔ；ＭａｒｋＯｂｊｅｃｔは、また、対応するＤＢＭＳオブジェクトに書込みロックを要求しかつ取得する；
・  ハッシュ・テーブル１４０のオブジェクトＩＤを検索するため並びにハッシュ・テーブル１４０における新しいエントリを記憶する場所を決定するためにデータベース・クェリー方法２２０及びロード・データ方法２２２によって用いられる、ハッシュ関数方法２２６；
・  しかしそれらがトランザクションの始めで既に初期化されていないならば、トランザクションの開始においてオブジェクト・ハッシュ・テーブル１４０及びダーティ・オブジェクト・リスト・ヘッダ１４２を初期化するために用いられる、ＳｔａｒｔＴｒａｎｓａｃｔｉｏｎ（スタート・トランザクション）方法２２８；
・  トランザクションが成功裏に終わる（即ち、処理する）ときに呼出され、かつダーティ・オブジェクト・リストの全てのオブジェクトをデータベース１０６にまずコピーしそしてオブジェクト・ハッシュ・テーブル１４０及びダーティ・オブジェクト・リスト・ヘッダ１４２を再初期化するために用いられる、ＥｎｄＴｒａｎｓａｃｔｉｏｎ（エンド・トランザクション）方法２３０；
・  トランザクションが不成功裏に終わる（即ち、アボートする）ときに呼出され、かつオブジェクト・ハッシュ・テーブル１４０及びダーティ・オブジェクト・リスト・ヘッダ１４２を再初期化するために用いられる、ＡｂｏｒｔＴｒａｎｓａｃｔｉｏｎ（アボート・トランザクション）方法２３２；及び
・  オブジェクト・ハッシュ・テーブル１４０及びダーティ・オブジェクト・リスト・ヘッダ１４２を初期化または再初期化し、かつそれにより主メモリに先に記憶された全ての持続性オブジェクトを使用不可能にするためにスタート、エンド及びアボード・トランザクション方法２２８、２３０、及び２３２によって呼出される、ハッシュ・テーブル及びダーティ・オブジェクト・リストを初期化する方法２３４。
【００４０】
Ｑｕｅｒｙ、ＳｔａｒＴｒａｎｓａｃｔｉｏｎ、ＥｎｄＴｒａｎｓａｃｔｉｏｎ及びＡｂｏｒｔＴｒａｎｓａｃｔｉｏｎ方法は、データベース・プログラマを書くときにプログラマによって用いられる。Ｄａｔａｂａｓｅオブジェクト・クラスのＬｏａｄＤａｔａ、ＭａｒｋＤｉｒｔｙ及びＨａｓｈＦｕｎｃｔｉｏｎ方法は、ポストプロセッサ２０６によって生成された変更プログラマの命令によってのみ用いられる。
Ｑｕｅｒｙ方法２２０が呼出されかつデータベースから一つ以上のオブジェクトのリターンを結果として生ずるときに、読出しロックは、全ての要求されたオブジェクト上で自動的に要求される。更に、データベースＱｕｅｒｙ方法２２０によってリターンされた全てのオブジェクトは、それぞれが持続性データ記述子１２２を有している持続性オブジェクトとして主メモリに表される。
【００４１】
ＳｔａｒｔＴｒａｎｓａｃｔｉｏｎ方法２２８は、（Ａ）それらが既にクリアされていないならばハッシュ・テーブル１４０及びダーティ・リスト・ポインタ１４２をクリアし、かつ（Ｂ）ＤＢＭＳの内部状態を適切に初期化するように“スタート・トランザクション”指令をＤＢＭＳに送る。
ＥｎｄＴｒａｎｓａｃｔｉｏｎ（エンド・トランザクション）方法２３０は、次のように作動する。成功裏のトランザクションの終りで、ダーティ・オブジェクト・リストの全てのオブジェクトは、持続性記憶装置にコピーされることが必要である。しかしならが、ダーティ・オブジェクトがＤＢＭＳにコピーされる前に、ＤＢＭＳにコピーされるダーティ・オブジェクトのオブジェクト・ポインタによって参照された全てのトランジエント・オブジェクトは、持続性オブジェクトに変換され、かつＤＢＭＳにコピーされるべきダーティ・オブジェクトのリストに追加されなければならない。これは、ＤＢＭＳオブジェクトにおいて未解決なポインタを有することを回避するために必要である。好ましい実施例では、持続性記憶装置にダーティ・オブジェクトの全てのオブジェクトをコピーするためのＥｎｄＴｒａｎｓａｃｔｉｏｎ（エンド・トランザクション）方法は、ダーティ・オブジェクト・リストを通して二つのパスを実行する。第１のパスは、（Ａ）他のトランジエント・オブジェクトを通して直接または間接的に、ダーティ・オブジェクト・リストのオブジェクトによって参照される全てのトランジエント・オブジェクトを位置決めし、（Ｂ）全てのそれらオブジェクトに対するデータベースＯＩＤｓを取得し、（Ｃ）全てのそれら参照されたトランジエント・オブジェクトを持続性オブジェクトに変換し、かつ（Ｄ）これらのオブジェクトに対するレファレンスをハッシュ・テーブル及びダーティ・オブジェクト・リストに追加するために用いられる。
【００４２】
次いで、第２のパスではダーティ・オブジェクト・リストの各オブジェクトは、ＤＢＭＳにコピーされ、ＤＢＭＳにオブジェクトを送る前に各オブジェクトのローカル・オブジェクト・レファレンスをそれらの対応ＤＢＭＳ  ＯＩＤｓで置換する。次いで、“コミット・トランザクション（処理トランザクション）”指令がＤＢＭＳに送られ、ＤＢＭＳオブジェクト上で先に取得した全ての読取りロックを解放させかつ全てのＤＢＭＳオブジェクト変更を永続的に記憶させる。
表１は、Ｄａｔａｂａｓｅ．ＥｎｄＴｒａｎｓａｃｔｉｏｎ（データベース．エンド・トランザクション）方法の擬似コード表現である。
【００４３】
【表１】
2008262585.tif 000003
ＡｂｏｒｔＴｒａｎｓａｃｔｉｏｎ（アボート・トランザクション）方法２３２は、（Ａ）ハッシュ・テーブル１４０及びダーティ・リスト・ポインタ１４２をクリアし、かつ（Ｂ）ＤＢＭＳの内部状態をリセットするようにＤＢＭＳに“ａｂｏｒｔ  ｔｒａｎｓａｃｔｉｏｎ（アボート・トランザクション）”指令を送る。
【００４４】
ポストプロセッサ手順
図４及び図５を参照すると、Ｄａｔａｂａｓｅ（データベース）オブジェクト・クラスのデータ構造及び方法は、コンパイルされたデータベース使用プログラマの中にポストプロセッサによって挿入されたコードにより用いられる。好ましい実施例におけるコンパイルされたデータベース使用プログラマをポストプロセッシングする処理は、次に示す通りである。
ポストプロセッシング手順は、コンパイルされたデータベース使用プログラマのオブジェクト・クラス定義を変更し、かつプログラマの第１の命令に対してポインタを設定することによって開始する（ステップ２５０）。
データベースまたは他の持続性記憶装置からコピーされたをデータ記憶するために用いられうるコンパイルされたデータベース使用プログラマの全てのオブジェクト・クラスは、持続性データ記述子に対するポインタを含むべく変更される。本発明のある実施例では、ポストプロセッサは、そのオブジェクトが持続性データを記憶するために用いられうる全てのオブジェクト・クラスのリストを受け取り、そのような場合にはそれらのオブジェクト・クラスだけが持続性データ記述子を含むべく検査されかつ変更される。
次に、初期にコンパイルされたデータベース使用プログラマの各ステートメントまたは命令は、ステートメントが、特別の処理を必要とする複数の命令型の一つであるかどうかを決定すべく検査される（ステップ２５４、２５８）。以下の説明では、コンパイルされたデータベース使用プログラマに追加された命令は、擬似コード・フォームで書かれる。この文書で用いられた擬似コードは、汎用コンピュータ言語規定を利用する。ここで採用された擬似コードは、この説明の目的のためにだけ開発され、この分野におけるあらゆるコンピュータ・プログラマによって容易に理解できるように設計されている。
【００４５】
オブジェクトのオブジェクト・ポインタ・フィールド
を参照する“ＧｅｔＦｉｅｌｄ（ゲット・フィールド）”命令
のために挿入されるコード
現行命令（即ち、ポストプロセッサ・ポインタによってポインタされたもの）がオブジェクトからオブジェクト・ポインタ・フィールドを読取るための命令であれば（Ｊａｖａ（登録商標）バイトコード言語において“ｇｅｔｆｉｅｌｄ（ゲット・フィールド）”命令と呼ばれる）（ステップ２５４）、表２に示した命令は、プログラマに追加される（ステップ２５６）。レファレンスの容易のために、表２において追加された命令は、番号が付されている。
【００４６】
【表２】
2008262585.tif 000004
【００４７】
【表３】
2008262585.tif 000005
追加された命令の説明は、次の通りである。この説明では、“参照オブジェクト(referring object)”は、“参照されたオブジェクト(referenced object) ”とここで呼ばれる別のオブジェクトへのポインタを含むオブジェクトである。更に、表１及び２の挿入された“命令”は擬似コード命令であり、かつ追加された実際の命令の数及びフォーマットは用いられるプログラミング言語に依存して変化する、ということが理解されるべきである。
追加された命令０１は、参照されたオブジェクトに対するオブジェクト・ポインタがヌルであるか否かを単にテストする。オブジェクト・ポインタがヌルでないならば、ラベルＳ１へのジャンプ（命令０２）が実行され、オリジナル・プログラムの実行が再開される。それゆえに、参照されたオブジェクトが主メモリに既に存在するときには、一つの追加命令だけが実行される：非ヌル・ポインタ・テストで条件付けられる条件付き分岐。
【００４８】
参照されたオブジェクトに対するオブジェクト・ポインタがヌルであれば（命令０１）、残りの命令（０３〜１４）が用いられる。命令０３は、参照オブジェクトが持続性データ記述子を有するか否かを見るべくチェックする。そうでなければ、プログラムが存在しないであろうオブジェクトをアクセスすることを試みているので、これは致命的誤りでありうるし、かつ命令０４は、ヌル・ポインタ例外をスローして（投じて）、例外ハンドラにプログラムの制御を取って代わらせる。
参照オブジェクトが持続性データ記述子を有すると想定すると、命令０４は、実行されず、かつその代わり命令０５が実行されて、参照オブジェクトの持続性データ記述子から参照されたオブジェクトに対するオブジェクト識別子（ＯＩＤ）を取得する。
【００４９】
命令０６は、ＯＩＤがヌルであるかどうかを決定する。そうであれば、それは、プログラムがトリーまたはリストのトラバースを実行してリーフ・ノードに到達することを示す。この点において、命令０７は、Ｓ１ラベルに対する分岐を実行することによってオリジナル・プログラムの次の命令に戻すように制御を単に転送して、スタックにヌル・ポインタを置き去りにする。
次に、非ヌルＯＩＤが見出されたと想定すると、命令０８は、もしあれば、ＯＩＤに対応している、オブジェクト・ポインタを要求すべくハッシュ・テーブルをアクセスする。命令０９は、ハッシュ・テーブルが非ヌル・オブジェクト・ポインタをリターンするかどうかを見るべくチェックする。そうであれば、これは、参照されたオブジェクトが既に主メモリの中にあることを意味する。その場合には命令１０は、オブジェクト・ポインタを参照オブジェクトの適切なフィールドの中にコピーし、命令１８は、オブジェクト・ポインタをスタック上にプッシュし、そして制御は、ラベルＳ１でオリジナル・プログラム命令にリターンされる。
【００５０】
命令１２は、命令０９が、参照されたオブジェクトが主メモリにないということを決定したならば、実行される。命令１２は、Ｄａｔａｂａｓｅ．ＬｏａｄＯｂｊｅｃｔ方法を呼出し、ａ）データベースから参照されたオブジェクトをフェッチし、ｂ）適切なオブジェクト・クラスの新しい例を生成しかつ初期化し、ｃ）新しいオブジェクトに対する持続性データ記述子を生成し、ｄ）フェッチされたオブジェクトの内容を新しいオブジェクトの中にコピーし、かつフェッチされたオブジェクトからのあらゆるＯＩＤｓ（即ち、データベースにおける他のオブジェクトへの参照（基準））を新しいオブジェクトの持続性データ記述子の中に記憶し、かつｅ）新しいオブジェクトに対してハッシュ・テーブルに新しい記録を生成する。命令１４は、新しいオブジェクトに対するオブジェクト・ポインタをスタック上にプッシュする。次いで制御は、オリジナル・プログラム命令にリターンされる。
【００５１】
纏めると、追加されたコードは、参照されたオブジェクトが既に主メモリにあるかどうかを決定し、そうでなければ、それは、データベースからオブジェクトをフェッチしかつ主メモリに新しいオブジェクトのフェッチされたオブジェクトからの情報を記憶する。このコードは、（Ａ）既に主メモリにあるオブジェクトへのヌル・オブジェクト・ポインタを用いて、または（Ｂ）主メモリにまだコピーされていないオブジェクトへのヌル・オブジェクト・ポインタを用いて、情報を読取ることを試みることができるプログラム位置でのみオリジナル・コンパイルされたプログラムに追加される。
“プット・フィールド(PutField)”命令に対して挿入されたコード
現行命令（即ち、ポストプロセッサ・ポインタによってポイントされるもの）が情報をオブジェクトの中に記憶するための命令であれば（Ｊａｖａ（登録商標）バイトコード言語において“フットフィールド(putfield)”命令を呼ばれる）（ステップ２５８）、表３に示した命令は、プログラムに追加される（ステップ２６０）。参照の容易のために、表３における追加された命令は、番号が付けられる。
【００５２】
【表４】
2008262585.tif 000006
【００５３】
【表５】
2008262585.tif 000007
表３における追加された命令の説明は、次の通りである。
命令３１及び３２は、参照オブジェクトと時々呼ばれる、オブジェクトからの持続性データ記述子ポインタのコピーをゲットする。命令３３は、ポインタがヌルであるかどうかを見るためにテストする。ポインタがヌルであれば、それは、参照オブジェクトが、ダーティとマークすることができない、トランジエント・オブジェクトであることを意味し、その場合には、挿入されたコードの命令３４は、ラベルＳ２への分岐を実行する。
次に、命令３５は、参照オブジェクトの持続性データ記述子におけるリンクされたリスト・ポインタをゲットし、かつ命令３６は、それがヌルでないかどうかを見るためにテストする。非ヌル・リンクド・リスト・ポインタは、オブジェクトがダーティと予め先にマークされたことを示し、その場合には挿入されたコードの命令３７がラベルＳ２への分岐を実行する。
【００５４】
参照オブジェクトが持続性データ記述子を有しかつダーティとして予め先にマークされていないならば、命令３８は、オブジェクトをダーティをマークすべくデータベース・オブジェクト・クラスのＭａｒｋＤｉｒｔｈ（マーク・ダーティ）方法を呼出す。ＭａｒｋＤｉｒｔｈ（マーク・ダーティ）方法は、データベースからの書込みロックを要求する命令を含む。
命令４１から４８は、値が書き込まれるフィールドがオブジェクト・ポインタ・フィールドであるならば、オリジナル・コンパイルされたプログラムに追加される。命令４１及び４２は、参照オブジェクトに記憶されるべき値Ｖがヌル・オブジェクト・ポインタであるかどうかを決定する。記憶されるべき値Ｖがヌル・オブジェクト・ポインタであれば、制御は、参照オブジェクトの持続性データ記述子に記憶されるべきＯＩＤが存在しないので、ラベルＳ３に続く命令（即ち、オリジナル・コンパイルされたプログラムの“ＰｕｓｈＶ（プッシュＶ）”命令）にパスされる。
【００５５】
記憶されるべき値Ｖがヌル・オブジェクト・ポインタでないならば、命令４３及び４４は、値Ｖによりポイントされたオブジェクトが持続性データ記述子を有するかどうか決定する。有さないならば、参照オブジェクトの（即ち、オブジェクトＥ’ｓ）ＰＤＤに記憶されるべきＯＩＤが存在せず、かつ制御がラベルＳ３に続く命令にパスされる。さもなければ、値Ｖに対応しているＯＩＤは、命令４６によって取得され、かつ命令４７により参照されたオブジェクトの持続性データ記述子の適切なフィールドに記憶される。
図５に示す手順のステップ２６２及び２５２は、オリジナル・コンパイルされたプログラムの各命令が処理された後に実行され、もしあれば、次のプログラム命令にポインタを進め、かつポストプロセッシング手順が終了したときを決定する。
ポストプロセッサによって生成された変更されたプログラムは、好ましい実施例において、有効Ｊａｖａ（登録商標）バイトコード・プログラムであるということに注目すべきである。それゆえに、適切なときに、ポストプロセッサによって生成された変更されたプログラムは、その上でそれが実行されるコンピュータ・プラットフォームに対するネイティブ・コード(native code) の中に更にコンパイルされうる。
【００５６】
代替実施例
代替実施例では、オブジェクトのオブジェクト・ポインタ・フィールドを読取るための各ゲットフィールド命令の後、表１に示したコードの挿入は、クレバー“ヌル・オブジェクト・ポインタ”例外ハンドラの使用によりほとんどの場合に回避されうる。ヌル・オブジェクト・ポインタ例外は、ランタイム・システムが、オペランド・スタック上に記憶されるべき有効オブジェクト・ポインタを必要とするが、スタック上の値がヌル・オブジェクト・ポインタのそれである、ゲットフィールドまたはプットフィールド命令のような、命令を実行することを試みるときにはいつでも発生する。
【００５７】
この代替実施例では、図５のポストプロセッサ手順のステップ２５０では、ポストプロセッサは、処理されるコンパイルされたデータベース利用プログラムにヌル・ポインタ例外ハンドラを追加しかつ、また、挿入されたヌル・ポインタ例外ハンドラを参照するようにプログラムの例外ハンドラ・テーブルを変更する。
ステップ２５６は、ヌル・ポインタ例外ハンドラが、ヌル・オブジェクト・ポインタ・フィールドがそれから取得された参照プログラムを識別するトラブルを有するようならば、表１に示した命令が（ステップ２６８により）プログラムに挿入されるように、変更される。即ち、オブジェクト・ポインタを用いるための第１の命令が第１のオブジェクトからオブジェクト・ポインタを検索する命令からプログラムにおいて遠くに移動されたならば、例外ハンドラは、その第１のオブジェクトを識別することができないであろう。例えば、プログラムが次の一連の命令を有するものと考える：
【００５８】
【表６】
2008262585.tif 000008
上記の例では、“ｇｅｔｆｉｅｌｄＦ３（ゲットフィールドＦ３）”命令がヌル・ポインタ例外をもたらすならば、例外ハンドラは、スタック上のヌル・オブジェクト・ポインタがオブジェクトＯ１から取得されたことを決定することができないであろう。そのような情況において、ポストプロセッサは、オブジェクトＯ１のオブジェクト・ポインタ・フィールドを読取るための命令の後に表１に示したコードをまだ挿入する。
第１の好ましい実施例では少なくとも一つの追加命令（プログラム分岐をもたらす非ヌル・テスト命令）が全てのそのようなｇｅｔｆｉｅｌｄ（ゲットフィールド）命令に対して実行されなければならないが、この代替実施例では、ほとんどの場合においてオーバヘッドは、非ヌル・オブジェクト・ポインタがオブジェクトから読取られるランタイムの間に招かれない。
上記したように、ヌル・ポインタ例外ハンドラは、変更されたデータベース使用プログラムが、プログラムの実行の間に、ヌル・ポインタを用いてオブジェクトを参照することを試みるときにはいつでも呼出される。変更されたデータベース使用プログラムは、（Ａ）データベースから主メモリの中にまだ運ばれていないオブジェクトにおける情報をアクセスするための“ｇｅｔｆｉｅｌｄ（ゲットフィールド）”または“ｐｕｔｆｉｅｌｄ（プットフィールド）”動作を実行することが最初の試みであるときに、または（Ｂ）主メモリのオブジェクトを参照するために先に用いられていないオブジェクトからのオブジェクト・ポインタを用いているときにだけ、ヌル・ポインタを有するオブジェクトを参照することを試みるべきである。ヌル・ポインタ例外ハンドラは、図６を参照して以下に説明する。
【００５９】
図６を参照して、ヌル・ポインタ例外ハンドラは次のステップを実行する：
Ａ）どのオブジェクト（参照オブジェクト）がヌル・ポインタ例外をもたらしたヌル・オブジェクト・ポインタを含むかを決定する（２８０）；
Ｂ）参照オブジェクトが持続性データ記述子を有さないならば（２８１）、次に高いレベル例外ハンドラを、もしあれば、呼び出させるように、ヌル・ポインタ例外をリアサート(re-assert) する（２８２）；
Ｃ）参照オブジェクトが持続性データ記述子を有するならば（２８１）、そのオブジェクトの持続性データ記述子から対応データベース・オブジェクトＩＤをゲットする（２８３）；
Ｄ）オブジェクトのコピーが既に主メモリにあるかどうかを見るためにハッシュ・テーブルのオブジェクトＩＤを調べる（２８４）；
Ｅ）オブジェクトが既に主メモリにあるならば（２８６，Ｙ）、ヌル・ポインタを（ハッシュ・テーブルからコピーした）オブジェクトへの主メモリ・オブジェクト・ポインタのコピーで置換し、オブジェクト・ポインタをプログラム・オペランド・スタック上にプッシュし、そして、それに、ヌル・ポインタ例外をもたらした命令を再実行させるようにデータベース使用プログラムに制御を戻す（２８８）；
Ｆ）オブジェクトがまだ主メモリにないならば（２８６，Ｎ）、Ｄａｔａｂａｓｅ．ＬｏａｄＯｂｊｅｃｔ方法を呼出す（２８９）、そして
Ｇ）それにヌル・ポインタ例外をもたらした命令を再実行させるようにデータベース使用プログラムに制御をリターンする（２９９）。
Ｄａｔａｂａｓｅ．ＬｏａｄＯｂｊｅｃｔ方法は、呼出されたときに、次のステップを実行する：
Ｈ）オブジェクトＩＤによって参照されたオブジェクトのコピーを要求しかつ取得する；また、ＤＢＭＳオブジェクト上に読取りロックを要求しかつ取得する（２９０）；
Ｉ）ＤＢＭＳから受け取ったオブジェクトに対応しているオブジェクト・クラスの新しいオブジェクト例を生成し、かつオブジェクトに対する持続性データ記述子を生成する（２９２）；
Ｊ）新しいオブジェクトの全てのオブジェクト識別子が新しいオブジェクトに対する持続性データ記述子に記憶されかつ主オブジェクトのオブジェクト識別子がヌル・オブジェクト・ポインタで置換されることを除き、ＤＢＭＳオブジェクトの内容を新しいオブジェクトの中にコピーする（２９４）；
Ｋ）新しいオブジェクトそのへのポインタ及びそのデータベース・オブジェクト識別子を包含している記録をハッシュ・テーブルに追加する（２９６）；そして、
Ｌ）プログラム・オペランド・スタック・ポインタ上に主メモリ・オブジェクト・ポインタのコピーをプッシュする（２９８）。
【００６０】
本発明は、２〜３の特定の実施例を参照して記述したが、記述は、本発明の説明のためであり、本発明を限定するものであると解釈されるべきでない。添付した特許請求の範囲によって規定されたような本発明の真の精神及び範疇から逸脱することなく種々の変更が当業者に生じうる。
【図面の簡単な説明】
【００６１】
【図１】本発明の好ましい実施例の技法を用いて改訂されたデータベース・プログラムを用いているコンピュータ・システムの概念的ブロック図である。
【図２】本発明の技法の好ましい実施例の概念的ブロック図である。
【図３】本発明の好ましい実施例を組み込んでいるコンピュータ・システムのブロック図である。
【図４】本発明の好ましい実施例で用いられるデータベース・オブジェクト・クラスのブロック図である。
【図５】本発明の好ましい実施例で用いられる技法のフローチャートである。
【図６】本発明の代替実施例で用いられるヌル・ポインタ例外ハンドラ手順のフローチャートの一部である。
【図７】本発明の代替実施例で用いられるヌル・ポインタ例外ハンドラ手順のフローチャートの他の一部である。
【符号の説明】
【００６２】
１００  コンピュータ・システム
１０２  主メモリ
１０４  持続性データ記憶
１０６  データベース
１０８  オブジェクト
１１０  データベース管理システム（ＤＢＭＳ）
１１２  ランタイム・システム
１１４−１〜１１４−３  オブジェクト
１２０  ポインタ
１２２  持続性データ記述子
１２４  フル・オブジェクト識別子（ＯＩＤ）
１２６  リスト・ポインタ
１２８−１〜１２８−２  フル・オブジェクト識別子（ＯＩＤ）
１３０−１〜１３０−２  オブジェクト・レファレンス・フィールド
１４０  ハッシュ・テーブル
１４２  リスト・ヘッダ
【図１】
2008262585.tif 000009
【図２】
2008262585.tif 000010
【図３】
2008262585.tif 000011
【図４】
2008262585.tif 000012
【図５】
2008262585.tif 000013
【図６】
2008262585.tif 000014
【図７】
2008262585.tif 000015