(57)【要約】同クラスの第１及び第２バージョンが動作可能な仮想マシンのようなオブジェクト指向実行環境を提供するデータ処理装置が開示されている。データ処理装置は、それぞれ同クラスの第１及び第２のバージョンに対して動作する第１及び第２のサービスと通信する。しかしながら、第１のサービスは第１バージョンの実行環境に対してのみ通信が可能であり、第２のサービスは第２バージョンの実行環境に対してのみ通信が可能である。データ処理装置は、異なるバージョンのクラス間においてデータ又は情報を共有出来るように構成されている。
2004506968.tif 000002
【特許請求の範囲】
【請求項１】
同クラスの第１バージョンと第２バージョンに対して動作するオブジェクト指向実行環境を提供するデータ処理装置の動作方法であって、
同クラスの上記第１バージョンに従って動作する第１のサービス、及び同クラスの上記第２バージョンに従って動作する第２のサービスと通信するように、上記オブジェクト指向実行環境を設定し、
上記第１のサービスは、同クラスの上記第１バージョンに従って動作する第１バージョンの実行環境に対してのみ通信し、上記第２のサービスは、同クラスの上記第２バージョンに従って動作する第２バージョンの実行環境に対してのみ通信するように、上記オブジェクト指向実行環境を設定する
ことを特徴とするデータ処理装置の動作方法。
【請求項２】
請求項１に記載の方法であって、
同クラスの上記第１バージョンに従って動作する第３のサービスが、上記第１バージョンの実行環境に対してのみ通信するように、上記オブジェクト指向実行環境を設定するステップを有する
ことを特徴とする方法。
【請求項３】
請求項１又は請求項２に記載の方法であって、
上記第１バージョンの実行環境を確立するための、同クラスの上記第１バージョンに対応する第１バージョンのクラスローダーを有する、第１のクラスコンテキストオブジェクトをインスタンス化し、
上記第２バージョンの実行環境を確立するための、同クラスの上記第２バージョンに対応する第２バージョンのクラスローダーを有する、第２のクラスコンテキストオブジェクトをインスタンス化するように上記オブジェクト指向実行環境を設定する
ことを特徴とする方法。
【請求項４】
請求項３に記載の方法であって、
第１バージョンのクラスローダーは、上記同クラスの上記第１バージョンを実行し、上記オブジェクト指向実行環境において上記第１バージョンの実行環境を確立するためのメソッドを有し、
第２バージョンのクラスローダーは、上記同クラスの上記第２バージョンを実行し、上記オブジェクト指向実行環境において上記第２バージョンの実行環境を確立するためのメソッドを有する
ことを特徴とする方法。
【請求項５】
請求項３又は請求項４に記載の方法であって、
上記第１バージョンのクラスローダーは、同クラスの上記第１バージョンに対するエントリインタフェイスを確立するメソッドを有し、
上記第２バージョンのクラスローダーは、同クラスの上記第２バージョンに対するエントリインタフェイスを確立するメソッドを有する
ことを特徴とする方法。
【請求項６】
請求項３から請求項５のうち、いずれか１項に記載の方法であって、
上記第１及び第２バージョンのクラスローダーは、第１及び第２バージョンのオブジェクトの入力ストリームのそれぞれを実行するように、上記第１及び第２バージョンの実行環境のそれぞれを設定可能であり、
上記第１バージョンのオブジェクトの入力ストリームは、同クラスの上記第１バージョンに従って対応するオブジェクトのビットストリーム表記を受信可能、且つ同クラスの上記第１バージョンのオブジェクトを出力可能であり、
上記第２バージョンのオブジェクトの入力ストリームは、同クラスの上記第２バージョンに従ってオブジェクトのビットストリーム表記を受信可能、且つ同クラスの上記第２バージョンの対応するオブジェクトを出力可能である
ことを特徴とする方法。
【請求項７】
上記請求項のうち、いずれか１項に記載の方法であって、
オブジェクト指向実行環境に対して動作する第１及び第２バージョンの実行環境の記録を保存し、オブジェクト指向実行環境でのサービスコールを上記記録と照合することにより、上記第１又は第２のサービスのどちらがサービスコールを行っているかを判別し、照合の結果に基づいてサービスコールを行っているサービスと、上記第１又は第２バージョンの実行環境のうちの一方との間の通信準備を行うように、上記オブジェクト指向実行環境を設定する
ことを特徴とする方法。
【請求項８】
請求項３に記載の方法、又は請求項３に従属する請求項４から請求項７のうち、いずれか１項記載の方法であって、
上記第１のサービスからのサービスコールに応じて、上記第１バージョンのクラスローダーをロードするように、上記オブジェクト指向実行環境を設定する
ことを特徴とする方法。
【請求項９】
請求項８に記載の方法であって、
上記第２のサービスからのサービスコールに応じて、上記第２バージョンのクラスローダーをロードするように、上記オブジェクト指向実行環境を設定する
ことを特徴とする方法。
【請求項１０】
上記請求項のうち、いずれか１項に記載の方法であって、
上記第１のサービスと上記第１バージョンの実行環境との間の通信を可能とする第１の接続ポイントと、上記第２のサービスと上記第２バージョンの実行環境との間の通信を可能とする第２の接続ポイントを供給するように上記オブジェクト指向実行環境を設定する
ことを特徴とする方法。
【請求項１１】
請求項２に従属する請求項１０の方法であって、
上記第３のサービスと上記第１バージョンの実行環境との間の通信を可能とする、第３のサービスに対応する第３の接続ポイントを供給するように、上記オブジェクト指向実行環境を設定する
ことを特徴とする方法。
【請求項１２】
請求項１０又は請求項１１に記載の方法であって、
上記第１のサービスは、上記第１及び第２の接続ポイントのうち、第１の接続ポイントに対してのみ通信するように設定され、
上記第２のサービスは、上記第１及び第２の接続ポイントのうち、第２の接続ポイントに対してのみ通信するように設定されている
ことを特徴とする方法。
【請求項１３】
請求項１１に記載の方法、又は請求項１１に従属する請求項１２に記載の方法であって、
上記第３のサービスは、上記第１、第２、及び第３の接続ポイントのうち、第３の接続ポイントに対してのみ通信するように設定されている
ことを特徴とする方法。
【請求項１４】
上記請求項のうち、いずれか１項に記載の動作方法であって、
クラスバージョン識別子と関連するサービスコールに対して応答するように上記オブジェクト指向実行環境を設定する
ことを特徴とする動作方法。
【請求項１５】
請求項１４に記載の方法であって、
上記サービスコールに関連する上記クラスバージョン識別子を調査することによって、サービスコールが同クラスの上記第１又は第２バージョンに対応するか否かを判別するように、上記オブジェクト指向実行環境を設定する
ことを特徴とする方法。
【請求項１６】
請求項１４又は請求項１５に記載の方法であって、
上記オブジェクト指向実行環境は、同クラスの対応するバージョンを定義するバイトコードのハッシュから、上記クラスバージョン識別子を形成するように設定する
ことを特徴とする方法。
【請求項１７】
請求項３に従属する請求項３から請求項１６のうち、いずれか１項に記載の方法であって、
上記第１及び第２バージョンのクラスローダーは、上記第１又は第２バージョンの実行環境のそれぞれにおいてインスタンス化されたオブジェクトからクラス構造を消去してクラスバージョン中立オブジェクトを形成し、且つ、オブジェクト識別子及びクラスバージョン識別子を上記クラスバージョン中立オブジェクトと関連付けるように、上記第１及び第２バージョンの実行環境を設定可能である
ことを特徴とする方法。
【請求項１８】
請求項１７に記載の方法であって、
上記第１及び第２バージョンのクラスローダーは、クラス識別子を上記クラスバージョン中立オブジェクトと関連付けるように、上記各第１及び第２バージョンの実行環境を設定可能である
ことを特徴とする方法。
【請求項１９】
請求項１７又は請求項１８に記載の方法であって、
上記第１及び第２バージョンのクラスローダーは、上記クラス構造を消去し、上記クラスバージョン中立オブジェクトのビット又はバイトストリーム表記を形成することにより上記各クラスバージョン中立オブジェクトを形成するように、上記第１及び第２バージョンの実行環境を設定可能である
ことを特徴とする方法。
【請求項２０】
請求項３に従属する請求項３から請求項１９のうち、いずれか１項に記載の方法であって、
クラスバージョン中立オブジェクトを作成するように、
上記第１及び第２バージョンのクラスローダーは、第１及び第２バージョンのオブジェクトの出力ストリームのそれぞれを実行するように、上記第１及び第２バージョンの実行環境のそれぞれを設定可能であり、
上記第１バージョンのオブジェクトの出力ストリームは、同クラスの上記第１バージョンのオブジェクトを受信し、且つ、同クラスの上記第１バージョンのオブジェクトのビット又はバイトストリーム表記及び第１バージョンの識別子を出力するように動作し、
上記第２バージョンのオブジェクトの出力ストリームは、同クラスの上記第２バージョンのオブジェクトを受信し、且つ、同クラスの上記第２バージョンのオブジェクトのビット又はバイトストリーム表記及び第２バージョンの識別子を出力するように動作する
ことを特徴とする方法。
【請求項２１】
請求項１９又は請求項２０に記載の方法であって、
上記第１及び第２バージョンのクラスローダーは、上記ビット又はバイトストリーム内に上記クラスバージョン識別子を含むように、上記第１及び第２バージョンの実行環境を設定可能である
ことを特徴とする方法。
【請求項２２】
請求項１９から請求項２１のうち、いずれか１項に記載の方法であって、
上記第１及び第２バージョンのクラスローダーは、オブジェクト識別子フィールド、クラスバージョン識別子フィールド、及び上記ビット又はバイトストリームを含むフィールドを備える上記クラスバージョン中立オブジェクトを作成するように、上記第１及び第２バージョンの実行環境を設定可能である
ことを特徴とする方法。
【請求項２３】
請求項２２に記載の方法であって、
上記第１及び第２バージョンのクラスローダーは、上記中立オブジェクトのクラスを示すクラス名フィールドを備えるクラスバージョン中立オブジェクトを作成するように、上記第１及び第２バージョンの実行環境を設定可能である
ことを特徴とする方法。
【請求項２４】
請求項１７から請求項２３のうち、いずれか１項記載の方法であって、
上記クラスバージョン中立オブジェクトを記憶する
ことを特徴とする方法。
【請求項２５】
請求項２４に記載の方法であって、
上記クラスバージョン中立オブジェクトに対して、オブジェクトの内容を示すインデックスキーを関連付ける
ことを特徴とする方法。
【請求項２６】
請求項２４又は請求項２５に従って設定されたデータ処理装置の動作方法であって、
記憶部から上記クラスバージョン中立オブジェクトを検索し、検索したクラスバージョン中立オブジェクトを、中立オブジェクトが形成されたクラスバージョンとは異なるクラスバージョンに対応する、別のクラスバージョンオブジェクトに変換する
ことを特徴とする方法。
【請求項２７】
請求項２６に記載の方法であって、
上記変換処理は、上記クラスバージョン中立オブジェクトと関連する上記オブジェクト識別子及びクラスバージョン識別子に従って、上記クラスバージョン中立オブジェクトに由来する対応フィールドのデータを、上記別のクラスバージョンオブジェクトのフィールドに配置する
ことを特徴とする方法。
【請求項２８】
請求項２６又は請求項２７に記載の方法であって、
上記変換処理は、上記クラスバージョン中立オブジェクト内に対応フィールドを持たない上記別のクラスバージョンオブジェクトのフィールドに、デフォルト値を配置する
ことを特徴とする方法。
【請求項２９】
請求項２６から請求項２８のうち、いずれか１項に記載の方法であって、
上記第１及び第２バージョンのオブジェクトの入力ストリームは、入力ビットストリーム又は入力バイトストリーム内のバージョン識別子を認識するように動作し、
リクエスト内部に含まれるオブジェクト識別子に対応する、記憶済みオブジェクトを検索することを指示するリクエストを上記第１のサービスから受信し、
上記リクエストを上記第１バージョンの実行環境に対して伝達し、
上記オブジェクト識別子に対応する記憶済みのクラスバージョン中立オブジェクトを検索して、上記第１バージョンの実行環境内にそれを位置付けし、
上記検索したクラスバージョン中立オブジェクトを、上記第１バージョンのオブジェクトの入力ストリームに入力し、上記検索したクラスバージョン中立オブジェクトと関連するクラスバージョンを上記同クラスの上記第２バージョンとして識別し、
上記クラスバージョン中立オブジェクトを上記第１バージョンに応じたオブジェクトに変換する
ことを特徴とする方法。
【請求項３０】
請求項２９に記載の方法であって、
上記第１バージョンのオブジェクトの入力ストリームは、同クラスの上記第１バージョンのオブジェクトのフィールドをインスタンス化し、上記クラスバージョン識別子に従って識別される通りに、上記検索したクラスバージョン中立オブジェクトの対応フィールド内に記憶されたデータに対応するデータを、上記フィールドに配置する
ことを特徴とする方法。
【請求項３１】
請求項３０に記載の方法であって、
上記第１バージョンのオブジェクトの入力ストリームは、対応するフィールドを持たない上記検索したクラスバージョン中立オブジェクトの空データを、同クラスの上記第１バージョンのオブジェクトのフィールドに配置する
ことを特徴とする方法。
【請求項３２】
請求項３１に記載の方法であって、
上記第２バージョンから上記第１バージョンのオブジェクトの出力ストリームへと変換された上記第１バージョンに従って上記オブジェクトを入力することにより、上記第１バージョンのオブジェクトのビット又はバイトストリーム表記からなるクラスバージョン中立オブジェクトを形成し、上記クラスバージョン中立オブジェクトを記憶する
ことを特徴とする方法。
【請求項３２】
クラスタイプのオブジェクトを、クラスタイプのバージョン構造に従って処理するデータ処理装置の動作方法であって、
上記クラスタイプのバージョンをロードしてクラスタイプのバージョンの実行環境を提供するバージョンのクラスローダーを備えるように上記データ処理装置を構成し、
上記クラスタイプのオブジェクトに対応する上記クラスタイプのバージョンの実行環境を提供し、
上記クラスタイプのオブジェクトを受信し、
上記クラスタイプのバージョンとは無関係のオブジェクトを形成するために、上記クラスタイプのオブジェクトからクラスタイプ構造を削除し、
クラスタイプのオブジェクト識別子及びクラスタイプのバージョン識別子を、上記クラスタイプのバージョンと無関係のオブジェクトと関連付ける
ことを特徴とするデータ処理装置の動作方法。
【請求項３３】
コンピュータプログラム製品であって、
請求項１から請求項３２のうち、いずれか１項に記載の方法を実行することが可能なようにデータ処理装置又はコンピュータを設定する機械又はコンピュータ読み取り可能なプログラム構成要素を有する
ことを特徴とするコンピュータプログラム製品。
【請求項３４】
コンピュータプログラム製品であって、
請求項１から請求項３２のうち、いずれか１項に記載の方法を実行することが可能なようにデータ処理装置又はコンピュータを設定するために変換可能な、機械又はコンピュータ読み取り可能なプログラム構成要素を有する
ことを特徴とするコンピュータプログラム製品。
【請求項３５】
コンピュータキャリア媒体であって、
請求項３３又は請求項３４に記載のコンピュータプログラム製品を伝送する
ことを特徴とするコンピュータキャリア媒体。
【請求項３６】
同クラスの第１バージョンと第２バージョンに対して動作するオブジェクト指向実行環境を提供するデータ処理装置であって、
同クラスの上記第１バージョンに従って動作する第１のサービス、及び同クラスの上記第２バージョンに従って動作する第２のサービスと通信し、
上記第１のサービスは、同クラスの上記第１バージョンに従って動作する第１バージョンの実行環境に対してのみ通信し、
上記第２のサービスは、同クラスの上記第２バージョンに従って動作する第２バージョンの実行環境に対してのみ通信する
ように構成されているデータ処理装置。
【請求項３７】
請求項３６に記載の装置であって、
第３のサービスは、同クラスの上記第１バージョンに従って動作し、上記第１バージョンの実行環境に対してのみ通信する
ように構成されていることを特徴とする装置。
【請求項３８】
請求項３６又は請求項３７に記載の装置であって、
上記第１バージョンの実行環境を確立するための、同クラスの上記第１バージョンに対応する第１バージョンのクラスローダーを有する、第１のクラスコンテキストオブジェクトをインスタンス化し、
上記第２バージョンの実行環境を確立するための、同クラスの上記第２バージョンに対応する第２バージョンのクラスローダーを有する、第２のクラスコンテキストオブジェクトをインスタンス化する
ように構成されていることを特徴とする装置。
【請求項３９】
請求項３８に記載の装置であって、
第１バージョンのクラスローダーは、上記同クラスの上記第１バージョンを実行して上記オブジェクト指向実行環境において上記第１バージョンの実行環境を確立するように設定され、
第２バージョンのクラスローダーは、上記同クラスの上記第２バージョンを実行して上記オブジェクト指向実行環境において上記第２バージョンの実行環境を確立するように設定されている
ことを特徴とする装置。
【請求項４０】
請求項３８又は請求項３９に記載の装置であって、
上記第１バージョンのクラスローダーは、同クラスの上記第１バージョンに対するエントリインタフェイスを確立するように設定され、
上記第２バージョンのクラスローダーは、同クラスの上記第２バージョンに対するエントリインタフェイスを確立するように設定されている
ことを特徴とする装置。
【請求項４１】
請求項３８から請求項４０のうち、いずれか１項に記載の装置であって、
上記第１及び第２バージョンのクラスローダーは、上記第１及び第２バージョンの実行環境のそれぞれを設定して、第１及び第２バージョンのオブジェクトの入力ストリームのそれぞれを実行し、
上記第１バージョンのオブジェクトの入力ストリームは、同クラスの上記第１バージョンに従って対応するオブジェクのビットストリーム表記を受信し、且つ同クラスの上記第１バージョンのオブジェクトを出力し、
上記第２バージョンのオブジェクトの入力ストリームは、同クラスの上記第２バージョンに従ってオブジェクトのビットストリーム表記を受信し、且つ同クラスの上記第２バージョンの対応するオブジェクトを出力する
ことを特徴とする装置。
【請求項４２】
請求項３６から請求項４１のうち、いずれか１項に記載の装置であって、
上記オブジェクト指向実行環境は、オブジェクト指向実行環境に対して動作する第１及び第２バージョンの実行環境の記録を保存し、オブジェクト指向実行環境でのサービスコールを上記記録と照合することにより、上記第１又は第２のサービスのどちらがサービスコールを行っているかを判別し、照合の結果に基づいてサービスコールを行っているサービスと、上記第１又は第２バージョンの実行環境のうちの一方との間の通信準備を行うように設定されている
ことを特徴とする装置。
【請求項４３】
請求項３８に記載の装置、又は請求項３８に従属する請求項３９から請求項４２のうち、いずれか１項記載の装置であって、
上記オブジェクト指向実行環境は、上記第１のサービスからのサービスコールに応じて、上記第１バージョンのクラスローダーをロードするように設定されている
ことを特徴とする装置。
【請求項４４】
請求項４３に記載の装置であって、
上記オブジェクト指向実行環境は、上記第２のサービスからのサービスコールに応じて、上記第２バージョンのクラスローダーをロードするように設定されている
ことを特徴とする装置。
【請求項４５】
請求項３６から請求項４４のうち、いずれか１項に記載の装置であって、
上記オブジェクト指向実行環境は、上記第１のサービスと上記第１バージョンの実行環境との間の通信を可能とする第１の接続ポイントと、上記第２のサービスと上記第２バージョンの実行環境との間の通信を可能とする第２の接続ポイントとを供給するように設定されている
ことを特徴とする装置。
【請求項４６】
請求項３７に従属する請求項４５に記載の装置であって、
上記オブジェクト指向実行環境は、上記第３のサービスと上記第１バージョンの実行環境との間の通信を可能とするように構成された第３のサービスに対応する第３の接続ポイントを供給するように設定されている
ことを特徴とする装置。
【請求項４７】
請求項４５又は請求項４６に記載の装置であって、
上記第１のサービスは、上記第１及び第２の接続ポイントのうち、第１の接続ポイントに対してのみ通信するように設定され、
上記第２のサービスは、上記第１及び第２の接続ポイントのうち、第２の接続ポイントに対してのみ通信するように設定されている
ことを特徴とする装置。
【請求項４８】
請求項４６に記載の装置、又は請求項４６に従属する請求項４７に記載の装置であって、
上記第３のサービスは、上記第１、第２、及び第３の接続ポイントのうち、第３の接続ポイントに対してのみ通信するように設定されている
ことを特徴とする装置。
【請求項４９】
請求項３６から請求項４８のうち、いずれか１項に記載の装置であって、
上記オブジェクト指向実行環境は、クラスバージョン識別子と関連するサービスコールに対して応答するように設定されている
ことを特徴とする装置。
【請求項５０】
請求項４８に記載の装置であって、
上記オブジェクト指向実行環境は、上記サービスコールに関連する上記クラスバージョン識別子を調査することによって、サービスコールが同クラスの上記第１又は第２バージョンに対応するかどうかを判別するように設定されている
ことを特徴とする装置。
【請求項５１】
請求項４９又は請求項５０に記載の装置であって、
上記オブジェクト指向実行環境は、同クラスの対応するバージョンを定義するバイトコードのハッシュから上記クラスバージョン識別子を形成するように設定されている
ことを特徴とする装置。
【請求項５２】
請求項３９に従属する請求項３９から請求項５１のうち、いずれか１項に記載の装置であって、
上記第１及び第２バージョンのクラスローダーは、上記第１又は第２バージョンの実行環境のそれぞれにおいてインスタンス化されたオブジェクトからクラス構造を消去してクラスバージョン中立オブジェクトを形成し、且つ、オブジェクト識別子及びクラスバージョン識別子を上記クラスバージョン中立オブジェクトと関連付けるように、上記第１及び第２バージョンの実行環境を設定可能である
ことを特徴とする装置。
【請求項５３】
請求項５２に記載の装置であって、
上記第１及び第２バージョンのクラスローダーは、クラス識別子を上記クラスバージョン中立オブジェクトと関連付けるように、上記各第１及び第２バージョンの実行環境を設定可能である
ことを特徴とするデータ処理装置。
【請求項５４】
請求項５２又は請求項５３に記載の装置であって、
上記第１及び第２バージョンのクラスローダーは、上記クラス構造を消去し、上記クラスバージョン中立オブジェクトのビット又はバイトストリーム表記を形成することにより上記中立オブジェクトを形成するように、上記第１及び第２バージョンの実行環境を設定可能である
ことを特徴とする装置。
【請求項５５】
請求項３９に従属する請求項３９から請求項５４のうち、いずれか１項に記載の装置であって、
クラスバージョン中立オブジェクトを作成するように、
上記第１及び第２バージョンのクラスローダーは、第１及び第２バージョンのオブジェクトの出力ストリームのそれぞれを実行するように、上記第１及び第２バージョンの実行環境のそれぞれを設定可能であり、
上記第１バージョンのオブジェクトの出力ストリームは、同クラスの上記第１バージョンのオブジェクトを受信し、且つ、同クラスの上記第１バージョンのオブジェクトのビットストリーム表記及び第１バージョン識別子を出力するように動作し、
上記第２バージョンのオブジェクトの出力ストリームは、同クラスの上記第２バージョンのオブジェクトを受信し、且つ、同クラスの上記第２バージョンのオブジェクトのビットストリーム表記及び第２バージョン識別子を出力するように動作する
ことを特徴とする装置。
【請求項５６】
請求項５４又は請求項５５に記載の装置であって、
上記第１及び第２バージョンのクラスローダーは、上記ビット又はバイトストリーム内に上記クラスバージョン識別子を含むように、上記第１及び第２バージョンの実行環境を設定可能である
ことを特徴とする装置。
【請求項５７】
請求項５２から請求項５６のうち、いずれか１項に記載の装置であって、
上記第１及び第２バージョンのクラスローダーは、オブジェクト識別子フィールド、クラスバージョン識別子フィールド、及び上記ビット又はバイトストリームを含むフィールドを備える上記クラスバージョン中立オブジェクトを作成するように、上記第１及び第２バージョンの実行環境を設定可能である
ことを特徴とする装置。
【請求項５８】
請求項５７に記載の装置であって、
上記第１及び第２バージョンのクラスローダーは、上記中立オブジェクトのクラスを示すクラス名フィールドを備えるクラスバージョン中立オブジェクトを作成するように、上記第１及び第２バージョンの実行環境を設定可能である
ことを特徴とする装置。
【請求項５９】
請求項５２から請求項５８のうち、いずれか１項記載の装置であって、
上記クラスバージョン中立オブジェクトを記憶するように構成されている
ことを特徴とする装置。
【請求項６０】
請求項５９に記載の装置であって、
上記クラスバージョン中立オブジェクトに対して、オブジェクトの内容を示すインデックスキーを関連付けるように構成されている
ことを特徴とする装置。
【請求項６１】
請求項５９又は請求項６０に従って構成された装置であって、
記憶部から上記クラスバージョン中立オブジェクトを検索し、検索したクラスバージョン中立オブジェクトを、中立オブジェクトが形成されたクラスバージョンとは異なるクラスバージョンに対応する、別のクラスバージョンオブジェクトに変換するように構成されている
ことを特徴とする装置。
【請求項６２】
請求項６１に記載の装置であって、
上記クラスバージョン中立オブジェクトと関連する上記オブジェクト識別子及びクラスバージョン識別子に従って、上記クラスバージョン中立オブジェクトに由来する対応フィールドのデータを、上記別のクラスバージョンオブジェクトのフィールドに配置するように構成されている
ことを特徴とする装置。
【請求項６３】
請求項６１又は請求項６２に記載の装置であって、
上記クラスバージョン中立オブジェクト内に対応フィールドを持たない上記別のクラスバージョンオブジェクトのフィールドに、デフォルト値を配置するように構成されている
ことを特徴とする装置。
【請求項６４】
請求項６１から請求項６３のうち、いずれか１項に記載の装置であって、
上記第１及び第２バージョンのオブジェクトの入力ストリームは、入力ビットストリーム又は入力バイトストリーム内のバージョン識別子を認識するように動作し、
上記第１のサービスからのリクエストを受信し、受信したリクエストに含まれるオブジェクト識別子に対応する記憶済みオブジェクトを検索し、
上記リクエストを上記第１バージョンの実行環境に対して伝達し、
上記オブジェクト識別子に対応する記憶済みのクラスバージョン中立オブジェクトを検索して、上記第１バージョンの実行環境内に位置付け、
上記検索したクラスバージョン中立オブジェクトを、上記第１バージョンのオブジェクトの入力ストリームに入力し、上記検索したクラスバージョン中立オブジェクトと関連するクラスバージョンを、上記同クラスの上記第２バージョンとして識別し、
上記クラスバージョン中立オブジェクトを上記第１バージョンに応じたオブジェクトに変換する
ことを特徴とする装置。
【請求項６５】
請求項６４に記載の装置であって、
上記第１バージョンのオブジェクトの入力ストリームは、同クラスの上記第１バージョンのオブジェクトのフィールドをインスタンス化し、上記クラスバージョン識別子に従って識別される通りに、上記検索したクラスバージョン中立オブジェクトの対応フィールド内に記憶されたデータに対応するデータを上記フィールドに配置するように構成されている
ことを特徴とする装置。
【請求項６６】
請求項６５に記載の装置であって、
上記第１バージョンのオブジェクトの入力ストリームは、対応するフィールドを持たない上記検索したクラスバージョン中立オブジェクトの空データを、同クラスの上記第１バージョンのオブジェクトのフィールドに配置するように構成されている
ことを特徴とする装置。
【請求項６７】
請求項６６に記載の装置であって、
上記第２バージョンから上記第１バージョンのオブジェクトの出力ストリームへと変換された上記第１バージョンに従って上記オブジェクトを入力することにより、上記第１バージョンのオブジェクトのビット又はバイトストリーム表記からなるクラスバージョン中立オブジェクトを形成し、上記クラスバージョン中立オブジェクトを記憶するように構成されている
ことを特徴とする装置。
【請求項６８】
クラスタイプのオブジェクトをクラスタイプのバージョン構造に従って処理するデータ処理装置であって、
上記クラスタイプのバージョンをロードしてクラスタイプのバージョンの実行環境を提供するバージョンのクラスローダーを有し、
上記クラスタイプのオブジェクトに対応する上記クラスタイプのバージョンの実行環境を提供し、
上記クラスタイプのオブジェクトを受信し、
上記クラスタイプのオブジェクトからクラスタイプ構造を削除して上記クラスタイプのバージョンとは無関係のオブジェクトを形成し、
クラスタイプのオブジェクト識別子及びクラスタイプのバージョン識別子を、上記クラスタイプのバージョンと無関係のオブジェクトと関連付けるように構成されている
データ処理装置。
【請求項６９】
コンピュータシステムネットワークであって、
サーバコンピュータシステムを提供する請求項３６から請求項６８のうち、いずれか１項に記載のデータ処理装置と、
上記サーバコンピュータシステムと通信するように動作するクライアントコンピュータシステムとを有し、
上記クライアントコンピュータシステムは、クライアントコンピュータシステムが定義する第１又は第２のクラスバージョンでの動作に対して、上記サーバコンピュータシステムと通信を確立する手段を有する
コンピュータシステムネットワーク。
【請求項７０】
請求項６９に記載のコンピュータシステムネットワークであって、
上記サーバコンピュータシステムは、上記クライアントコンピュータシステムとの通信に応答し、クライアントコンピュータシステムに基づいて、上記第１又は第２バージョンをクラスバージョン記憶媒体からロードする
ことを特徴とするコンピュータシステムネットワーク。
【請求項７１】
請求項７０に記載のコンピュータシステムネットワークであって、
インターネットに対して動作し、上記クラスバージョン記憶媒体は上記サーバに対して上記クライアントから伝達されたＵＲＬに対応する
ことを特徴とするコンピュータシステムネットワーク。
【請求項７２】
各実施形態及び各図面を参照して実質的に上述した方法。
【請求項７３】
各実施形態及び各図面を参照して実質的に上述したコンピュータプログラム。
【請求項７４】
各実施形態及び各図面を参照して実質的に上述したデータ処理装置。
【請求項７５】
各実施形態及び各図面を参照して実質的に上述したコンピュータシステム。
【発明の詳細な説明】
【０００１】
技術分野
本発明は、データ処理装置、方法、及びシステムに関する。また、特に、限定ではないが、本発明は、動的なクラスローディング処理をサポートするオブジェクト指向環境を動作するデータ処理装置、方法、及びシステムに関する。
【０００２】
背景技術
Ｃ＋＋， ＪＡＶＡ（登録商標）， Ｓｍａｌｌｔａｌｋ等のオブジェクト指向プログラミング言語は、厳密なルールに従う、高度に構造化、形式化された言語である。そして、この言語の目的は、オブジェクト指向言語で記述されたコンピュータプログラムコードのモジュール性、信頼性、頑健性、及び再利用性を他の言語で記述されたものよりも高めることにある。オブジェクト指向プログラミング言語の特徴の一つに、抽象的なデータタイプ、及びデータの一部又は全部のインプリメントを定義するクラスを、システム及び／又はユーザが一つ以上定義できることにある。クラスのインスタンスはオブジェクトであり、このクラスは、内部のオブジェクト及びオブジェクトのプロパティに適用される、オペレーション又は特徴のリストを定義する。
【０００３】
クラスは階層的に形成することができる。ＪＡＶＡにおいてクラスは線形構造であり、Ｃ＋＋においてクラスはツリー又はグラフ構造となっている。例えば、青果店のためのＪＡＶＡベースの在庫制御システムでは、
リンゴは果物から継承され、
果物は食品から継承され、
食品は在庫から継承され、
在庫はオブジェクトから継承される。
【０００４】
このように、スーパークラス構造はしばしば、ベースクラス（ＪＡＶＡでは常にオブジェクトクラス）まで続くクラス構造全体を含む、リスト、ツリー、又はグラフの形態で形成される。従って、上記の例では、
りんごクラスは果物クラスを拡張し、
果物クラスは食品クラスを拡張し、
食品クラスは在庫クラスを拡張し、
在庫クラスはオブジェクトクラスを拡張する。
【０００５】
スーパークラス構造を記述するアレイは、「りんご」、「果物」、「食品」、「在庫」、及び「オブジェクト」を含む。
【０００６】
ＪＡＶＡシンタックスでは、ＪＡＶＡのルールがオブジェクトクラスを最終親クラスとして定義することから、オブジェクトクラスが常にベースクラスとなる。
【０００７】
オブジェクト指向環境においては、オブジェクトは所定のクラス内に所属しない限り存在せず、所定のクラス内に所属しないオブジェクトを使用した場合には、プログラムコンパイラ又はインタープリタが、クラスが定義されていない旨のエラーメッセージを生成する。クラス−オブジェクト構造は、プログラミング環境内のデータタイプを管理する上で強力な手段を提供する。本出願においては、「オブジェクト指向」とは、クラス−オブジェクト構造を少なくとも備える環境のことを意味し、オブジェクト指向環境の例としては、ＪＡＶＡ仮想マシンがある。
【０００８】
オブジェクト指向プログラミング言語により得られる制御は、言語やその言語で記述されたアプリケーションプログラムの構造やデザインを管理する上では強力な手段となるが、クラスの更新やクラスの新しいバージョンの作成が望ましい若しくは必要である場合には問題がある。そのような場合の一例としては、マーチャントがインターネットなどのコンピュータネットワークを介して顧客に電子商取引サービスを提供する場合がある。例えば、電子商取引サービスがメールオーダーカタログサービスである場合には、メールオーダーサービスを提供するソフトウェアは、マーチャントの電子商取引サーバ上でオブジェクト指向言語で動作する。クラスは、「タイトル」と「ドル価格」の属性を有する「本」等のオブジェクトを記述するように定義される。暫くして、マーチャントは、商売が軌道に乗り、商売の範囲を米国外に拡張することを望むようになる。マーチャントは、米国外の顧客に対する魅力を高めるために、英貨ポンド、ユーロ、円等のドル以外の通貨で価格を表示することを望む。このためには、マーチャントは、各「本」のインスタンスが、「タイトル」、「ドル価格」、「ポンド価格」、「ユーロ価格」、及び「円価格」から成る、新しいバージョンの「本」クラスを作成しなければならない。新しい「本」オブジェクトは、クラスの新しいバージョンで作成（インスタンス化）される。このように、マーチャントのカタログは、オリジナルのクラスの所属するクラスと新しいクラスに所属するオブジェクトとにより構成される。
【０００９】
現在のシステムにおいては、新しいクラスのバージョンは、ＪＡＶＡやＣ＋＋等のオブジェクト指向言語の継承性を利用して作成される。変更が必要なクラスは、古いクラスを変更すること無しに新しいフィールドとメソッドをサポートする新しいクラスにより継承される。継承性を利用することにより、フィールドとメソッドを追加することによってのみ新しいクラスを作成することができる。継承したクラスからフィールドとメソッドを取り除くことはできない。継承したクラスは、継承されたクラスの少なくともフィールドとメソッドを備えなければならない。このように、継承性を利用したクラスのバージョン管理は、完全な再構築ではなくクラスへの追加処理によってなされるので制約がある。継承性に基づいてのクラスバージョン管理は、同じクラス（継承されたクラス）の異なるバージョンに同じ名前を付与することができないので、新しいクラスのためのネーミング／ナンバリングスキームが必要となる。これにより、種々の名前のクラスが数多く生成されることとなる。
【００１０】
青果店の在庫制御システムを例とすれば、果物クラスは、追加処理が行われる度に、果物、果物１、果物２といったように、複数の名前を備えなければならない。
【００１１】
メールオーダー本サービスは、「本」等のクラスの各バージョンには、同じ名前を付与した場合にはバージョン間でコンフリクトが生じるので、それぞれ異なる名前を付与する。前の例で言えば、「本」の新しいクラスは、本のクラスから継承され、そのクラスの全ての属性（「タイトル」や「ドル価格」）だけでなく、「ポンド価格」、「ユーロ価格」、「円価格」の追加属性を有するように拡張される。また、この新しいクラスには、オリジナルの「本」クラスとのコンフリクトを避けるために、新しい名前が付与される。例えば、新しいクラスは「国際本」という名前を有し、「ドル価格」、「ポンド価格」、「ユーロ価格」、及び「円価格」を属性として備える。
【００１２】
また、付加的に、「タイトル」、「ドル価格」、「ポンド価格」、「ユーロ価格」、及び「円価格」を属性として備える、「国際本」という全く新しいクラスを作成してもよい。
【００１３】
継承、又は、新しく作成されたクラスは、どんなものであろうとも異なる名前で作成される。
【００１４】
しかしながら、マーチャントの既存のクライアント又は顧客は、オリジナルクラス内のオブジェクトを利用可能なアプリケーションソフトウェアのみを有する。さらに、新しい顧客は、オリジナルクラスのバージョンのオブジェクトを読み取り可能なソフトウェアと、新しいクラスのバージョンのオブジェクトを読み取り可能なソフトウェアの、二つのタイプのソフトウェアを有することは望まず、一つのタイプのソフトウェアを備えることを希望する。従って、マーチャントは、オリジナルサービスを使用する顧客と新しいバージョンのサービスを使用する顧客の双方に対してサービスを提供するために、オリジナルバージョンクラスと新しいバージョンクラスのオブジェクトで在庫（本）が表記されたカタログを作成しなければならない。継続的にサービスを維持、改善、進化させたいマーチャントは、新しいクラスのバージョンを均等に進化、作成することが必要となる。複数のクラスのバージョンを考慮するためには、オブジェクトのコピーを複数作成、記憶しなければならず、このことは、一貫して統合されたサービスをマーチャントが維持することを困難にする。例えば、このような進化するサービスを維持することは構造化され統合された論理構造にとって困難であり、一般に、一貫性と構造は進化に伴い質が落ちる。サービスの進化は、重要なメンテナンスとリエンジニアリング努力を必要とし、このことは、例えばサービスやシステムのダウン時間の発生、マーチャントの支出増加、論理構造の質低下に繋がってしまう。さらに、記憶容量の複製も必要となる。各新しいバージョンについて、記憶容量の幾何学的増加が必要となり、クラスのバージョンがｎ個である場合には、一つのクラスのバージョンに必要な記憶容量と比較して、２ｎ−１倍記憶容量が増加する。そのような記憶容量の幾何学的増加は不利益をもたらす。
【００１５】
付加的に、マーチャントは、適切なアップグレードアプリケーションソフトウェアを提供して既存の顧客を保証し、最新のクラスのバージョンに対応できるようにサービスをアップグレードすることもできる。このことは、サービスをアップグレードするためのシステム及びサービスのダウン時間を必要とし、また、種々のクラスバージョンのサービス間で在庫の一貫性を維持する上で問題を生じさせる。さらには、最新のソフトウェアで顧客にサービスを提供する上で論理的な問題がある。このことは、顧客が定期的にアップグレードを行う必要がない、可能な限りオープンなサービスを提供したいという要求とは相反する。既存のクライアントは、アップグレードされたクラスを使用するためには、彼らのソフトウェアをアップグレードしなければないことに抵抗するかもしなない。特に、他の通貨等、そのクラスの強化を望まない顧客は抵抗するであろう。
【００１６】
なお、従来技術文献ではしばしば、継承したクラスは、継承されたクラスの新しいバージョンであるとされているが、これは技術的には正しくない記述であり、新しいクラスは、継承されたクラスの拡張であるから、子クラス又はサブクラスと記述する方がよい。
【００１７】
以下では、「クラスバージョン」という語句を用いて、本発明の一態様及び実施形態について記述する。この記述において、「クラスバージョン」又は「クラスのバージョン」は、他のクラスと同じ名前を有するが、例えば、少ない、多い、及び／又は異なるフィールド、メソッド、他の属性を備えて構造が異なるクラスのことを意味する。本発明の一態様の説明において使用されている「クラスバージョン」は、例えば継承されていない等、従来技術におけるこの語句の記載とは異なるクラスを表す。
【００１８】
本発明の実施形態は、上述問題若しくは欠点の少なくとも一つを解決するためになされたものである。
【００１９】
発明の開示
本発明の特有且つ望ましい一態様は付随する独立請求項に記述されている。従属項及び／又は独立項の特徴の組み合わせは適当に考えられ、請求項には必ずしも記述していない。
【００２０】
本発明の第１の態様において、同一クラスの第１及び第２バージョンに対して動作するオブジェクト指向実行環境を供給する、データ処理装置の動作方法を提供しており、当該動作方法では、同一クラスの上記第１バージョンに従って動作する第１のサービス、及び同一クラスの上記第２バージョンに従って動作する第２のサービスと通信する上記オブジェクト指向実行環境を設定し、さらに上記オブジェクト指向実行環境により、上記第１のサービスは、同一クラスの上記第１バージョンに従って動作する第１バージョンの実行環境に対してのみ通信し、上記第２のサービスは、同一クラスの上記第２バージョンに従って動作する第２バージョンの実行環境に対してのみ通信する。
【００２１】
本発明の第２の態様において、同一クラスの第１及び第２バージョンに対して動作するオブジェクト指向実行環境を供給するデータ処理装置を提供しており、当該データ処理装置は、同一クラスの上記第１バージョンに従って動作する第１のサービス、及び同一クラスの上記第２バージョンに従って動作する第２のサービスと通信し、上記第１のサービスは、同一クラスの上記第１バージョンに従って動作する第１バージョンの実行環境に対してのみ通信し、上記第２のサービスは、同一クラスの上記第２バージョンに従って動作する第２バージョンの実行環境に対してのみ通信するように構成されている。
【００２２】
好ましい実施形態として、オブジェクト指向実行環境は、仮想マシンを備える。本発明に係る実施形態は、同一の仮想マシンにおいて、同一の名前を有するクラスの異なるバージョンそれぞれに対して、実行環境が存在することを支援している。
【００２３】
本発明の第１と第２の態様に係る実施形態の利点は、同一の名前が付いたクラスの異なるバージョンが、同時に存在することを回避する名前空間のコリジョンなしに、同一クラス名を有する別々のクラスのバージョンを、同一の環境内、特に同一の仮想マシン内で、同時に処理できることである。第１及び第２バージョンの実行環境は、同一クラスの第１及び第２バージョンのオブジェクトを、お互いに独立させた形で動作する。
【００２４】
これは、新規のサービスバージョン毎にクライアントソフトウエアを更新する必要性がなくなるため、有効である。クライアントが使用する異なるサービスバージョンのオブジェクトを、同一の仮想マシン内で処理することが可能となる。
【００２５】
好ましくは、オブジェクト指向実行環境は、同一クラスの第１バージョンに従って動作する第３のサービスに対し、第１バージョンの実行環境に対してのみ通信することを可能にする。これにより、２つ以上のサービスを、各クラスバージョンに対して提供することができる。迅速にレスポンスを行うためには、同一バージョンのサービスが多数存在する、あるいはクライアントがアクセス可能であることが求められるインターネットベースの環境において、これは大変有効である。また、特定のバージョンのユーザやクライアントの数を増加させるために必要とされることは、そのバージョンで動作する新規サービスを開始させることであり、よって拡張性の強化に繋がる。
【００２６】
オブジェクト指向実行環境は、好ましくは、第１バージョンの実行環境を確立するための、同一クラスの第１バージョンに対応する第１バージョンのクラスローダーを有する、第１のクラスコンテキストオブジェクトをインスタンス化し、第２バージョンの実行環境を確立するための、同一クラスの第２バージョンに対応する第２バージョンのクラスローダーを有する、第２のクラスコンテキストオブジェクトをインスタンス化する。第１バージョンのクラスローダーは、同一クラスの第１バージョンを実行して第１バージョンの実行環境を確立するメソッドを備え、第２バージョンのクラスローダーは、同一クラスの第２バージョンを実行して第２バージョンの実行環境を確立するメソッドを備えることが好ましい。各第１及び第２バージョンのクラスローダーは、同一クラスの第１及び第２バージョンそれぞれに対して、エントリインタフェイスを確立するメソッドを有する。
【００２７】
第１及び第２バージョンのクラスローダーは、第１及び第２バージョンのオブジェクト入力ストリームのそれぞれを実行するように、第１及び第２バージョンの実行環境のそれぞれを設定可能である。第１バージョンのオブジェクトの入力ストリームは、同一クラスの第１バージョンに従って、対応するオブジェクトを表すビットストリームを受信し、且つ、同一クラスの第１バージョンのオブジェクトを出力する。第２バージョンのオブジェクトの入力ストリームは、同一クラスの第２バージョンに従って、オブジェクトを表すビットストリームを受信し、且つ、同一クラスの第２バージョンの対応するオブジェクトを出力する。こうした構成により、ビットストリームの、関連オブジェクトへの変換処理を、比較的簡単に行うことができる。さらに、オブジェクト指向実行環境に供給されるデータは、ビットストリームの形式、すなわちクラスに対して中立な形式であるため、名前空間のコリジョンが起きない。ビットストリームが、関連する第１又は第２の実行環境にエントリするのは、そのビットストリームが、関連するバージョン化オブジェクト入力ストリームにより、適切なオブジェクトに変換される場合のみである。
【００２８】
好ましくは、オブジェクト指向実行環境は、オブジェクト指向実行環境自身に対して動作する第１及び第２バージョンの実行環境の記録を保存する。オブジェクト指向実行環境でのサービスコールを、当該記録と照合することにより、第１又は第２のサービスのどちらがコールしているかを判別し、照合の結果に基づいて、サービスコールを行っているサービスと、第１又は第２バージョンの実行環境のうちどちらか一方との間の通信準備を行う。これにより、サービスと、同一クラスバージョン、例えば第１又は第２バージョンに対して動作する実行環境との間のみの通信を、確実に行うことができる。
【００２９】
特に有益とされる実施形態において、オブジェクト指向実行環境は、第１のサービスのサービスクラスに応じて、第１バージョンのクラスローダーをロードする。これにより、最初から、全てのバージョンのクラスローダーを動作させる必要がなくなる。クラスローダーは、そのサービスバージョンに対してリクエストがあった際に、ロードされればよい。ある実施態様では、バージョンクラスコンテキストオブジェクトが、その属性のひとつとして、バージョンクラスローダーを備える。このような実施態様では、バージョンクラスローダーは、サービスコールのバージョンに関連するバージョンクラスコンテキストとなり、これがロードされることにより、対応するバージョンのクラスローダーを自動的にロードする。
【００３０】
それに対応して、オブジェクト指向実行環境は、第２のサービスのサービスコールに応じて、第２バージョンのクラスローダー、或いは任意に、第２バージョンのバージョンクラスコンテキストを、ロードすることができる。
【００３１】
特に有益とされる実施形態において、オブジェクト指向実行環境は、第１及び第２の接続ポイントを供給する。第１の接続ポイントは、第１のサービスと、第１バージョンの実行環境との間の通信を可能とするように構成され、第２の接続ポイントは、第２のサービスと、第２バージョンの実行環境との間の通信を可能とするように構成されている。この方法では、第１又は第２の接続ポイントのどちらのポイントで通信が発生しても、対応する第１又は第２バージョンの実行環境に対してのみ通信を送ることができる。従って、第１バージョンのオブジェクトは、第２バージョンの実行環境と通信することができないため、名前空間のコリジョンは回避される。又、その逆も同様である。
【００３２】
オブジェクト指向実行環境は、好ましくは、第３のサービスに対応する第３の接続ポイントを供給する。第３の接続ポイントは、第３のサービスと第１バージョンの実行環境との間の通信を可能とするように構成されている。従って、同一のバージョンを実行する別々のサービスは、先ず適切なバージョンの実行環境としか通信することができない接続ポイントと接続を図るため、通信が可能な実行環境に関して制限される。
【００３３】
第１のサービスは、第１及び第２の接続ポイントのうち、第１の接続ポイントに対してのみ通信するように設定され、第２のサービスは、第１及び第２の接続ポイントのうち、第２の接続ポイントに対してのみ通信するように設定されている。さらに、第３のサービスは、第１、第２、及び第３の接続ポイントのうち、第３の接続ポイントに対してのみ通信するように設定されている。
【００３４】
サービスからオブジェクト指向実行環境に対してのサービスコールには、クラスバージョン識別子が含まれることが好ましい。このような構成では、オブジェクト指向実行環境は、サービスコールに対応するクラスバージョン識別子を検証することによって、そのサービスコールが、同一クラスの第１又は第２バージョンのどちらに関係するかを判別する。これは、サービスコールが指定するバージョンの実行環境、或いは接続ポイントを特定する際に、サービスコールに対応するクラスバージョンを判別する極めて簡単な方法である。
【００３５】
オブジェクト指向実行環境は、同一クラスの対応バージョンを定義するバイトコードのハッシュから、クラスバージョン識別子を形成することが好ましい。通常、バージョン化オブジェクト出力ストリーム、若しくは、その親クラスのうちのひとつには、クラスバージョン識別子を形成するためのバイトコードのハッシュを行うメソッドが含まれる。
【００３６】
好ましい実施形態において、第１及び第２バージョンのクラスローダーは、クラスバージョン中立オブジェクトを形成するように、第１及び第２バージョンの実行環境のそれぞれにおいてインスタンス化されたオブジェクトから、クラス構造を介して、第１及び第２バージョンの実行環境を設定可能である。さらに、第１及び第２バージョンのクラスローダーは、オブジェクト識別子及びクラスバージョン識別子を、クラスバージョン中立オブジェクトと関連付けるように設定されている。クラスバージョン中立オブジェクトのクラス識別子を関連させるように、第１及び第２バージョンのクラスローダーが、第１及び第２の実行環境を設定することが望ましい。
【００３７】
このように、各バージョンの実行環境内でインスタンス化されたオブジェクトは、クラスバージョン中立形式に変換される。こうした形式により、名前空間のコリジョンを起こさずに、バージョン実行環境の外部と通信することが可能となる。クラスバージョン中立オブジェクトには、そのクラスバージョン中立オブジェクトと対応するものに関して特定することが可能なオブジェクト識別子、及び、そのクラスバージョン中立オブジェクトが形成されたクラスバージョンを表すクラスバージョン識別子が含まれる。そのクラスバージョン中立オブジェクトが形成されたクラスを示すために、クラス識別子も、クラスバージョン中立オブジェクト内に含まれることが好ましい。このことは、２つ以上のクラスからなる別々のバージョンが存在する環境において、極めて有効となる。
【００３８】
好ましくは、第１及び第２バージョンの実行環境は、オブジェクトを表すビット又はバイトストリームを形成することにより、クラス構造を消去してクラスバージョン中立オブジェクトを形成するように設定されている。
【００３９】
特に好ましい実施形態として、第１及び第２バージョンのオブジェクトの入力ストリームは、第１及び第２バージョンのクラスローダーのそれぞれによって実行される。第１バージョンのオブジェクト出力ストリームは、同一クラスの第１バージョンのオブジェクトを受信し、且つ、そのオブジェクトを表すビットストリーム及び第１バージョン識別子を出力するように動作する。第２バージョンのオブジェクト出力ストリームは、同一クラスの第２バージョンのオブジェクトを受信し、且つ、そのオブジェクトを表すビットストリーム及び第２バージョン識別子を出力するように動作する。
【００４０】
クラスバージョン識別子は、好ましくは、ビット又はバイトストリームに含まれる。通常、クラスバージョン中立オブジェクトは、オブジェクト識別子フィールド、クラスバージョン識別子フィールド、及びビット又はバイトストリームを有するフィールドを備える。さらに、クラスバージョン中立オブジェクトは、オブジェクトのクラスを示すクラス名フィールドを備えることが好ましい。
【００４１】
特に好ましい実施形態として、クラスバージョン中立オブジェクトは、記憶されてもよい。好ましくは、構造化されたクラスバージョン中立オブジェクトの記憶及び検索を容易にするために、クラスバージョン中立オブジェクトを、オブジェクトの内容を示すインデックスキーと関連付けてもよい。
【００４２】
本発明に係る特に有益な実施形態として、クラスバージョン中立オブジェクトは、記憶部から検索され、そのクラスバージョン中立オブジェクトが形成されたクラスバージョンとは異なるクラスバージョンに対応する、別のクラスバージョンオブジェクトに変換されてもよい。例えば、第１バージョンのオブジェクトから形成されたクラスバージョン中立オブジェクトは、記憶部から検索され、第２バージョンに応じたオブジェクトに変換されてもよい。これは、あるサービスの別々のバージョンが、多数の異なるクラスバージョンから生成されたクラスバージョンオブジェクトを検索し、さらに、それらをリクエストされたバージョンのオブジェクトへ変換するということであり、大変有益である。従って、別々のバージョン間でデータや情報を共有できることから、アプリケーションサービスが存在するクラスのバージョン毎に、さらには、別々のバージョンから形成又は生成されたクラスのバージョン毎に、記憶データを再現する必要がなくなる。これにより、データの管理や制御がし易くなる。
【００４３】
通常、変換とは、クラスバージョン中立オブジェクトに対応するオブジェクト識別子及びクラスバージョン識別子に従って、クラスバージョン中立オブジェクトに由来する対応フィールドのデータを、別のクラスバージョンのオブジェクトのフィールドに配置することである。クラスバージョン中立オブジェクトに対応フィールドを持たない別のクラスバージョンのオブジェクトのフィールドには、デフォルト値を配置することが好ましい。このように、あるクラスのどのフィールドに対しても対応するデータがない場合であっても、そのクラスの別バージョンが作成される。
【００４４】
本発明の好ましい実施形態として、第１及び第２バージョンのオブジェクトの入力ストリームは、入力ビット又は入力バイトストリーム内のバージョン識別子を認識するように動作する。この実施形態では、オブジェクト識別子に対応する記憶オブジェクトを検索するために、オブジェクト識別子を含んだリクエストを第１のサービスから受信し、そのリクエストを、第１バージョンの実行環境に伝達し、オブジェクト識別子に対応する、記憶済みのクラスバージョン中立オブジェクトを検索し、それを第１バージョンの実行環境に配置し、検索したクラスバージョン中立オブジェクトを、第１バージョンのオブジェクト入力ストリームへ入力し、検索したクラスバージョン中立オブジェクトと関連するクラスバージョンを、同一クラスの第２バージョンとして識別し、クラスバージョン中立オブジェクトを、第１バージョンに応じたオブジェクトに変換する。
【００４５】
好ましくは、第１バージョンのオブジェクト入力ストリームは、同一クラスの第１バージョンのオブジェクトのフィールドをインスタンス化し、クラスバージョン識別子に従って識別される通りに、検索したクラスバージョン中立オブジェクトの対応フィールド内に記憶されたデータに対応するデータを、上記フィールドに配置する。検索したクラスバージョン中立オブジェクトが対応フィールドを持たない場合、同一クラスの第１バージョンのオブジェクトフィールドには、古いデータが配置されることが好ましい。
【００４６】
好ましくは、検索したクラスバージョン中立オブジェクトから第１バージョンに変換されたオブジェクトは、第１バージョンのオブジェクト出力ストリームに入力され、第１バージョンのオブジェクトを表すビット又はバイトストリームを有するクラスバージョン中立オブジェクトを形成する。その後、このクラスバージョン中立オブジェクトは保存される。従って、あるバージョンから生成された検索したクラスバージョン中立オブジェクトを、別の新しいクラスバージョンから生成されたクラスバージョン中立オブジェクトに変換することが可能となる。このように、あるクラスの古いバージョンに基づいて作成されたクラスバージョン中立オブジェクトは、検索を重ねるうちに、次第にそのクラスの新しいバージョンへと更新され、実質的に、再度記憶される。こうして、記憶されたデータは、そのクラスの最新のバージョンへと次第に更新される。
【００４７】
本発明の第３の態様として、クラスタイプのバージョン構造に従って、クラスタイプのオブジェクトを処理するデータ処理装置の構成方法が提供されており、この方法では、上記クラスタイプのバージョンをロードして、クラスタイプのバージョンの実行環境を提供する、バージョンクラスローダーを有する上記データ処理装置を構成し、上記クラスタイプのオブジェクトに対応する上記クラスタイプのバージョンの実行環境を提供し、上記クラスタイプのオブジェクトを受信し、上記クラスタイプのオブジェクトからクラスタイプ構造を除去し、上記クラスタイプのバージョンから独立したオブジェクトを形成し、クラスタイプのオブジェクト識別子及びクラスタイプのバージョン識別子を、上記クラスタイプのバージョン独立のオブジェクトと関連付ける。
【００４８】
本発明の第４の態様として、クラスタイプのバージョン構造に従ってクラスタイプのオブジェクトを処理するデータ処理装置を提供しており、上記クラスタイプのバージョンをロードしてクラスタイプのバージョンの実行環境を提供する、バージョンクラスローダーを有し、上記クラスタイプのオブジェクトに対応する上記クラスタイプのバージョンの実行環境を提供し、上記クラスタイプのオブジェクトを受信し、上記クラスタイプのオブジェクトから上記クラスタイプ構造を除去して、上記クラスタイプのバージョンから独立したオブジェクトを形成し、クラスタイプのオブジェクト識別子及びクラスタイプのバージョン識別子を、上記クラスタイプのバージョン独立のオブジェクトと関連付けるように構成されている。
【００４９】
好ましくは、クラスタイプバージョン実行環境は、仮想マシンに譲歩する。
【００５０】
本発明の第５の態様として、コンピュータシステムネットワークが提供されており、サーバコンピュータシステムを提供する、実質的に上述したデータ処理装置と、上記サーバコンピュータシステムと通信するように動作するクライアントコンピュータシステムを有し、上記クライアントコンピュータシステムは、クライアントコンピュータシステムが定義するクラスタイプのバージョンでの動作に対して、上記サーバコンピュータシステムとの通信を確立する手段を有する。
【００５１】
本発明の上述した態様に係る実施形態の利点は、オブジェクトの、クラスバージョンやクラスタイプ、特にクラスタイプバージョンに影響されない総体的な処理環境が確立されることである。クラスタイプバージョン独立オブジェクトは、クラスバージョンやクラスタイプに対して中立であり、バージョン独立オブジェクトが示すオブジェクトのクラスやクラスタイプのバージョンに制約されるものではない。従って、通常のオブジェクト指向実行環境、或いはクラスタイプの実行環境とは独立して動作するため、そのような制約とは無関係に実行される。これにより、異なるバージョンであっても、同一クラスのオブジェクトは、クラスバージョン独立オブジェクトに変換され、同一の処理環境内で実行される。こうしたクラス又はクラスタイプのバージョンに影響されない全般的或いは総体的な環境は、例えば、厳密なデータエンティティ構造やクラスルールを有するオブジェクト指向言語等の、プログラミング言語を用いた従来のプログラミングとは対照的である。実際のところ、そういったオブジェクト指向言語の本来の目的とは矛盾している。
【００５２】
しかしながら、別々のクラスやクラスタイプのバージョンを利用したサービスが、普遍的な処理環境を使用できるという点において、本発明の上述の態様は、重要な利点をもたらすものであると、本出願人は認識している。これは、サービスが発展し更新される際に、特に有益である。本発明の態様によれば、動作するサービスの全て異なるバージョンにおいて、データエンティティを作成したり、また、全てのデータエンティティを現行のバージョンに更新したりする必要がなくなり、クラス又はクラスタイプのバージョンに影響されない環境において、全てのデータエンティティを取り扱うこととなる。これにより、サービスのオペレータが行うはずの、重要な保守作業や更新作業を実質的に削減することができる。また、変換が必要な場合に起こりうる、バージョン変換されたデータエンティティ間で一貫性が損なわれる可能性を低減することもできる。さらに、別々のサービスバージョンが生成されて使用されている場合であっても、システムの論理構造を維持することができる。
【００５３】
上述の態様に係る本発明の実施形態には、データ処理装置が行うバージョン更新の必要性なしに、サービスの新規バージョンが実行されるという点に、更なる利点がある。必要とされるのは、利用を希望するデータ処理装置のサービスのバージョンに従って、適切なクラスのバージョンをデータ処理装置にロードすることだけである。
【００５４】
このように、サービスの新規バージョンが作成された場合であっても、例えば、そのサービスのバージョンを処理するための新規の仮想マシンを立ち上げるといった様な、データ処理装置を更新する必要性はない。データ処理装置は、新規のバージョンに対応する適切なクラスバージョンの実行環境を提供するように設定することができる。これは自動的に行われ、その際には、適切なクラスバージョンの実行環境の動作準備が整った後に、新規バージョンのオブジェクトがデータ処理装置へ送られ、そのオブジェクトの受信に際して、適切なクラスバージョンの実行環境が自動的に確立されるようになっている。これは、データ処理装置が必要とするメンテナンスの量を削減できるため、重要な利点である。
【００５５】
クラス識別子は、好ましくは、クラス独立のオブジェクトと関連し、そのクラス独立のオブジェクトによって示されるオブジェクトのクラスタイプを確実に判別することができる。従って、クラス独立のオブジェクトが示すオブジェクトのクラスによる制約を受けることなく、当該クラス独立のオブジェクトが実行されても、そのクラスに関する情報を取得することができる。
【００５６】
クラスタイプ構造は、クラスタイプのオブジェクトのビット又はバイトストリームを形成することによって、クラスタイプのオブジェクトから削除されることが好ましい。または、クラスタイプのバージョン識別子の表記が、ビット又はバイトストリーム内に含まれてもよい。
【００５７】
クラスタイプ独立のオブジェクトは、オブジェクト識別子フィールド、クラスバージョンの識別子フィールド、及びビット又はバイトストリームを含むフィールドを備えることにより、クラスタイプ独立のオブジェクトが形成されることが好ましい。
【００５８】
クラスタイプ独立のオブジェクトは、クラス名によってクラス独立のオブジェクトをソートする場合に有効な、クラスタイプ独立のオブジェクトのクラスタイプを示すクラス名フィールドを備えることが好ましい。
【００５９】
本発明の第６の態様において、クラスタイプ独立のオブジェクトは、適切な記憶媒体に保存される。オブジェクト指向環境では、不揮発性の記憶媒体が用いられる永続的オブジェクト空間や、揮発性の記憶媒体が用いられる一時的オブジェクト空間といった記憶媒体が、いわゆるオブジェクト空間の効果をもたらす。好ましくは、インデックスキーが、クラスタイプ独立のオブジェクトと関連付けられるか又は共に記憶され、クラスタイプ独立のオブジェクトが示すクラスタイプのオブジェクトの内容が、インデックスキーにより表される。これにより、クラスタイプ独立のオブジェクトが示すクラスタイプのオブジェクトを、ソートして検索するための有効的な手段が提供される。
【００６０】
本発明の第７の態様として、別のクラスタイプのバージョンに対応する実行環境が提供され、クラスタイプ独立のオブジェクトが、当該別のクラスタイプのバージョンに対応する、他のクラスタイプバージョンのオブジェクトに変換される。従って、クラスタイプ独立のオブジェクト形式を、後のサービスバージョン又は別のサービスバージョンに対応するクラスタイプのオブジェクトへ変換することにより、後のサービスバージョンは、先のサービスバージョン或いは異なるサービスバージョンのもとで作成されたオブジェクトを利用する。好ましくは、データ処理装置は、別のクラスタイプのバージョンの実行環境を提供する、別のクラスタイプバージョンをロードするための、バージョンクラスローダーにより構成されている。
【００６１】
本発明に係る好ましい実施形態では、クラスタイプ独立のオブジェクトに関連するオブジェクト識別子及びバージョン識別子に従って、別のクラスタイプオブジェクトのフィールドに対して、ビット又はバイトストリームに由来するクラスタイプオブジェクトの対応フィールドからのデータを配置する。即ち、オブジェクトの情報や、クラスタイプ独立のオブジェクトが示すオブジェクトのバージョン情報は、関連するフィールドの内容を、後のクラスタイプのバージョンにあるオブジェクトの対応フィールドに対してマップする際に用いられる。フィールドの内容は、ビットまたはバイトストリームに由来するため、クラスタイプ構造は存在せず、当該フィールドの内容は、使用されているデータ処理装置に対して、最下位レベルの表記となる。従って、その内容は、後のバージョンのオブジェクトに対する適切なフィールド内に保存される。本発明の好ましい実施形態では、変換処理において、クラスタイプオブジェクト内に対応フィールドを持たない別のクラスタイプオブジェクトのフィールドに対して、別のクラスタイプバージョンコンテキストに由来するデフォルト値を配置する。新規バージョンのオブジェクトにある追加フィールドの内容として、例えば、電話番号照会サービスの国際ダイヤルコード「４４」といった、標準的なエントリがあることが知られているように、その標準的な内容が、追加フィールドに入力されてもよい。これにより、先のクラスのバージョンのもとで作成されたオブジェクトは、後の或いは別のクラスのタイプのバージョンにおいても使用される情報を保持するように、更新される。
【００６２】
本発明のある態様において、記憶されたオブジェクトを検索するリクエストは、別のクラスタイプのバージョンに従って受信される。検索されるオブジェクトに対応する、記憶されたクラスタイプ独立のオブジェクトは、識別された後、別のクラスタイプのオブジェクトに変換される。従って、別のクラスタイプのバージョンにあるサービスバージョンは、クラスタイプのバージョンに応じて記憶された記憶オブジェクトの検索をリクエストし、検索されるオブジェクトに対応する、記憶されたクラスタイプ独立のオブジェクトを識別して、そのクラスタイプ独立のオブジェクトを、別のクラスタイプのオブジェクトへと変換する。好ましくは、別のクラスタイプのオブジェクトは、他のクラスタイプ独立のオブジェクトを形成するように、そのクラスタイプ構造が取り除かれてもよい。その後、オブジェクト識別子及び別のクラスタイプのバージョン識別子は、クラスタイプ独立のオブジェクトと入れ替わるための、他のクラスタイプ独立のオブジェクトと関連付けられる。従って、以前記憶したオブジェクトを更新することができ、それにより、更新されたオブジェクトは、クラスタイプ独立の形式で記憶され、さらにクラスタイプの更新バージョンが表される。このように、別々のサービスバージョンが進化するとともに、記憶されたオブジェクトも進化すると見なすことができる。しかしながら、こうした進化は、先に記憶したオブジェクトが、後のクラスタイプバージョンによりアクセスされたときにのみ、行われるものとする。
【００６３】
また、サービスのバージョンが新しくなる度に、保存されたオブジェクトの更新及び進化が自動的に行われるようにしてもよい。それにより、自動的に、データ処理装置を最新バージョンのサービスに対応したものとして維持できる。このような自動更新は、更新時に生じるエラーの可能性を減らし、システムが動作する様々なバージョンのサービスに対してシステムの論理構造を維持する。
【００６４】
上記別のクラスタイプ独立のオブジェクトは、通常、後の検索用に保存される。
【００６５】
本発明の別の態様において、上述したような本発明の実施形態を実施するようにデータ処理装置を構成するための、コンピュータプログラム手段を有するコンピュータプログラムを提供している。コンピュータプログラムは、オブジェクトコード、又はインタプリタコード等、いわゆるソースコードを有することが好ましい。当業者であれば想到しうるであろうが、ソースコードを用い、それに応じて処理装置を動作させる前に、当該ソースコードを、ターゲットとなるデータ処理装置においてコンパイルする必要がある。任意で、オブジェクトコード、すなわちコンパイルされたコードを、ターゲットとなるデータ処理装置に提供してもよく、当該処理装置において受信した状態で実質的に使用することができる。
【００６６】
本発明の更に別の態様において、前述のコンピュータプログラムに対して、キャリア媒体を提供している。キャリア媒体には、テープ又はディスク記憶媒体のような磁気記憶媒体、もしくは読み書き可能なＣＤ−ＲＯＭ又はソリッドメモリのような光記憶媒体が含まれてもよい。そのような記憶媒体は、適切なデータ処理装置上でロードできるように、ユーザに配布することも可能である。キャリア媒体は、任意に、電気通信キャリア媒体、もしくは電気通信信号により伝送される電子信号又は電気信号として実現されるコンピュータプログラムを含んでもよい。このようなキャリア媒体は、ＲＦキャリア信号、又は電子信号のための光キャリア信号であってもよい。
【００６７】
本発明の更に別の態様において、実質上前述のデータ装置に応じたデータ処理装置を含むコンピュータシステムネットワークを提供している。更に、コンピュータシステムネットワークは、サーバシステムと通信可能なクライアントコンピュータシステムを有する。クライアントコンピュータシステムは、クライアントコンピュータシステムが定義するクラスまたはクラスバージョンでの動作に対して、サーバコンピュータシステムと通信を確立する手段を有する。このように、クライアントコンピュータシステムは、そのシステムに対してバージョンに係わらず利用可能なサービスを用いることができる。例えば、新しいバージョンのサービスを用いることを望むクライアントがいる一方で、古いバージョンのサービスを用いることを望むクライアントもいるであろう。クライアントコンピュータシステムにて使用されるクラス又はクラスタイプバージョンに対応するクラス又はクラスタイプバージョンをロードするために、クライアントコンピュータシステムとの通信を、サーバコンピュータシステムが担当して行ってもよい。これにより、サーバコンピュータシステムの動作の元となるクラスタイプバージョンは、クライアントコンピュータシステムが使用するサービスの、クラスタイプバージョンに依存する形で定義される。
【００６８】
このように、サーバコンピュータシステムを特定のバージョンのサービスにおいて動作するように構成する必要はないが、クライアントコンピュータシステムにより使用されるサービスのバージョンに応じて動作することができるような構成となるように、クライアントコンピュータシステムに応答するよう設定するようにしてもよい。これにより、適用度が高く、修正が可能な、拡張性の高いコンピュータシステムを提供することができる。
【００６９】
サーバコンピュータシステムは、クライアントコンピュータシステムに使用されるクラス又はクラスタイプバージョンに対応するクラス又はクラスタイプバージョンを、クラス又はクラスタイプ記憶媒体よりロードすることが好ましい。こういった記憶媒体は、サーバコンピュータシステムの一部であってもよいし、コンピュータシステムネットワークがインターネットに対して動作可能な場合においては、クライアントからサーバに送信されるＵＲＬに対応するものであってもよい。このように、クライアントコンピュータシステムは、インターネット構造においてはＵＲＬとなる、クライアントが使用するクラス又はクラスタイプバージョンの位置を、サーバコンピュータシステムに伝達する。その後、サーバコンピュータシステムは送信されたＵＲＬにアクセスし、ＵＲＬ上に記憶されたクラスバージョンをロードする。
【００７０】
クラスバージョンを分散して記憶することにより、修正やアップデートが容易な拡張性のあるシステムが提供される。さらに、このシステムにより、高度に構成された、処理しやすい構造が提供される。
【００７１】
本発明の実施形態の利点は、クラスタイプのオブジェクトの表記が、クラス構造を欠いた記憶環境に保存されても、クラスバージョンに属すると定義されることである。従って、独立した、あるいは影響を受けにくい形のクラスに保存することによって、異なるクラスタイプのバージョンを含むオブジェクトを、同一の記憶環境に効果的に記憶することが可能となる。このように、記憶環境が、別々のクラスのバージョンを扱う必要性はなく、別々のクラスバージョン内のオブジェクトを処理するために、当該別々のクラスを記憶環境にロードする必要もない。さらに、クラス独立、或いはクラスの影響を受けない環境は、例えば、別々のクラスのバージョンにあるクラスタイプのオブジェクトの表記を、アプリケーションプログラムに応じて処理できる場合において、確立される。
【００７２】
本発明の実施形態の更なる利点は、クラスタイプのバージョン内のオブジェクトを、別のクラスタイプのバージョンで検索することが可能なように記憶することができることである。記憶されたオブジェクトの検索要求は、記憶されたオブジェクトが生成されたクラスタイプのバージョンとは異なるクラスタイプバージョン内で動作可能であり、記憶されたオブジェクトへのアクセス、及び記憶されたオブジェクトの検索も可能である。従って、オブジェクトの検索において、異なるクラスタイプバージョン内で検索要求を動作させるために、複数のクラスタイプバージョンのオブジェクトが記憶される必要なない。
【００７３】
図面の簡単な説明
図１は、サーバとクライアントコンピュータシステムを備えるコンピュータネットワークの模式図である。
【００７４】
図２は、図１のコンピュータシステムのコンポーネントを示すブロック図である。
【００７５】
図３は、従来までの複数バージョンのクラス環境を示すダイアグラム図である。
【００７６】
図４は、本発明の実施形態となる論理システムレベルアーキテクチャを模式的に示した図である。
【００７７】
図５は、本発明の実施形態となる論理サーバアーキテクチャを模式的に示した図である。
【００７８】
図６は、同じ仮想マシン内で同じクラスの種々のバージョンを動作させるための、本発明の実施形態の構成を模式的に示した図である。
【００７９】
図７は、図６に示す構成のセットアップ、及び本発明の実施形態の動作を示すフロー図である。
【００８０】
図８は、本発明の実施形態となる機能アーキテクチャを模式的に示した図である。
【００８１】
図９は、本発明の実施形態となるクラス中立オブジェクトの形成動作を示すフロー図である。
【００８２】
図１０は、本発明の実施形態となるオブジェクトの記憶動作を示すフロー図である。
【００８３】
図１１は、本発明の実施形態となる記憶オブジェクトの検索動作を示すフロー図である。
【００８４】
発明を実施するための最良の形態
本発明の実施形態の適切な環境はネットワーク環境である。以下、概論を経由して、ネットワーク環境の一般的な構成について説明する。
【００８５】
機能性を向上し、且つ、プリンタやスキャナ等のリソースを共有するために、個々のコンピュータシステムはしばしば、互いにリンクされてコンピュータネットワークを形成する。このようなネットワークは、個人的な組織に加えて、ある建物やその建物内のフロア等、その組織の離散的な地理位置にも制限される。しかしながら、コンピュータネットワークの一部は、例えば他の国等、地理的にお互いに離れた位置にあるコンピュータシステムにより構成される。このような大きなエリアのネットワークは、多くの場合、個々の組織には制限されないが、異なる組織のコンピュータネットワークをリンクすることにより、ンピュータネットワークの大きなエリアネットワークを形成する。
【００８６】
このようなネットワークの特別に重要な一例はインターネットである。インターネットは、コンピュータシステムのネットワークを備え、コンピュータシステムネットワークは実質的に全ての先進国を網羅する。どの組織もインターネット全体を所有する訳でもなく、インターネット全体に対して責任がある訳でもない。インターネットにより互いにリンクされたコンピュータシステムとコンピュータネットワークは、異なる組織によって所有、運営される。インターネット内の各コンピュータシステムは、固有のアドレスを有し、他のシステムのアドレスを用いてインターネット内の他のコンピュータと通信することができる。インターネット上のコンピュータシステム同士の通信フォーマットは、インターネット上の全てのシステムが理解し、互いに通信することができるように、インターネットプロトコル（ＩＰ）により定義されている。インターネットにより利用される電話通信システムは、ＩＳＤＮサービス、従来の電話システム（ＰＯＴＳ）、デジタル加入者線（ＤＳＬ）、セルラーや衛星ラジオ電話システム等のモバイル又は無線通信システム、ケーブル通信、又はその他の適当な電話通信媒体を備える。
【００８７】
コンピュータネットワークのためのソフトウェアで特別に有用なものは、ワールド・ワイド・ウェブ（ＷＷＷ）として知られているものである。ＷＷＷは、その機能を十分に使用するインターネットと共にしばしば利用されるが、そのソフトウェアは他のネットワークでも利用される。
【００８８】
また、ＷＷＷという語句は、テキスト、オーディオ、ビデオ等の種々の媒体内にあり、インターネットの一部を形成する等してコンピュータネットワーク内のコンピュータシステム内に記憶されている、情報全体を示す際に利用される。この情報は、通常は情報の性質と関連して適当なセグメントに分割され、例えばイメージは画像ファイル、文書はテキストファイルとしてそれぞれ形成される。また、この情報は、種々のタイプの情報とこの情報をコンピュータのスクリーン上に表示する際の情報のフォーマット方法を示す命令とを構成するデータファイルである、いわゆるウェブページも構成する。ＷＷＷ内では、個々のコンピュータだけでなく、情報の個々の部分又はグループもアドレスを有する。このように、正しいアドレスを設定することにより、一つのコンピュータシステムから、他のコンピュータシステムと通信できるだけでなく、コンピュータシステム上に記憶された情報の特定部分にアクセスすることができる。
【００８９】
インターネットやＷＷＷは、従来までの商売又は小売口に商品やサービスの新たな販路を加えるために、多くの商業組織により利用されている。そのような組織は、ＷＷＷ．ＡＭＡＺＯＮ．ＣＯＭの仮想本屋の本等、インターネットを介して商品やサービスを購入することを可能にする。ＡＭＡＺＯＮ．ＣＯＭ等の仮想店舗は、従来までの店舗経由の方法に代わって、潜在的な顧客又は購入者が商品及びサービスに直接アクセスすることができるように、インターネット又はＷＷＷ上の位置を使用する以外、従来までの小売口と実質的に同じように運営される。
【００９０】
図１は、サーバコンピュータシステム１０及びクライアントコンピュータシステム１１を備える、インターネット等のコンピュータシステムのネットワークを示す。サーバコンピュータシステム１０とクライアントコンピュータシステム１１は共に、システムユニット１２、ディスプレイスクリーン２０を備えたディスプレイ装置１８、キーボード２２とマウス２４を含むユーザ入力装置等の同じコンポーネントを有する。システムにはプリンタ２１も接続され、各システムユニット１２は、光ディスクドライブ１４，フロッピー（登録商標）ディスクドライブ１６、及び図１に図示しない内部ハードディスクドライブを含むメディアドライブを備える。また、ＣＤ−ＲＯＭ１５とフロッピーディスク１７が図示されている。さらに、サーバコンピュータ１０は、磁気ハードディスク１９等の大容量記憶メディアを備える。
【００９１】
種々の機能をインプリメントすると共に種々の情報を伝送するコンピュータプログラムが、一つ又はそれ以上のＣＤ−ＲＯＭ及び／又はフロッピィードライブにより供給され、このコンピュータプログラムは例えばハードディスク上に記憶される。図１に示すコンピュータシステムはネットワーク２に接続２６される。なお、この例において、ネットワーク２はインターネットであるが、このネットワーク２は、局所領域又は広領域の専用又は私営のネットワークであってもよい。コンピュータシステムによってインプリメント可能なプログラムは、電話通信ネットワーク及び／又はインターネット等の電話通信媒体を介して、電気信号として供給されてもよい。ラジオ電話ネットワークを介してモバイル端末として動作するクライアントコンピュータシステム１１については、電話通信媒体は、コンピュータプログラム及びデータや情報を示す、適切に符号化された信号を伝送するラジオ周波数キャリア波であってもよい。また、キャリア波は、光ファイバリンクのための光キャリア波であってもよいし、地上リンク電話通信システムのためのその他の適当なキャリア媒体であってもよい。
【００９２】
図２は、図１において言及したコンピュータシステムの形態を有する、データ処理装置の例を模式的、簡略的に示した図である。図２に示すように、コンピュータシステムは、バス構造３８に接続されたＣＰＵ３０等の種々のデータ処理リソースを備える。また、バス構造３８には、ＲＯＭ３２、ＲＡＭ３４等のデータ処理リソースも接続されている。ディスプレイアダプタ３６はディスプレイ装置１８をバス構造３８に接続する。一つ又はそれ以上のユーザ入力装置アダプタ４０は、キーボード２２及びマウス２４を含むユーザ入力装置をバス構造３８に接続する。プリンタ２１を接続するためのアダプタ４１も備えられている。一つ又はそれ以上のメディアドライブアダプタ４２は、光ディスクドライブ１４、フロッピーディスクドライブ１６、及びハードディスクドライブ１９等のメディアドライブをバス構造３８に接続するために設けられている。一つ又はそれ以上の電話通信アダプタ４４を設けることにより、コンピュータシステムを一つ又はそれ以上のネットワーク又は他のコンピュータシステムに接続するための処理リソースインタフェイス手段を提供できる。通信アダプタ４４は、要望に応じて、ローカルエリアネットワークアダプタ、モデム、及び／又はＩＳＤＮターミナルアダプタ、若しくはシリアル又はパラレルポートアダプタ等を含む。
【００９３】
図２は、サーバコンピュータシステム１０又はクライアントコンピュータシステム１１のどちらかに一方にとって適当な、コンピュータシステムのインプリメントの一つを模式的に表したものであることがわかる。以下に示す本発明の実施形態の記載から、本発明が適用可能なコンピュータシステムは種々の形態をとることが可能であることがわかるであろう。例えば、ディスプレイ装置１８とプリンタ２１とを備えるサーバコンピュータシステム１０よりも、サーバコンピュータシステム１０は、単に、処理ユニットを備え、クライアントコンピュータシステム１１がアクセス可能なものであればよい。また、クライアントコンピュータは、ウェブテレビや、インターネット等のコンピュータネットワークへのアクセスを可能にする家庭内テレビのためのセットトップボックス等の、インターネット又はネットワークコンパチブルなＰＣ型でないコンピュータであってもよい。
【００９４】
また、クライアントコンピュータは、無線ＰＤＡやマルチメディアターミナルのような形態であってもよい。
【００９５】
各コンピュータシステム１０，１１は、インターネット内で固有のアドレスを有し、ＷＷＷの用語内では、これらのアドレスはＵｎｉｆｏｒｍ Ｒｅｓｏｕｒｃｅ Ｌｏｃａｔｏｒｓ（ＵＲＬ）として知られている。また、ＷＷＷ内の各エンティティも固有のアドレス又はＵＲＬを備える。エンティティは、テキスト、グラフィックス、オーディオ、ビデオ等、種々のタイプの情報を備え、ハイパーメディア文書又はエンティティと呼ばれている。グラフィックファイル、オーディオファイル、ビデオファイル等の一つのデータタイプから成るファイルは、ＷＷＷ上で見つけることができ、個別にアドレス可能である。ＷＷＷ内では、ハイパーメディアエンティティは、ＨｙｐｅｒＴｅｘｔ Ｍａｒｋｕｐ Ｌａｎｇｕａｇｅ（ＨＴＭＬ）と呼ばれるプログラミング言語を用いて作成、取り扱われる。このＨＴＭＬは、エンティティの表記から情報のコンテンツを分けるようにエンティティをフォーマットする方法を提供する。ページのエレメントは、フォーマットコードであるタグと関連付けられている。すなわち、これは、同じ情報を含むエンティティは異なる方法で提供してもよいことになる。ＨＴＭＬは、ページのエレメントをフォーマット、記述するために、所定のタグのみを使用するマークアップ言語の一例である。さらに柔軟性のある言語は、ＥＸｔｅｎｓｉｂｌｅ Ｍａｒｋｕｐ Ｌａｎｇｕａｇｅ（ＸＭＬ）言語であり、このＸＭＬ言語によれば、ページの開発者によってタグを定義することが可能となる。マークアップ言語の他の例としては、無線アプリケーションプロトコル（ＷＡＰ）に従って動作する無線インターネットアクセスアプリケーションのための無線マークアップ言語（ＷＭＬ）、財務情報をフォーマットするために特別に設計されたファイナンシャルマークアップ言語（ＦＭＬ）がある。
【００９６】
ＷＷＷソフトウェアはクライアント−サーバアーキテクチャに基づいている。ブラウザ等のウェブクライアントは、文書等の情報の要求をウェブサーバに送信することが可能なコンピュータプログラムである。ウェブサーバは、クライアントからの要求に応じて、クライアントが要求した文書（エンティティ）、又は、適当な時にエラーメッセージを送信する。ウェブサーバはサーバコンピュータシステム１０上にある。クライアントが受信したエンティティはクライアントコンピュータシステム１１に記憶され、通常、エンティティはキャッシングとして知られている処理によってハードディスクドライブ１９に記憶される。クライアントのプログラムは、クライアントコンピュータシステム１１のハードディスクドライブ１９にあり、クライアントコンピュータシステム１１とインターネット及びＷＷＷとの間のインタフェイスを構築する。
【００９７】
本発明の実施形態は、ＪＡＶＡプログラミング言語等のオブジェクト指向言語によりインプリメントされる。以下、オブジェクト指向言語の一例として、ＪＡＶＡについて簡単に説明する。ＪＡＶＡは中間言語（バイトコード）を使用するインタプリト言語として優勢的にインプリメントされた。ＪＡＶＡプログラムのソースコードはそのままでは実行不可能なバイトコードにコンパイルされる。ＪＡＶＡインタープリタは、ＪＡＶＡ仮想マシン（ＪＶＭ）として知られ、ＪＶＭが動作するコンピュータを設定、制御するバイトコードをインプリメントする。ＪＶＭは、バイトコードを理解するプロセッサのソフトウェアインプリメントとして動作する。この点から、ＪＶＭはＪＡＶＡチップをエミュレートすると見なすことができる。種々のＪＡＶＡインタープリタ又はＪＶＭは、種々の製造元の種々のコンピュータシステム用に設計され、この結果、ＪＡＶＡプログラムは動作するハードウェアプラットフォームに依存しなくなった。適切なＪＶＭを使用することにより、ＪＡＶＡプログラムはどのハードウェアプラットフォームでも動作するようになる。ＪＡＶＡのプラットフォーム独立性は、ユーザが種々のハードウェアプラットフォームのタイプに基づいてブラウザを動作させるインターネット上で、最も適当に応用することができる。当業者には明らかなように、ＪＡＶＡは仮想マシンを利用したオブジェクト指向言語の一例である。他の例としては、ＳｍａｌｌＴａｌｋ仮想マシン（ＳＶＭ）を利用したＳｍａｌｌＴａｌｋがある。さらに、以下の説明から明らかなように、本発明の実施形態は仮想マシンを伴うインプリメントに制限されることはなく、他のオブジェクト指向言語に適用することもでき、また、非オブジェクト指向言語にも適用することができるであろう。
【００９８】
概論を経由して、以下では、図３を参照して従来技術の問題点について説明する。なお、以下では、クラスバージョンを参照して従来技術の問題点を述べるが、従来技術では「バージョン」という語句は、継承したクラスや新しい又はアップデートされたオブジェクトタイプをインプリメントしたクラスであることを思い出して欲しい。
【００９９】
図３は、複数バージョンのクラスサービスを図式したものである。マーチャントは、自身のサーバ上で仮想マシン（ＶＭ）５２を動作させる。ＶＭは、通常、ソフトウェア形態のインタープリタであるが、チップにインプリメントして、Ｚｕｃｏｔｔｏ Ｓｙｓｔｅｍｓ社が提供するＪＡＶＡ Ｘｐｒｅｓｓｏチップのようにハードウェア形態のＶＭとしてもよい。しかしながら、ＶＭをチップ形態でインプリメントすることは、むしろクライアントシステム、特に、無線装置等のモバイルシステムに適当であろう。マーチャントは、例えば本のメールオーダーカタログをインプリメントする、第１のサービスアプリケーション５４をＶＭ５２上で動作する。カタログのアイテムは「本」クラスとして定義され、このクラスは本のタイトルとドル価格を備える。これらの本オブジェクトは、「本」クラスをインスタンス化し、オブジェクト空間５６に書き込むことにより、形成される。オブジェクト空間５６へのエントリは、オブジェクト空間インタフェイスを介して行われる。インスタンス化されたオブジェクトは、オブジェクト空間に「書き込む」パラメータである。オブジェクト空間はオブジェクトの記憶領域である。オブジェクト空間は、不揮発性記憶媒体上にある場合は永続性があり、揮発性記憶媒体上にある場合には一時的なものである。オブジェクト空間５６内において、オブジェクトは受動形である。すなわち、オブジェクトは、存在こそするが、動作又は利用することができない。使用するためには、オブジェクトは、オブジェクト空間から適切なサービス又はアプリケーションプログラムに読み出し、又は取得されなければならない。オブジェクト空間の概念は、分散コンピューティング又は処理アーキテクチャの設計や管理には特に有用なものであるが、当業者であればオブジェクト空間は単にストレージの一形態であり、本発明の実施形態は他の記憶手段又は概念を利用してもよいことは明らかである。ＪＡＶＡを動作させるシステムは、例えば、ＪＡＶＡ特有のオブジェクト空間の形態であるＪＡＶＡ空間にオブジェクトを記憶してもよい。
【０１００】
第１のクライアントは自身のハードウェアプラットフォーム上でＶＭ５８を動作させる。また、第１のクライアントは、マーチャントのメールオーダーサービス５４と相互作用するように設計された、第１のサービスソフトウェア６０を動作させる。この例では、「本」クラスの現在のバージョン（Ｃ１）のマーチャントソフトウェア５４で書き込まれたオブジェクト空間５６からオブジェクトを読み出すことができる。
【０１０１】
暫くして、マーチャントは、ポンド、ユーロ、円等のドル以外の通貨で本の価格を提供することが必要となる、グローバルサービスを導入することを決意する。この新しいサービスを有効にするために、マーチャントは、新しいＶＭ６２上で動作する新メールオーダーサービスアプリケーション６４を設定する。マーチャントは、新旧のサービスが同じ仮想マシン上で動作し、同じ名前空間を用いた場合に発生する、オリジナルサービス５４との「名前空間」のコリジョンを避けるために、新しいサービス６４を動作させるための新しい仮想マシンをサーバ上に設定する。新しいサービス６４は、新しいバージョン（Ｃ２）のクラスでオブジェクト空間５６にオブジェクトを書き込む。ＶＭ６６を動作させる新しいクライアントは、新しいサービス６８によって新しいクラスＣ２内のオブジェクトをオブジェクト５６から読み出し、新しいクラスバージョンＣ２のオブジェクトをハンドルする設定を行うことができる。
【０１０２】
サービス６０を動作させるクライアントが、新しいサービス６８を利用するクライアントと共に、カタログを続けて使用することができるようにするためには、マーチャントは、マーチャントの物品の全てを表すクラスＣ１，Ｃ２の中のオブジェクトにそれぞれＶＭ５２，６２がアクセスできるように、オリジナルクラスＣ１と新しいクラスＣ２の双方でオブジェクトを作成しなければならない。このように、メールオーダーカタログの中にある本の２倍の記憶容量が必要となる。以上のように、オブジェクト空間５６のために必要となるストレージは、新しいバージョン毎に少なくとも線形且つ、恐らくは幾何学的に２ｎ−１倍の因子で増加する（ｎはクラスのバージョンの数を表す）。また、在庫のバージョン同士の一貫性を維持することが困難となる。
【０１０３】
さらに、マーチャントは、Ｃ２を形成するためにＣ１から継承したクラスを使用することができる。この場合に限れば、一つのＶＭのみが必要となるが、システムは再記述しなければならない。
【０１０４】
マーチャントは、新しいクラスＣ２に従って動作するように、サービスと既存のオブジェクトをアップグレードしなければならず、このことは、システムやサービスの望ましくないダウン時間や、Ｃ１オブジェクトをＣ２オブジェクトに変換する作業を伴う。また、既存のクライアントは、Ｃ２バージョンにアップグレードしなければならない。
【０１０５】
次に、図４を参照して、インターネット環境内で動作するマーチャントサービスの論理構造の形態について説明する。マーチャントサービスは、図４においてまとめて参照番号８０が付与された、一つ又はそれ以上のコンピュータシステム上にある。マーチャントサーバ８０は、フロントエンド８２とバッグエンド８４を備える。フロントエンド８２は、マーチャントサーバへのアクセスのリクエストをハンドルする、また、サーバから要求したクライアントへと情報を供給する等の通常の機能を実行するウェブサーバ８６を備える。ウェブサーバ８６は、クライアント要求に基づいたウェブベースのコンテンツ生成を自動化するＪＡＶＡサブレット等のオブジェクト指向ソフトウェアを使用することにより、自動化することができる。クライアント側プログラム８８は、通常、ＪＡＶＡアプレット又はＪＡＶＡスクリプト（ＪＡＶＡをインプリメントした形態）であり、適当な記憶媒体に記憶され、クライアントの仮想マシンにダウンロードされてマーチャントサービスを動作するように設定することができる。ウェブサーバ８６は、通常、マーチャントサービスにアクセスするためのインタフェイスを提供する。図４に示す例では、クライアント側プログラムは、ＪＡＶＡアプレット又はＪＡＶＡスクリプトであり、クライアントは、Ｎｅｔｓｃａｐｅ ４．０等の適当なブラウザソフトウェア９０内でクライアントコンピュータシステム１１上で動作するＪＡＶＡ仮想マシンを備える。
【０１０６】
ウェブサーバ８６は、マーチャントサービスアプリケーションロジック９２と通信し、バックエンド８４にある。このロジックは、例えばエンタプライズＪＡＶＡビーンズの形態でアプリケーションサーバ内にインプリメントされる。フロントエンド８２とバックエンド８４間の通信は、バックエンド８４とフロントエンド８２との間のメッセージ転送を管理する、ＩＢＭ社から提供されているメッセージキューイングサービスソフトウェア等の適当なソフトウェアにより管理するとよい。
【０１０７】
アプリケーションロジック９２は、マーチャントサービスのためのソフトウェアエンジンを提供する。例えば、電子商取引サービスにおいては、アプリケーションロジック９２は、フロントエンド８２を介して、クライアントが利用可能な商品のカタログを生成し、商品に対する要求を処理し、クレジットカードの詳細等の売上請求先の詳細、請求アドレス、及び配送アドレスを扱うように、バックエンド８４を設定する。また、アプリケーションロジック９２は、記憶及び／又は共有された情報にアクセスしなければならない。このように、バックエンド８４は、通常は不揮発性記憶媒体を利用した、データベース９６を含む。データベース９６は、商品のカタログ、クライアントの請求の詳細、配送先アドレスの詳細、その他の適当なデータ等の、マーチャントアプリケーションに必要なデータを記憶する。アプリケーションロジック９２とデータベース９６間の通信は、データアクセスモジュール９４により制御される。
【０１０８】
データベース９６は、どの適当なデータベース言語により設定されてもよく、例えば、データベースは、ＩｎｆｏｒｍｉｘやＯｒａｃｌｅプログラミングソフトウェアを利用したリレーショナルデータベースであってもよいし、Ｖｅｒｓａｎｔ等のオブジェクト指向データベースであってもよい。アプリケーションロジック９４は、好ましくは、データアクセスモジュール９４を使用して、データアクセスのためにオブジェクト空間を利用する。オブジェクト空間は、ＲＡＭ９９等の一時的な記憶媒体に情報を記憶するように設定してもよいし、ディスクドライブ９６等の永続性のある（不揮発性）媒体に情報を記憶するように設定してもよい。一時的な記憶媒体を利用するオブジェクト空間のインプリメントは一時的空間、永続性のある記憶媒体を利用するオブジェクト空間のインプリメントは永続的空間と呼ぶ。
【０１０９】
一時的オブジェクト空間１０１は、通常、オブジェクトを一時的又は「スクラッチパッド」記憶領域で扱う際に使用される。永続的オブジェクト空間１０５は、通常、長期間記憶する際に使用される。断りがない限り、オブジェクト空間は一般的なオブジェクト空間を意味することとする。
【０１１０】
永続的オブジェクト空間１０５については、不揮発性記憶技術が必要となる。例えば、ディスクドライブ記憶媒体はデータベース９６等のデータベースに使用される。永続的オブジェクト空間１０５と物理的な記憶媒体（例えばディスクドライブ）の間には、マッピング機能を利用して、永続的オブジェクト空間とディスクドライブの間のオブジェクト空間抽象層等のインタフェイスが設けられている。このオブジェクト空間抽象層は、単に、ターゲット記憶媒体に記憶するオブジェクトを設定する。
【０１１１】
本発明の実施形態の例では、マーチャントサービスは電話帳サービスである。よく知られているように、オブジェクトベースのシステムの基本エレメントはクラスであり、このクラスは、実行可能なコードとアプリケーションのクラスを定義するデータを保持する、アプリケーションのソフトウェア要素である。電話帳サービスは、「加入者番号」クラスを定義するアプリケーションコンポーネントを備える。加入者番号は、加入者の身元を示すパブリックキャラクタストリングと、一方及び他方がそれぞれローカル番号及びローカル番号のＳＴＤコードを表す二つの専用の整数番号とにより構成される。永続的オブジェクト空間１０５には前述の属性を持つオブジェクトが移され、加入者と対応する電話番号のディレクトリが形成される。
【０１１２】
暫くして、現在保持しているコードに加え、国際ダイアルコードを記憶、検索するシステムという新しいバージョンのサービス要求に迫られる。これにより、国際ダイアルコードを表す追加の整数を含む、他のアプリケーションコンポーネントソフトウェアにより定義される、加入者番号の新しいクラスが形成される。また、新しい機能が、新しい加入者の番号クラスに付与され、国際ダイアルコードは、要求され、要求した者に提供される。
【０１１３】
従来的には、永続的オブジェクト空間１０５のストレージには、加入者番号と新しい加入者番号の、二つのタイプのオブジェクトが存在することとなる。また、国内コードのみを要求するソフトウェアが動作するシステムのユーザに対する連続性を提供するためには、全ての加入者番号をオブジェクトとして両方のクラス内に保存しなければならない。すなわち、ＳＴＤ番号とローカル番号を含む加入者番号と、国際ダイアルコード、ＳＴＤ及びローカル番号を含む強化した国際サービスを利用する加入者と利用している加入者番号とを保存しなければならない。以上のことから、メモリ容量やサービスとオブジェクトクラスのバージョンをアップグレードする必要性が大幅に増加する。
【０１１４】
以下、オブジェクト指向環境における電話帳サービスについて説明する。電話帳サービスのためのオブジェクト空間エントリは、（オブジェクト空間のエントリである）加入者番号のクラスのインスタンスを作成することにより形成される。情報フィールドは、ｓｅｔＬｏｃａｌＮｕｍｂｅｒやｓｅｔＳＴＤＣｏｄｅ等の、適切なクラスインタフェイス上の種々のメソッドを呼び出すことにより設定される。
【０１１５】
クラス名は、「加入者番号」と定義され、名前等、加入者の英数字の身元を表すキャラクタストリング「＿ＳｕｓｃｒｉｂｅｒＩＤ（加入者ＩＤ）」を備えるオブジェクト空間内にエントリを定義する。「＿ＳｕｂｓｃｒｉｂｅｒＩＤ」フィールドは、電話帳サービスのユーザが検索可能なキーフィールド若しくはインデックスフィールドであるので、公共フィールドに指定される。そして、「＿ＬｏｃａｌＣｏｄｅ（ローカルコード）」と「＿ＳＴＤｃｏｄｅ（ＳＴＤコード）」の二つの整数番号が定義され、前者はローカル電話番号を表し、後者はそのローカル電話番号に関連するＳＴＤコードを示す。これら二つのフィールドは、キー又はインデックスフィールドとして使用されないように、固有に定義される。
【０１１６】
クラスフォーマット内には、さらに、加入者番号クラス内のオブジェクトに適用される操作が定義されている。これらの操作は「ａｃｃｅｓｓｏｒｓ」という。第１の操作は、オブジェクト空間内のエントリからＳＴＤコードを取得する「ｇｅｔＳＴＤ（）」という名の整数操作である。他の操作は「ｇｅｔＬｏｃａｌＮｕｍｂｅｒ（）」という名であり、この操作はオブジェクト空間内の適切なエントリからローカルコードを取得する。また、他の操作は、キャラクタストリング操作であり、「ｇｅｔＳｕｂｓｃｒｉｂｅｒＩＤ（）」という名で、オブジェクト空間から検索された加入者身元に対応する加入者身元を備えるエントリをオブジェクト空間から取得する。さらに、他の操作は、オブジェクト空間内に新しいエントリを作成する処理と関係し、新しいローカル番号及びオブジェクト空間に書き込まれた新しい加入者ＩＤに対応する新しい加入者ＩＤをそれぞれが作成する、「ｓｅｔＬｏｃａｌＮｕｍｂｅｒ（ＩｎｔＮｅｗＮｕｍｂｅｒ）」及び「ｓｅｔＳｕｂｓｃｒｉｂｅｒＩＤ（）」の操作を備える。
【０１１７】
以上の説明からわかるように、利用者番号は、加入者線のローカル及びエリア（ＳＴＤ）コードと共に記憶されている。そして、このクラスのバージョンをバージョン１とする。
【０１１８】
上記クラス記述は、電話帳サービスのアプリケーションロジック９２を作成する際、ソフトウェア開発ツールキット内で見つけることが可能な構築システム等、適当な構築システムを用いてコンパイルされる。構築システムは、クラスパッケージング、ネーミング、及び、オブジェクト空間が理解できる上述の定義通りのロケーションフォーマットを作成する。また、アプリケーションロジック９２は、アプリケーション設計者がクラスと関連する構造を作成するための、構築システム（構築ツール）サービスを含む。構築ツールシステムは、クラスパッケージング、ネーミング、及び各電話帳サービス９３が理解できるロケーションフォーマット内にクラスを設定する。なお、構築ツールシステムは、必要に応じて適宜、新しい電話帳サービスのバージョンをアプリケーションロジック９２に追加する際に利用することができることに留意すべきである。構築ツールは、種々のバージョンのクラスや適当なネーミング及びロケーションスキームを用いるクラスのセットを、ネーミング及び／又はロケートするように設定可能である。本発明の好ましい実施形態では、ＪＡＶＡ環境で動作している際、クラスは、ウェブサーバによりアクセスされる記憶媒体内にあるＪＡＶＡアーカイブ（「Ｊａｒｆｉｌｅ」）に存在する。記憶媒体は、ウェブサーバ８６によりアクセス可能であり、電話帳サービスのハードウェアプラットフォームの一部を形成することが望ましい。ウェブサーバ８６によりアクセス可能な記憶媒体内にある「Ｊａｒｆｉｌｅ」については、記憶位置は、電話帳サービスサイト上のクラス位置を同定するために、適当なＵＲＬ（Ｕｎｉｑｕｅ Ｒｅｓｏｕｒｃｅ Ｌｏｃａｔｏｒ）により定義される。例えば、ｉｎｔａｍｉｓｓｉｏｎ．ｃｏｍのウェブサイト上にあるバージョン２のクラス位置を同定する場合、適当なＵＲＬは「ｗｗｗ．ｉｎｔａｍｉｓｓｉｏｎ．ｃｏｍ／ｃｌａｓｓｅｓ／ｓｙｓｔｅｍＢ２．ＪＡＲ」となる。なお、「Ｊａｒｆｉｌｅ」は、電話帳サイトから離れた所に位置し、インターネット上のどの位置にあるウェブサーバからもアクセス可能としてもよい。他のロケーションやアクセスフォーマットを利用してもよいが、ＵＲＬの元にクラスを配置することにより、クラスは、ウェブサーバ経由でインターネットを介して利用可能となると共に、インターネットにアクセスする適当な通信システムによって利用される。当業者であれば明らかなように、プライベート又はローカルエリアネットワーク等のインターネット以外のネットワークをＪａｒｆｉｌｅの配置のために利用してもよい。
【０１１９】
コマンドラインドリブン、メイクファイルドリブン、及びグラフィックスユーザインタフェイスドリブン等、どのようなタイプの構築ツールシステムをクラスの生成、ネーミング、ロケート、及びパッケージングに利用してもよい。
【０１２０】
よく知られているように、エントリは、クラスのエントリインタフェイスをインプリメントするクラスオブジェクトをインスタンス化した後、関係するオブジェクト空間に「書込み」処理を行い、オブジェクトをエントリパラメータとして提供することにより、作成される。エントリインタフェイスは、アプリケーションロジック９２内で動作する各電話帳サービス９３の一部となっている。
【０１２１】
この例の場合、電話帳サービス９３（１）は、始めに、（オブジェクト空間のエントリである）加入者番号のインスタンスを作成する。インスタンス化されたエントリ（又はオブジェクト）の情報フィールドは、ｓｅｔＬｏｃａｌＮｕｍｂｅｒやｓｅｔＳＴＤコード等、クラスインタフェイス上の種々のメソッドを呼び出すことによりセットされる。
【０１２２】
エントリインタフェイスは、当業者であればエントリインタフェイスのインプリメントの一般的な例であることがわかる、以下の擬似コードにより記述されるフォーマットと構造を備える。
2004506968.tif 000003
上述の擬似コードをライン番号毎に参照すると、ライン１は、オブジェクト空間のエントリである、加入者番号クラスを定義する。ライン５は、公共フィールドであるとして、キーフィールドとしてのキャラクタストリング「＿ｓｕｂｓｃｒｉｂｅｒＩＤ（加入者ＩＤ）」を定義する。ローカルコードは、専用フィールドとしてライン８に定義され、加入者番号クラスを外から閲覧することができないので、キーフィールドとして使用することができない。ＳＴＤコードについて同様の定義がライン９においてなされている。
【０１２３】
ライン１１，１２は、ＳＴＤコードが取得、設定可能であることをクラスオブジェクトのユーザに通知するアクセッサ（ａｃｃｅｓｓｏｒｓ）を定義する。同様に、ライン１３，１４は、ローカルコードが取得、設定可能であることをオブジェクトのユーザに通知するアクセッサを定義する。「／／」により始まるラインは、通常は擬似コードの理解を助けるために挿入される、コメントフィールドである。
【０１２４】
次に、適当な情報をセットし、展開可能な（ｅｖｏｌｖａｂｌｅ）オブジェクト空間１０３内に書き込んだ状態で、加入者番号タイプのエントリを作成する。実施形態の電話帳サービス９３（１）は、以下の擬似コードを備える。
１． ／／ｃｒｅａｔｅ ａ ｎｅｗ ＳｕｂｓｃｒｉｂｅｒＮｕｍｂｅｒ
２． ＳｕｂｓｃｒｉｂｅｒＮｕｍｕｂｅｒ ｓｕｂｓ ＝ ｎｅｗ ＳｕｂｓｃｒｉｂｅｒＮｕｍｂｅｒ（）；
３． ／／ｓｅｔ ｔｈｅ ｎｅｗ ｓｕｂｓｃｒｉｂｅｒ ｉｎｆｏｒｍａｔｉｏｎ
４． ｓｕｂｓ．ｓｅｔＳｕｂｓｃｒｉｂｅｒＩＤ（Ｊｉｍ）；
５． ｓｕｂｓ．ｓｅｔＬｏｃａｌＣｏｄｅ（１２３４５６）；
６． ｓｕｂｓ．ｓｅｔＳＴＤＣｏｄｅ（０１７８９）；
７． ／／ｗｒｉｔｅ ｔｈｅ ｅｎｔｒｙ ｉｎｔｏ ｔｈｅ ｓｐａｃｅ
８． ｏｂｊｅｃｔＳｐａｃｅ１０３．ｗｒｉｔｅ（ｓｕｂｓ，ｎｕｌｌ，ｎｕｌｌ）；
上記擬似コードのライン２は、新しいエントリを「ｓｕｂｓ」として、加入者番号クラスの新しいエントリ（オブジェクト）を作成する。ライン４，５，６は、エントリインタフェイス擬似コードを参照して記述された、設定されたメソッドを用いて、「ｓｕｂｓ」エントリ（オブジェクト）内の情報を設定する。ライン８は、電話帳サービス９３（１）が利用可能なオブジェクト空間１０３のリファレンスを用いて、「ｓｕｂｓ」エントリを展開可能なオブジェクト空間１０３に書き込む。ライン８の書込みメソッドは、ヌル値である二つのパラメータをさらに備える。これらのパラメータは、本発明の実施形態の動作を記述するためには不要なオブジェクト指向空間システムの特徴と関係する。従って、以上の例では、これらのパラメータはヌル値とする。
【０１２５】
暫くして、国際電話を希望するシステムのユーザから新しい要求が出される。この要求に応えるサービスを提供するためには、国際ダイアルコードを加入者番号クラスに加えなければならない。
【０１２６】
本発明の実施形態によれば、電話帳サービスのプロバイダは、構築ツールシステムを用いて、同じ名前（加入者番号）を有するが、フォーマットと構造が以下のように異なる、加入者番号クラスの新しいバージョンを作成する。
2004506968.tif 000004
上述の擬似コードから、ライン９に国際コードのフィールドが追加され、クラス内のフィールド数が増加していることがわかる。また、新しい操作として、ライン１９に、加入者番号クラスにも含まれるｇｅｔＣｏｍｐｌｅｔｅＮｕｍｂｅｒが追加されている。上述のクラスのバージョンはバージョン２とする。
【０１２７】
新しいサービスによって、以下の擬似コードにより記述される、新しい国際電話番号エントリが作成される。
2004506968.tif 000005
電話帳サービスのプロバイダは、加入者番号を国際コードと共に提供する、アップデートされたバージョンのサービスを記述し、バージョン２のクラスフォーマットを利用する。バージョン２のクラスは、パッケージされ、この実施形態では、電話帳サービスプロバイダのウェブサイトの一部であり、適当なＵＲＬが与えられた、適当な記憶位置に配置される。
【０１２８】
図５は、本発明の実施形態となる論理サーバ構造を模式的に示した図である。アプリケーションロジック９２は、複数の電話帳サービス９３（１）、９３（２）、…９３（ｎ）を含み、各サービスは、参照番号９３でまとめて種々のクラスバージョンを表す。例えば、電話帳サービス９３（１）は上述の第１のバージョンの加入者番号クラスに対応し、電話帳サービス９３（２）は、上述のように国際コードを含む第２のバージョンの加入者番号クラスを参照する。各電話帳サービス９３は、この実施形態では、アプリケーションロジック９２と別体として図示され、データアクセスモジュール９４内にある、後ほど詳しく説明するイボルバー（Ｅｖｏｌｖｅｒ）モジュール１００と通信することができる。しかしながら、イボルバー１００は、アプリケーションロジック９２の一部であってもよいし、アプリケーションロジック９２とデータアクセスモジュール９４との間で分かれてもよい。特定の構成は、本発明の実施形態をインプリメントする際に当業者が用いる、ハードウェア及びソフトウェアアーキテクチャに依存する。電話帳サービス９３及びイボルバー１００は一時的オブジェクト空間１０１を構成する。
【０１２９】
イボルバー１００は、それ自身がデータベース９６と通信することができる、後ほど詳しく説明するワーナー１０２と通信することができる。ワーナー１０２は、データベース９６を構成する不揮発性ストレージ９７を利用して、イボルバー１００に対して論理記憶構造を提供する。電話帳サービス９３，イボルバー１００、及びワーナー１０２（不揮発性ストレージ９７を含む）は、永続的オブジェクト空間１０５を構成する。
【０１３０】
イボルバー１００は、各電話帳サービス９３（１）−９３（ｎ）に対応する、複数のクラスバージョンのコンテキスト／名前空間、及び対応するクラスローダー（バージョン化クラスローダーと呼ぶ）１０９（１）−１０９（ｎ）を備える。クラスバージョンコンテキストは、対応するクラスの実行環境を定義する。
【０１３１】
また、イボルバー１００とワーナー１０２は、展開可能なオブジェクト空間１０３を構成する。展開可能なオブジェクト空間１０３は、後述するイボルバー１００とワーナー１０２の動作の説明によって明らかとなるであろう。
【０１３２】
以上述べたように、本発明の実施形態はＪＡＶＡ仮想マシン上のＪＡＶＡ内にインプリメントされる。しかしながら、従来までのシステムでは、サーバ上で動作する仮想マシン上に既にロードされたクラスは、既にクラスがサーバ上に分解されているので、再度ロードすることができない。このことは、オブジェクト指向言語、特にＪＡＶＡの制約であり、クラスの記憶位置等の位置が変化したり、位置の名前が変化したりした場合にも同様である。
【０１３３】
しかしながら、本発明の一態様となる実施形態は、電話帳サービス９３（１）…９３（ｎ）の種々のバージョンに対して動作するようにマーチャントサーバの仮想マシンを設定する。上述したように、電話帳サービスの各バージョンは、加入者名オブジェクトに「加入者番号」という同じ名前を用いるが、各バージョンの加入者番号オブジェクトのフィールドとメソッドはそれぞれ異なる。このことは、ＪＡＶＡ等のオブジェクト指向言語のルールと直接コンフリクトを生じる。
【０１３４】
図６は、電話帳サービスの種々のバージョンに対応する、種々のバージョンの加入者番号クラス上で動作するように設定されたマーチャントサーバの仮想マシンを模式的に示す。各電話帳サービスバージョン及び対応する加入者番号クラスは、サーバの初期化時にインスタンス化、又は、マーチャントにより提供される電話サービスのタイプが増加する度毎に追加される。イボルバー１００は、仮想マシン上にインプリメントされる。
【０１３５】
図示した例では、五つの電話帳サービスがインスタンス化され、この内、９３（１）、９３（３）はバージョン１、９３（２）、９３（４）はバージョン２、９３（５）はバージョン３である。各電話帳サービスは、加入者番号等、加入者番号クラスには同じ名前を使用する。マーチャントのクライアントは、設定されている電話帳サービスのバージョンで通信する。インターネット又はＷＷＷ環境では、クライアントが接続するＵＲＬによって特定の電話帳サービスのバージョンが同定される。クライアントは、電話帳サービスの特定の一つ、又は、クライアントと同じ電話帳サービスのバージョンを動作するサービスの任意の一つに接続すればよい。
【０１３６】
各電話帳サービス９３は、９３（１）と１７０（１）、９３（２）と１７０（２）、９３（３）と１７０（３）、９３（４）と１７０（４）、９３（５）と１７０（５）等、一つのサービス接続エントリポイント１７０とのみ通信できるように設定されている。各サービス接続エントリポイント１７０は、電話帳サービス１，２，３にそれぞれ対応する加入者番号のバージョンの１０９（１）、１０９（２）、１０９（３）とラベルされたバージョンクラスコンテキストオブジェクトの一つとのみ通信することができる。図６からわかるように、バージョンクラスコンテキストオブジェクト１０９は、同じクラスバージョンの電話帳サービスについて、一つ以上のサービス接続エントリポイント１７０と通信することができる。さらに、仲介サービス接続エントリポイントが図示されていない図５から明らかなように、各電話帳サービス９３は自身のバージョンクラスコンテキストオブジェクト１０９を備える。サービス接続エントリポイント１７０とバージョンクラスコンテキストオブジェクト１０９は図５に示す一時的オブジェクト空間１０１に存在する。
【０１３７】
本発明の実施形態によれば、バージョンクラスコンテキスト１０９は、マーチャントサーバ上で動作し、図５，６に図示されたイボルバーモジュール１００をインプリメントする、仮想マシンのバージョンクラスコンテキストクラスのインスタンスである。当業者には明らかなように、ＪＡＶＡ仮想マシン等の仮想マシンは、ＪＡＶＡ仮想マシン内で動作した際にＪＡＶＡアプリケーションが必要とする全てのクラスをデフォルトでロードする、いわゆる原始（又は汎用）クラスローダーを含む。本発明の実施形態では、特別なクラスロード挙動と、特にバージョンクラスコンテキストクラスをインプリメント，ロードするための、アプリケーション又はサービスのためにロードされたクラスの特定のサイト又はサブサイトのロード時間の挙動とを提供するように設定されている。
【０１３８】
各バージョンクラスコンテキストオブジェクト１０９は、アプリケーション又はサービスの設計者により定義されるバージョンクラスコンテキストクラスのインスタンスであり、サーバ仮想マシン内で動作する。バージョンクラスコンテキストクラスは、加入者番号バージョン識別子のフィールドと、識別子に対応するバージョンの加入者番号クラスをロードするバージョン化クラスローダー１７２を含む。バージョン化クラスローダー１７２は、全ての必要なメソッドとエントリをロードし、クラスバージョンのバージョンクラスコンテキスト加入者番号オブジェクトをインスタンス化する。
【０１３９】
各バージョン化クラスローダー１７２（１）、１７２（２）、１７２（３）は、ロードされたクラスのレコードを保持する。好ましい実施の形態では、各バージョン化クラスローダー１７２は、一つのクラスのみをロードする、いわゆる関連加入者番号クラスバージョンである。
【０１４０】
バージョン化クラスローダーがクラスをバージョンクラスコンテキストにロードし、分解すると、同じ名前を有する他のクラスはバージョンクラスコンテキストオブジェクト内にロードできなくなる。これは、オブジェクト指向言語のルールに違反する名前空間コリジョンが生じるためである。バージョン化クラスローダーによりロードされた加入者番号クラスバージョンは、バージョンクラスコンテキストクラスであり、そのメソッドと共に、関連クラスの加入者番号オブジェクトについて自身を含む実行環境を作成する。加入者番号クラスは、バージョンクラスコンテキストオブジェクトのクラスであるので、他のバージョンクラスコンテキストオブジェクトから完全に離される、又は、隠される。このようにして、名前空間のコリジョンを生じさせることなく、他のバージョンクラスコンテキストオブジェクト内のクラスと同じ名前のクラスを使用することができる。
【０１４１】
各電話帳サービスバージョン９３については、１０９（１）、１０９（２）、１０９（３）とラベルされた、個別のバージョンクラスコンテキストオブジェクトをインスタンス化することができ、対応する加入者番号クラスバージョンがロードされる。このような方法によれば、各バージョンクラスコンテキストは互いに分けられているので、種々のバージョンのクラスに対して、名前空間のコリジョンを生じさせることなく、加入者番号という同じ名前を同じ仮想マシン内で使用することができる。
【０１４２】
同じ仮想マシン内で同じクラス名を有する、種々のクラスバージョンの共存は、加入者番号オブジェクトがバージョン化クラスローダー内にのみ存在することができるからである。バージョンクラスコンテキスト外に加入者番号タイプのオブジェクトを作成することは、原始又は汎用クラスローダーに関連するクラスをＪＶＭ内にロードさせ、特定バージョンのクラスに名前空間を固定する。これにより、バージョンクラスコンテキスト及びより具体的にはそのバージョン化クラスローダーにより提供される名前空間区分を使用することなく、同じクラスの他のバージョンがロードされることを効果的に防止し、それ以上クラスのバージョンはロードされなくなる。
【０１４３】
本発明の実施形態では、電話帳サービス９３は、バイトストリームを利用してサービス接続エントリポイント１７０と通信する。各サービス９３は、オブジェクトのバイトストリームを形成するメソッド、この場合には加入者番号を呼び出すことができる。このような方法はＪＡＶＡで知られており、オブジェクト出力ストリームと呼ばれている。この方法では、オブジェクトを取得し、クラスバイトコードのフィールドと、加入者番号クラスのバージョン１における加入者名、ローカルコード、ＳＴＤコード等のオブジェクトのデータエントリに対応するフィールドとを備えるバイトストリームを形成する。本発明の実施形態では、基本的なオブジェクト出力ストリームは、シリアルバージョンｕｉｄ（ｕｉｄ：固有識別子）として知られるクラスバージョン識別子のフィールドも含む。変形されたオブジェクト出力ストリームは、バイトストリーム内に表現されているオブジェクトのバージョンを示す情報を含むので、バージョン化オブジェクト出力ストリームとして知られている。
【０１４４】
本発明の好ましい実施形態では、シリアルバージョンｕｉｄは、クラスバージョンバイトコードのハッシュを作成することにより生成される。このような方法によれば、クラスバイトコード内の小さな変化もハッシュ結果に大きな変化を与えるので、クラスバージョンに対して固有の身元又は署名を与えることができる。なお、ハッシングアルゴリズムは、バージョン化オブジェクト出力ストリームのメソッド、若しくは、親クラスのメソッドの一つであることが望ましい。
【０１４５】
図示したサービス９３（１）を例にとると、加入者番号は、バージョン化オブジェクト出力ストリームを呼び出すことによりシリアル化され、例えばインターネットベースの環境ではＵＲＬにより同定されるサービス接続エントリポイント１７０（１）に送られる。なお、電話帳サービスは一つのサービス接続エントリポイントとのみ通信するように設定することが望ましいが、サービス９３（１）が、例えば図６に示す１７０（３）等、加入者番号のバージョン１のバージョンクラスコンテキストオブジェクト１０９（１）と通信するどのサービス接続ポイントととも通信できるように設定してもよい。
【０１４６】
サービス接続エントリポイント１７０（１）は、通信されたバイトストリーム内に表記されているオブジェクトのタイプとバージョンをチェックし、オブジェクトが例えば加入者番号のバージョン１等のポイントに合ったものであるか否かをチェックする。この例では、チェックが正しく、サービス接続エントリポイント１７０（１）は、対応するバージョンクラスコンテキストがインスタンス化されたか否かをチェックする。なお、このチェックは、仮想マシンのクラスローダーが保持するロードされたクラスのレコードの内容を検査することにより行うことが望ましい。バージョンクラスコンテキスト１０９（１）が存在する場合、サービス接続エントリポイント１７０（１）は、バージョンクラスコンテキスト１０９（１）にバイトストリームを送信する。一方、存在しない場合には、サービス接続エントリポイント１７０（１）は、仮想マシンクラスローダーにバージョンクラスコンテキストのバージョン１をロードさせ、バージョンクラスコンテキストのバージョン１にバイトストリームを送信する。
【０１４７】
仮想マシンは、クラスローダー又は原始クラスローダーのどちらかによりロードされたクラスの一つである、バイトストリームクラスもサポートする。加入者番号オブジェクトは仮想マシン内でバイトストリーム形式で表されているので、バージョンクラスコンテキストの外側では、名前空間コリジョンが発生ることなく、加入者番号の種々のバージョンが上記形式で仮想マシン内に共存することができる。このように、加入者番号オブジェクトの種々のバージョンは、同じ仮想マシン内で通信し、一般的なフォーマットで記憶されることができる。オブジェクトをバイトストリーム形式で表現することは、クラスバージョン中立オブジェクト、又は、クラスタイプ独立オブジェクトと呼ぶ。
【０１４８】
各バージョンクラスコンテキストオブジェクト１０９は、バージョン化オブジェクト出力ストリームのメソッドとバージョン化オブジェクト入力ストリームを含む。バージョン化オブジェクト入力ストリームオブジェクトは、ＪＡＶＡにおいて知られ、オブジェクトが再構築されると共に、シリアルバージョンｕｉｄが入力されたバイトストリームから抽出される、オブジェクト入力ストリームオブジェクトと同じもの、若しくはそれを修正したものである。なお、シリアルバージョンｕｉｄは無視してもよく、オブジェクト入力ストリームを呼び出すバージョンクラスコンテキストについてインスタンス化された加入者番号クラスに従ってオブジェクトを再構築することにより、メソッドが通常のオブジェクト入力ストリームとして動作するようにしてもよい。このような方法によれば、バージョンコンテキストオブジェクト１０９（１）は、電話帳サービス９３（１）から送信された加入者番号をインスタンス化することができる。
【０１４９】
電話帳サービスを起動する際、サービスを提供するマーチャントは、サーバコンピュータシステム８０を始動し、クラスバージョン１の電話帳サービス９３（１）が、アプリケーションロジック９２の一部として動作するように、仮想マシン上にロードされる。クラスバージョン及び電話帳サービスは、上述のようにクラスローダーを用いてサーバコンピュータシステム８０上にロードされる。クラスローダーは、既によく知られており、ＪＡＶＡプラットフォーム等の、仮想マシンのランタイム環境の一部を形成する。クラスローダーは、ランタイム時に電話帳サービスから指示されるのに応じて、クラスとその機能を定義するソフトウェアをロードする。電話帳サービスと他のクラスは、ローカルの記憶装置、ネットワーク上の位置、若しくは、これらの組み合わせの位置にあるクラスライブラリからロードされる。
【０１５０】
クラスバージョン及び電話帳サービスが一旦ロードされると、マーチャントは、引き続きサービスを利用して、各加入者番号オブジェクトに対応する複数のエントリを上述のようにオブジェクト空間１０１内に書き込むことにより、多数の加入者番号オブジェクトをインスタンス化する。クラスバージョン中立形式にある、加入者番号オブジェクトは、ワーナー１０２内のイボルバー１００を経由して記憶される。なお、クライアントは、イボルバー１００を経由してワーナー１０２を配置してもよい。
【０１５１】
上述のように、種々のバージョンの電話帳サービス９３（１）−９３（ｎ）からの加入者番号オブジェクトは、バイトストリーム形式でイボルバー１００内の適切なサービス接続エントリポイントに転送される。本発明の好ましい実施形態では、バックエンド８４は、ＪＡＶＡコンピューティング言語を利用し、イボルバー１００とワーナー１０２にＪＡＶＡランタイム環境を提供する。ＪＡＶＡは、オブジェクトの状態を生のビットデータに変換したり、ビットデータをフォーマットされたオブジェクトに戻したりする等の特別な機能を提供する。この機能は、「シリアル化」と呼ばれ、ＪＡＶＡは、オブジェクトの状態を生のビットデータに変換する処理及びビットデータをフォーマットされたオブジェクトに変換する処理をそれぞれが実行する、オブジェクト入力ストリーム及びオブジェクト出力ストリームを利用してオブジェクトのシリアル化を行う。ＪＡＶＡオブジェクトは、ＪＡＶＡプログラミング言語内にある「シリアル化可能」なインタフェイスをインプリメントすることにより、バイトストリーム間の変換が可能であることを宣言できる。シリアル化可能なインタフェイスは、ＪＡＶＡ仮想マシン（コンパイラ及びランタイム実行環境）にとっては単なる「メッセージ」である、いわゆるマーカーインタフェイスであり、オブジェクトを生のデータストリームとフォーマットされたオブジェクト間で変換することができる。好ましい実施形態では、加入者番号１０４は、生のデータストリームとフォーマットされたオブジェクト間の変換が可能であることを示す、このようなマーカーインタフェイスを含む。
【０１５２】
上述のように、本発明の実施形態によれば、オブジェクト入力ストリーム及びオブジェクト出力ストリームは、クラスバージョンに対応し、それぞれバージョン化オブジェクト入力ストリーム及びバージョン化オブジェクト出力ストリームと呼ばれる。ＪＡＶＡランタイム環境では、オブジェクト入力ストリーム及びオブジェクト出力ストリームは、クラスバージョンに対応するように修正又は拡張するとよい。また、バージョン化オブジェクト入力ストリーム及びバージョン化オブジェクト出力ストリームの新しいメソッドを、ＪＡＶＡ若しくは当業者により選択される適当なその他のオブジェクト指向プログラミング言語で作成してもよい。
【０１５３】
また、ユーザは、新しい加入者番号を作成してもよい。また、ユーザは、特定の加入者番号バージョンの加入者番号オブジェクトを作成し、作成したオブジェクトを電話帳サービス９３（１）に送って展開可能なオブジェクト空間１０３に配置するように、上述のようにコードを作成してもよい。
【０１５４】
次に、図７を参照して、本発明の実施形態がインプリメントされたマーチャント仮想マシンの処理フローについて説明する。ステップ２００では、加入者番号オブジェクト１０４を表すバイトストリームが電話帳サービス９３から関連付けされたサービス接続エントリポイント１７０にエントリオブジェクトとして送信される。サービス接続エントリポイント１７０は、ステップ２０２において、バイトストリームエントリオブジェクトにより表される加入者番号のクラスのバージョンをチェックする。他の実施形態では、シリアルバージョンｕｉｄは、バージョンではなく、クラスタイプの情報を含むことができる。これは、バイトストリーム内に含まれるシリアルバージョンｕｉｄを検査することにより実現され、タイプをチェックすることは、サービス接続エントリポイントが通信するバージョンクラスコンテキストをチェックすることに対応する。次に、ステップ２０４では、サービス接続エントリポイント１７０が、バージョン、付加的にはタイプに対応するバージョンクラスコンテキストがイボルバー１００内でインスタンス化されているか否かをチェックする。
【０１５５】
ステップ２０４のチェックの結果が「いいえ」である場合には、処理フローはステップ２０６に進み、イボルバー１００は、要求されたバージョンコンテキストオブジェクトをインスタンス化し、ステップ２０８において、関連付けされた加入者番号クラスバージョンが、バージョン化クラスローダーによって、バージョンコンテキストオブジェクト内にロードされる。
【０１５６】
次に、処理は、ステップ２０４の処理の結果が「はい」である場合の次の処理である、ステップ２１０に進む。ステップ２１０では、加入者オブジェクト１０４を表すバイトストリームが、対応するバージョンクラスコンテキストに転送され、バージョン化オブジェクト入力ストリームを利用して加入者番号オブジェクト１０４に再変換される。これにより、加入者番号オブジェクト１０４は、イボルバー１００をインプリメントする仮想マシン内に存在することとなるが、バージョンクラスコンテキストオブジェクトによって、イボルバー仮想マシン内に存在する、種々のバージョンの加入者番号とは離されている。
【０１５７】
ステップ２１２では、加入者番号オブジェクト１０４が、クラス中立形式に変換され、「ボックス」内に封入される。ステップ２１４では、ボックスの内容を示す「ラベル」がボックスに付与され、ステップ２１６では、データベース９６内に記憶するために、ボックスがワーナー１０２に送られる。
【０１５８】
図８は、展開可能なオブジェクト空間１０３、及びイボルバー１００とワーナー１０２の機能を模式的に示した図である。次に、図８を参照して、イボルバー１００とワーナー１０２内の処理フローについて詳しく説明する。
【０１５９】
加入者番号オブジェクト１０４は、クラス構造化されてない、「生」のクラス独立フォーマットのバイトストリームにより表現されている、「デクラッシング（ｄｅ−ｃｌａｓｓｉｎｇ）」モジュール１０６を入力する。すなわち、オブジェクトは、ビット又はバイトの連続的なパターン又はストリームにより表現されている。モジュール１０６は、クラス名、クラスバイトコード、バージョンＩＤ、加入者番号クラスの位置の表記を含むデータブロックを作成する。また、オブジェクト状態は、「生」の形式で表現されている。一般的に、オブジェクト状態を「生」で表現することはフィールド毎に実行される。
【０１６０】
モジュール１０６は、加入者番号オブジェクト１０４を取得し、オブジェクトを表す生のデータのバイトアレイを出力するように、上述のようにバージョン化オブジェクト出力ストームをインプリメントする。このバイトアレイは、その後、パッケージングモジュール１０８に転送され、ボックス１１０のコンテンツを形成する。ボックス１１０は、ランタイムクラス「ボックス」のオブジェクトであり、好ましい実施形態では、クラス名、スーパークラス構造、及びボックスのコンテンツ内でバイトアレイ形式で表現されたオブジェクトのための少なくとも一つのキーフィールドを含む、パッケージングモジュール１０８により付与された、「ラベル」フィールドを備える。好ましい実施形態では、バージョン化オブジェクト出力ストリームは、バイトストリーム内にバージョンＩＤを含む。なお、ラベルの中にバージョンＩＤを含めるようにしてもよい。ラベルは、加入者番号をイボルバー１００に送る電話帳サービス９３に対応するバージョンコンテキストオブジェクトから情報を取得する、バージョン化オブジェクト出力ストリームによって「書き込まれる」。すなわち、バージョン化オブジェクト出力ストリームは、特定のバージョンクラスコンテキストオブジェクトに割り当てられているので、バージョンやクラス名と共に、加入者番号オブジェクト１０４からの加入者識別情報について認識している。また、ボックス１１０は、オブジェクト状態に対応する生のデータを備えるフィールドを含む。当業者であれば、他の適当な方法によりボックスをフォーマットできることは理解できるであろう。
【０１６１】
ボックス１１０に加入者番号１０４を封入することにより、加入者番号１０４を表すが、加入者番号オブジェクトの構造には制約を受けないオブジェクトが生成される。この点において、ボックス１１０は、加入者番号タイプやクラスのバージョンに対して独立又は中立であり、イボルバー１００は、オブジェクト指向実行環境に対して独立又は中立の加入者番号タイプ及び／又はクラスバージョンを提供すると言える。また、加入者番号のタイプ及び／又はクラスバージョンに対して独立な、展開可能なオブジェクト空間１０３にボックス１１０を書き込むことができる。
【０１６２】
その後、ボックス１１０は、好ましくはクラス名に従って、ワーナー１０２内に記憶される。比喩的に言えば、好ましい実施形態では、ワーナー１０２は、それぞれがクラスに対応する、ボックスの一連の棚１１２，１１４，１１６として表現することができる。例えば、クラス名は「加入者名」であり、例えば親クラス「アドレス」等のスーパークラス構造を有する。キーフィールドは「加入者ＩＤ」である。そのようなボックスの例は、棚１１２に示されている。
【０１６３】
棚１１４は、ワーナー１０２に記憶される他のクラスと関連するボックスを示す。この例では、ボックスは、加入者のＺｉｐコードを表すクラスタイプ「加入者ＺＩＰ」のオブジェクトと関係している。「加入者ＺＩＰ」は「アドレス」クラスの子供と考えることができるので、このボックスは、「アドレス」と同じスーパークラス構造を有する。キーフィールドはまた「加入者ＩＤ」である。棚１１６は、ワーナー１０２に記憶された一般的なラベルを示す。種々のオブジェクトタイプを含むボックスのストレージは、ワーナー１０２と展開可能なオブジェクト空間１０３のオブジェクト独立環境を明らかに示す。
【０１６４】
また、ワーナー１０２は、「棚」により組織される必要はなく、ツリー構造であってもよい。また、ワーナー１０２は、タイプで組織される必要はなく、単なるボックスのリストであってもよい。前述の棚構造は、タイプで参照することを支援するために、一般的なストレージの形式を最適化したものであり、本発明の実施形態は棚構造に限られないことは当業者であれば理解できるであろう。
【０１６５】
このように、加入者番号オブジェクト１０４は、クラス構造を欠いた状態で、クラス独立なフォーマットでボックス１１０のコンテンツとして修正、記憶することができる。一つ以上のクラスに対応するボックスが記憶される環境では、ボックスのラベルは、クラス名、クラスバージョン、及び、ボックスのコンテンツの少なくとも一つのキー又はインデックスフィールドを示す。なお、ラベルにスーパークラス構造の表示をすることは必ずしも必要ないことは明らかであろうが、その指示子を含ませることで、ワーナー１０２内に記憶されたデータをクラスタイプと併せてスーパークラスで検索可能にし、検索性能を強化することができる。
【０１６６】
ワーナー１０２内にクラスが一つだけ記憶されている実施形態では、クラス名指示子は無くてもよい。
【０１６７】
ワーナー１０２の記憶媒体は、オブジェクト指向又はリレーショナルデータベースを用いてインプリメントしてもよい。また、ワーナー１０２は、ボックスをＲＡＭ等の揮発性メモリ内に保持する等して、一時的記憶空間を備えてもよいし、不揮発性メモリにボックスを記憶してデータベースを形成する永続的空間であってもよい。なお、永続的なオブジェクト空間は、サーバ８０が故障した際に永続的空間であるワーナー内に記憶されたデータが失われないように、不揮発性記憶空間を利用したワーナー１０２を備えることが望ましい。
【０１６８】
以上のように、好ましい実施形態では、マーチャントサーバ８０は、それぞれが加入者番号の各クラスバージョンに対応、動作する、複数の電話帳サービスバージョン９３（１）、９３（２）…９３（ｎ）をサポートする。サービスの各バージョンは、同じバージョンのサーバ８０に対する空間インタフェイス（ＡＰＩ）を介して、エントリ上の種々のバージョンを使用する。種々のバージョンのサービスは、クライアントが使用しているサービスのバージョンに適切なＵＲＬにアクセスすることができるように、異なるＵＲＬ上、又は、異なるクラスパス位置にあるｊａｒに適当に配置される。クライアントは、ブラウザ９０内で適当なＵＲＬにアドレッシングすることにより、使用したいサービスのバージョンにアクセスする。なお、クライアントのアプリケーションソフトウェアのバージョンに合ったＵＲＬにアドレスするようにブラウザ９０を自動的に設定するアプリケーションソフトウェアをクライアントに提供してもよい。
【０１６９】
このように、クライアントにより使用されるサービスのバージョンは、自動的、若しくは、適当なＵＲＬ又はクラスパスを入力することにより、クライアントによって定義される。なお、クラスバージョンは要求されたリクエストを暗示するので、クライアントによりリクエストされたサービスはバージョン情報を定義する。
【０１７０】
アプリケーションロジック９２は、複数の電話帳サービスのバージョン９３を通して、マーチャントの電話帳サービスの種々の面を実行、インプリメントすることができ、また、加入者番号の作成、記憶を含む、複数のクラスバージョンのハンドリングを管理することができる。
【０１７１】
次に、ストレージから加入者番号を検索する際の処理について説明する。加入者番号に対するリクエストに応じて、生のデータをオブジェクトクラスのフォーマットに変換する機能は、ラベル上のクラスバージョン識別子を利用して、ボックス内に記憶されているオブジェクトのオリジナルのオブジェクトフォーマットに関する情報を取得する。すなわち、オブジェクトのクラスバージョンに従って、生のデータを適切にフォーマットする。また、クライアントによってリクエスト内で使用される、サービスのバージョン若しくはクラスのバージョンは、クライアントが使用しているサービスのバージョンに対応するので、イボルバー１００は、要求を行ったブラウザ９０が使用するクラスのバージョンの情報を有する。記載した実施形態では、クライアントは、サービスバージョンに対応するバージョンクラスコンテキストにのみ接続することができる。従って、対応するバージョンクラスコンテキストのバージョン化オブジェクト入力ストリームは、バイトクラス内のフィールドに関する情報やリクエストされたクラスのバージョンを知っているので、ボックス１１０のコンテンツを形成するバイトアレイを検索し、要求を行ったブラウザ９０のサービスバージョンが使用するもの等、バージョンクラスコンテキストのクラスバージョンに対応するクラスバージョンにバイトアレイを変換する。このように、加入者番号オブジェクト１２２は、クラスバージョンの形式や、要求された加入者番号に対応するオブジェクトが作成されたか否かに係わらず、要求を行ったブラウザ９０が利用するクラスバージョンに対応するクラス構造を有するイボルバー１００から出力される。なお、特定のクラスバージョンに対する環境をインプリメントした仮想マシンを動作するブラウザが、マーチャントの仮想マシン等、他のクラスバージョンで動作する別の仮想マシンで作成された加入者番号をリクエストし、リクエストを行った仮想マシンが使用するクラスバージョンと一致するフォーマットで返信された加入者番号を取得するようにしてもよい。
【０１７２】
また、他の実施形態では、クラスバージョン情報は、要求を行ったブラウザ９０からウェブサーバ８６に送られた加入者番号に対するリクエスト内に含まれる。この方法により取得されたクラスバージョン情報は、その後、要求を行ったブラウザ９０が使用するクラスバージョンにオブジェクトを変換する際に使用する。
【０１７３】
ここで、電話帳サービスの動作についてさらに詳しく説明する。
【０１７４】
図９に示すフロー図を参照して、電話帳サービス９３に加入者番号を加える際の処理について説明する。マーチャント又はクライアントは、電話帳サービス９３に新しい電話番号を加えることができる。マーチャントは、通常、電話帳サービスの最新のバージョンを要求又は使用する。クライアントは、設定されたサービスを使用し、例えば対応するＵＲＬやクラスパスにアクセスする。
【０１７５】
複数の電話帳サービス９３の全てはアプリケーションロジック９２内で連続的に動作するとよい。また、クライアントにより要求されたサービスのみが動作し、クライアントのリクエストが処理されるのに応じてサービスを停止してもよい。後者の場合、ウェブサーバ８６は、ステップ１３０において、要求された電話帳サービスが使用するクラスのバージョンをアプリケーションロジックがある仮想マシン上にロードする、バージョン化クラスローダーを呼び出す。電話帳サービスに送信された加入者番号オブジェクトは、シリアル形式に変換され、電話帳サービスからイボルバーに入力され、クラスバージョンが識別され、シリアル化されたストリームはイボルバー内の適当なバージョンコンテキストオブジェクトに送られる。前者及び後者の場合共に、サービス接続エントリポイントは、要求した電話帳サービスに対応するバージョンクラスコンテキストクラスの位置としてＵＲＬを使用し、適当なクラスを適当なウェブサーバからイボルバー１００内にロードするようにイボルバー仮想マシンクラスローダーを呼び出す。バージョンクラスコンテキストオブジェクトは、その後、加入者番号クラスをバージョンクラスコンテキストオブジェクト内にロードするようにバージョン化クラスローダーを呼び出し、クラスをインスタンス化する。加入者番号を表すバイトストリームは、バージョンクラスコンテキストのエントリを形成し、ステップ１３２において、バイトストリーム形式の適当なバージョンクラスコンテキストオブジェクトに書き込まれる。加入者番号オブジェクト１０４は、バージョン化オブジェクト入力ストリームに入力することにより、バージョンクラスコンテキスト内にインスタンス化され、これにより、展開可能なオブジェクト空間１０３を形成することができる。ステップ１３４では、オブジェクトをバイナリ形式に変換することにより、バージョン化加入者番号オブジェクト。
【０１７６】
バイナリフォーマットはオブジェクトの状態を表し、バージョン１加入者番号オブジェクトでは、ローカルコードとＳＴＤコードのフィールドを表す。これに対し、バージョン２加入者番号オブジェクトにおいては、国際コードフィールドもバイナリ形式で表されている。
【０１７７】
オブジェクトのバイナリフォーマットは、ステップ１３６において「ボックス化」され、クラス名、スーパークラス構造、及びキーフィールド等を備えるラベルがボックスに付与される。クラス名、バージョンＩＤ、スーパークラス構造、及びキーフィールドは、事前に、又は、ステップ１３４のシリアル化処理の一部として、加入者番号オブジェクト１０４から取得してもよい。その後、ボックス化されたクラスは、ステップ１３８において、記憶のためにワーナー１０２に送られる。
【０１７８】
ワーナー１０２にボックスを送ると、図９に示すフロー図のステップ１３８において、図１０に示すフロー図に従って動作するワーナー内にボックスを記憶する記憶サービスが起動される。ステップ１４０では、ワーナー１０２が、イボルバー１００からボックスを受け取り、ステップ１４２においてボックス上のラベルを読み取る。その後、ボックスは、ステップ１４４において、情報ラベルに応じてワーナー１０２内に記憶される。
【０１７９】
イボルバー１００とワーナー１０２はハンドシェイクプロトコルを備えることが望ましく、これにより、始めに、ボックスが送信されたことをワーナーに通知し、ボックスが受信、記憶されたことをイボルバーに確認させることができる。
【０１８０】
上述の説明によれば、異なるクラスバージョンのオブジェクトを操作、記憶可能な、実行及び記憶環境が作成される。さらに、イボルバーとワーナーは、新しい電話帳サービスが作成される度毎にアップデートする必要がない。必要なことは、利用されるサービスバージョンに対応するイボルバーに適切なクラスをロードすることだけである。さらに、クライアントは、自身のサービスバージョンをアップデートする必要がない。
【０１８１】
アプリケーションロジック９２とイボルバーが動作する仮想マシン上に、電話帳サービスの種々のクラスバージョンを同時にロードすることは、名前空間のコリジョンを避けるために禁止されている。しかしながら、複数の電話帳サービスが一時に動作することが必要若しくは望ましいこともある。通常、これは、アプリケーションロジックが、異なるクラスバージョンの複数のリクエストを同時に処理し、一つの仮想マシンとして動作し、且つ、同じ仮想マシン内で複数のクラスバージョンを扱うように設定され、イボルバーにそのリクエストを送るように、それぞれが電話帳サービスに対応し、常に動作する複数の仮想マシンを用意することにより実現される。
【０１８２】
上述の実施形態では、クライアントは、国内ダイアルと比較した国際ダイアル等のアップデートされた機能を使用することを望まない限り、電話帳サービスのバージョンをアップデートする必要はない。
【０１８３】
これにより、ユーザは二つのカテゴリに分類される。すなわち、第１のカテゴリは、ＳＴＤコードとローカル番号のみが利用可能な電話帳サービスに満足し、オリジナルバージョン１のクラス環境（９３（１））でソフトウェアを動作するユーザである。そして、第２のカテゴリは、バージョン２のクラスソフトウェア（９３（２））が提供された新しいユーザ、又は、加入者番号に国際ダイアルコードを含む電話帳サービスにアクセスするために、オリジナルのソフトウェアをバージョン２のクラスソフトウェア（９３（２））にアップグレードしたユーザである。
【０１８４】
なお、他の実施形態として、電話帳サービスのユーザは、バージョン２等、新しいクラス環境で動作するように、電話帳サービスインタフェイスソフトウェアを全てアップグレードしてもよい。そのような実施形態では、現在又は最新の電話帳サービスがアプリケーションロジック９２内で動作する必要がある。
【０１８５】
次に、図１１を参照して、本発明の好ましい実施形態における、加入者番号に対するユーザのリクエストに対応する動作について説明する。クライアント９０がリクエストをマーチャントサーバ８０に送ると、クライアントが動作させているクラスバージョン内のオブジェクトのテンプレート形式に従って、リクエスト内に加入者の身元情報が含められる。リクエストはまた、クライアントにより使用される電話帳サービス９３のＵＲＬも含む。この例では、クライアントは、バージョン２の電話帳サービスを使用している。
【０１８６】
クライアントからのリクエストに応じて、適切な電話帳サービス９３（２）がアクセスされ、アプリケーションロジック９２内にロードされる。ステップ１４６では、シリアル化テンプレートエントリ形式で且つ、リクエストのバージョンクラスコンテキストに対応する等、バージョン２に対応するクラス構造に関する情報を含む、リクエストされた加入者番号オブジェクトが、電話帳サービス９３（２）経由でイボルバー１００に到達する。シリアル化テンプレートは、サービス接続エントリポイントからイボルバー内の対応するバージョンクラスコンテキストオブジェクトに転送され、バージョン化オブジェクト入力ストリームによってテンプレートオブジェクトに変換された後、バージョン化出力ストリームによってクラスバージョン中立オブジェクトに変換される。次に、ステップ１４８では、テンプレートのクラスバージョン中立オブジェクトが、ワーナー１０２に転送され、クラス（加入者番号）及び加入者の身元情報について検索される。クラス及び加入者ＩＤに一致するボックス１１０がワーナー１０２内で同定されると、ステップ１５０において、ボックス１１０は、イボルバー１００のバージョン２等、始めのリクエストに対応するバージョンクラスコンテキストに戻され、対応するバージョン化オブジェクト入力ストリームに入力される。この例では、ボックス１１０は、バージョン１の加入者番号クラスのオブジェクトのバイナリ表記を備えるイボルバーに戻される。すなわち、オブジェクトを表すボックスは古いサービスバージョンにより作成される。このように、リクエスト（バージョン２）のクラスバージョンコンテキストは、ワーナー１０２から返信されたボックス内において、バイナリ形式で表されたオブジェクトのクラスコンテキストとコンフリクトする。リクエストのコンテキストはクラスバージョン２であり、また、加入者番号をリクエストしたユーザは電話帳サービス９３（２）を用いてバージョン２の実行環境で動作させるので、加入者番号クラスタイプ及びバージョン２の新しいオブジェクトは、ボックス１１０のコンテンツから作成される。新しいオブジェクトの作成は、イボルバー１００のバージョン化オブジェクト入力ストリーム１２０により達成される。
【０１８７】
リクエストのコンテキストは、リクエスト内のテンプレートによってイボルバー１００に知られ、これにより、バージョン化オブジェクト入力ストリームは、リクエストに対してバージョン２の加入者番号タイプの新しいオブジェクトを作成することができる。好ましい実施形態では、各バージョンクラスコンテキストは、全ての異なるクラスバージョン及びその構造のリストを含む。このリストは、新しいクラスバージョンが作成される度毎にアップデートされる。なお、リクエストのコンテキストは、適当なサービス接続エントリポイントを介して特定のバージョンクラスコンテキストオブジェクトに送られるので知ることができる。このように、バージョンクラスコンテキストのバージョン２のバージョン化オブジェクト入力ストリームは、ワーナーから返信されたシリアル化バイトストリームを調査することができ、また、相関データを抽出してバージョン２の加入者番号を形成することができるように、バージョン１のクラスの各エレメントがどこに保持されているのかを知ることができる。
【０１８８】
ステップ１５２では、検索されたボックスが開封され、そのシリアルバージョンＩＤがバージョンコンテキストオブジェクト内に書き込まれる。ラベル上の一部又は全ての情報をバージョンコンテキストオブジェクトに書き込んでもよい。バージョンコンテキストオブジェクトは、検索されたオブジェクトをバイト又はビットストリーム形式で含むフィールドを有する。
【０１８９】
ステップ１５４では、生のバイト又はビットストリーム形式のボックスコンテンツが、バージョン化オブジェクト入力ストリームに供給される。ステップ１５６では、バージョン化オブジェクト入力ストリームが、バージョンコンテキストオブジェクトから導かれる、リクエストのクラスコンテキスト及び記憶されたオブジェクトのクラスバージョンに従って、バイナリバージョンのオブジェクトをクラスバージョンのオブジェクトに変換する。古いバージョンのクラスは、加入者番号に対するリクエスト等、リクエストされたエントリの詳細を書き込み、新しいバージョンのクラス内の新しいフィールドにデフォルト値が入力される。バージョン化オブジェクト入力ストリームは、始めに、バイナリの生データを取得し、生のバイトストリーム内に含まれる値を適当なフィールドに移動することにより、要求されたエントリを配置することを試みる。リクエストがバージョン２であるこの例においては、エントリに新しいフィールドが加えられた場合には、バージョン化オブジェクト入力ストリームはそれらのフィールドにデフォルトの「ヌル」値を挿入する。このように、要求されたエントリは、新しいバージョンであるバージョン２の加入者番号オブジェクトを効果的に形成し、ステップ１５０において、加入者番号をリクエストしたユーザがオブジェクトを利用することを可能にする。要求したコンテキストと検索されたコンテキストが同じである場合には、変換は必要ない。好ましい実施形態では、要求されたエントリは、テンプレートフィールドが配置された際に加入者番号オブジェクトを形成するように、加入者番号テンプレート形式になっている。
【０１９０】
電話帳サービス９３（２）等の新しいクラスは、ｒｅａｄＯｂｊｅｃｔ（）メソッドをインプリメントしてもよい。このメソッドがインプリメントされた場合には、メソッドは実行されているバージョン化オブジェクト入力ストリームにより呼び出される。上述の例では、電話帳サービス９３（２）は、バージョンオブジェクトからの変換を目的として、デフォルト値を国際コードフィールドに交換するためにｒｅａｄＯｂｊｅｃｔ（）メソッドをインプリメントする。このように、バージョン１からバージョン２に変換された加入者番号のコンテンツには、４４のコードが加えられる。ｒｅａｄＯｂｊｅｃｔ（）メソッドが電話帳サービス９２（２）によってインプリメントされていない場合には、国際コードフィールドのデフォルト値はヌル値となる。
【０１９１】
本発明の実施形態は、上述のｒｅａｄＯｂｊｅｃｔ（）メソッドを含むことに限定されない。変換処理の際に特別な挙動が必要である場合には、特定のクラスタイプ及び／又はバージョン固有の特別な挙動をインプリメントするように、要求されたエントリを設定することができる。メソッドは、異なるバージョン間の変換では異なる。メソッドは、自身のバージョンのコンテキスト内のクラスバージョン内における値を置き換えることを可能にする。
【０１９２】
本発明の好ましい実施形態では、クラスバージョン２のフォーマットに変換された新しい加入者番号オブジェクトが、展開可能なオブジェクト空間１０３内のオブジェクトを操作、記憶するための新しいボックスを作成するために使用されている。この方法によれば、オリジナルとして作成、記憶されたオブジェクトのバージョンは、新しいサービスのバージョン、バージョン２に「前進」させられる。このことは、バージョン２の新しい加入者番号オブジェクトにバージョン化オブジェクト出力ストリームを適用し、図６に示すフローチャートのステップ１３４から１３８の処理を実行してワーナー１０２内に記憶するためのバージョン２のオブジェクトを示す新しいボックスを作成することにより達成される。
【０１９３】
なお、検索されたボックスは、ワーナー１０２を変更しない状態で置き換えてもよい。
【０１９４】
上述の本発明の実施形態がインプリメント可能である限り、デジタル信号プロセッサ、マイクロプロセッサ、その他の処理デバイス、データ処理装置、又はコンピュータシステムの少なくと一部を利用して、上述の方法をインプリメントするように、プログラム可能なデバイス、装置、若しくはシステムを設定するコンピュータプログラムも本発明の一態様であることは明らかであろう。コンピュータプログラムは、ソースコードで、処理デバイス、装置、又はシステムにインプリメントするためにコンパイルするものであってもよい。また、例えばオブジェクトコードの形態であってもよい。一般的な意味において、コンピュータは、上述のプログラム可能なデバイス、データ処理措置、及びコンピュータシステムを含むことは、当業者であれば容易に理解できるであろう。
【０１９５】
コンピュータプログラムは、例えばソリッドメモリやディスクやテープといった磁気メモリ等、マシン又は装置が読み取り可能な形式でキャリア媒体上に記憶することが望ましく、処理装置は、プログラムの一部又は全部を動作設定のために用いる。コンピュータプログラムは、電気信号、ラジオ周波数キャリア波、又は光学キャリア波等の通信媒体内にあるリモートソースから供給されてもよい。このようなキャリア媒体も本発明の一態様となる。
【０１９６】
このように、本発明の思想内で種々の変更が可能であることは当業者でとって明らかであろう。例えば、上述の本発明の実施形態は、ＳｍａｌｌＴａｌｋ等のＪＡＶＡ以外のオブジェクト指向プログラミング言語でインプリメントしてもよい。また、本発明の実施形態は、インターネット上の電子商取引環境への利用に限られることはなく、前のクラスバージョンを利用したサービスのメンテナンスを伴う、クラスバージョンのアップグレードが必要な、どのアプリケーションにも適用することができる。また、バージョン化オブジェクト入力ストリームにより呼び出されるｒｅａｄＯｂｊｅｃｔ（）メソッドが記述されているが、このメソッドは、生データを形成する際に特定の挙動をインプリメントするために、バージョン化オブジェクト出力ストリームにより呼び出すようにしてもよい。オブジェクトのバイナリ表記は、ビット又はバイトストリーム形式であってもよい。
【０１９７】
本発明の実施形態は、二つ以上のクラス又はオブジェクトのバージョンと、二つ以上のサービス接続エントリポイントを含むことは明らかである。
【０１９８】
本開示の思想は、請求項に記載の発明と関係するか否か、若しくは、本発明が扱った問題の一部又は全てを軽減するか否かに係わらず、明示的に、若しくは暗示的に、若しくは一般化されて開示されている、どの新規な特徴若しくは特徴の組み合わせも包含する。本出願若しくは本出願から派生する出願の審理において、上記の特徴に係る新しい請求項を作成する可能性があることを、出願人は通知する。特に、添付した請求項を参照して、従属項に係る特徴を独立項に係る特徴に組み合わせてもよいし、単に請求項に表現されている明確な組み合わせとならないように、各独立項に係る特徴を適当に組み合わせてもよい。
【図１】
2004506968.tif 000006
【図２】
2004506968.tif 000007
【図３】
2004506968.tif 000008
【図４】
2004506968.tif 000009
【図５】
2004506968.tif 000010
【図６】
2004506968.tif 000011
【図７】
2004506968.tif 000012
【図８】
2004506968.tif 000013
【図９】
2004506968.tif 000014
【図１０】
2004506968.tif 000015
【図１１】
2004506968.tif 000016
【国際公開パンフレット】
2004506968.tif 000017
2004506968.tif 000018
2004506968.tif 000019
2004506968.tif 000020
2004506968.tif 000021
2004506968.tif 000022
2004506968.tif 000023
2004506968.tif 000024
2004506968.tif 000025
2004506968.tif 000026
2004506968.tif 000027
2004506968.tif 000028
2004506968.tif 000029
2004506968.tif 000030
2004506968.tif 000031
2004506968.tif 000032
2004506968.tif 000033
2004506968.tif 000034
2004506968.tif 000035
2004506968.tif 000036
2004506968.tif 000037
2004506968.tif 000038
2004506968.tif 000039
2004506968.tif 000040
2004506968.tif 000041
2004506968.tif 000042
2004506968.tif 000043
2004506968.tif 000044
2004506968.tif 000045
2004506968.tif 000046
2004506968.tif 000047
2004506968.tif 000048
2004506968.tif 000049
2004506968.tif 000050
2004506968.tif 000051
2004506968.tif 000052
2004506968.tif 000053
2004506968.tif 000054
2004506968.tif 000055
2004506968.tif 000056
2004506968.tif 000057
2004506968.tif 000058
2004506968.tif 000059
2004506968.tif 000060
2004506968.tif 000061
2004506968.tif 000062
2004506968.tif 000063
2004506968.tif 000064
2004506968.tif 000065
2004506968.tif 000066
2004506968.tif 000067
2004506968.tif 000068
2004506968.tif 000069
2004506968.tif 000070
2004506968.tif 000071
2004506968.tif 000072
2004506968.tif 000073
2004506968.tif 000074
2004506968.tif 000075
2004506968.tif 000076
2004506968.tif 000077
2004506968.tif 000078
2004506968.tif 000079
2004506968.tif 000080
2004506968.tif 000081
2004506968.tif 000082
2004506968.tif 000083
2004506968.tif 000084
2004506968.tif 000085
2004506968.tif 000086
2004506968.tif 000087
2004506968.tif 000088
2004506968.tif 000089
2004506968.tif 000090
2004506968.tif 000091
2004506968.tif 000092
2004506968.tif 000093
2004506968.tif 000094
2004506968.tif 000095
2004506968.tif 000096
2004506968.tif 000097
2004506968.tif 000098
【国際公開パンフレット（コレクトバージョン）】
2004506968.tif 000099
2004506968.tif 000100
【国際公開パンフレット（コレクトバージョン）】
2004506968.tif 000101
2004506968.tif 000102
【国際調査報告】
2004506968.tif 000103
2004506968.tif 000104
2004506968.tif 000105
2004506968.tif 000106
2004506968.tif 000107
2004506968.tif 000108