JP2001125787A - プログラム・オブジェクトのシリアライゼーション方法、およびプログラム・オブジェクトのデシリアライゼーション方法 - Google Patents
プログラム・オブジェクトのシリアライゼーション方法、およびプログラム・オブジェクトのデシリアライゼーション方法Info
- Publication number
- JP2001125787A JP2001125787A JP2000302722A JP2000302722A JP2001125787A JP 2001125787 A JP2001125787 A JP 2001125787A JP 2000302722 A JP2000302722 A JP 2000302722A JP 2000302722 A JP2000302722 A JP 2000302722A JP 2001125787 A JP2001125787 A JP 2001125787A
- Authority
- JP
- Japan
- Prior art keywords
- program
- class
- version
- program object
- descriptor
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/465—Distributed object oriented systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99952—Coherency, e.g. same view to multiple users
- Y10S707/99953—Recoverability
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99952—Coherency, e.g. same view to multiple users
- Y10S707/99954—Version management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
(57)【要約】
【課題】プログラム・オブジェクトを表現するシリアル
情報を生成したり (シリアライゼーション) このシリア
ル情報からプログラム・オブジェクトを再生成する (デ
シリアライゼーション) 公知の手法においては、クラス
構造またはプログラム・オブジェクトの定義に対する変
更を行なう際、制限が加えられることがしばしば起き
る。すなわち、クラス構造に対して多くの変更を行う
と、プログラム・オブジェクトの1つのバージョンを表現
するシリアル情報から異なったバージョンのプログラム
・オブジェクトへの回復が不可能になる非互換性が生じ
る。 【解決手段】プログラム・オブジェクトのバージョンに
従ってシリアライゼーションおよびデシリアライゼーシ
ョンのプロセスをアダプティブにすることによりこの困
難を克服する手法を開示する。
情報を生成したり (シリアライゼーション) このシリア
ル情報からプログラム・オブジェクトを再生成する (デ
シリアライゼーション) 公知の手法においては、クラス
構造またはプログラム・オブジェクトの定義に対する変
更を行なう際、制限が加えられることがしばしば起き
る。すなわち、クラス構造に対して多くの変更を行う
と、プログラム・オブジェクトの1つのバージョンを表現
するシリアル情報から異なったバージョンのプログラム
・オブジェクトへの回復が不可能になる非互換性が生じ
る。 【解決手段】プログラム・オブジェクトのバージョンに
従ってシリアライゼーションおよびデシリアライゼーシ
ョンのプロセスをアダプティブにすることによりこの困
難を克服する手法を開示する。
Description
【0001】
【発明の属する技術分野】本発明は、一般にコンピュー
タ・プログラムに関係し、特にオブジェクト指向プログ
ラミングにおけるプログラム・オブジェクトを取り扱う
技術に関するものである。さらに詳しくは、本発明は、
バージョンに適合するプログラム・オブジェクトのシリ
アライゼーション方法、およびプログラム・オブジェク
トのデシリアライゼーション方法に関するものである。
タ・プログラムに関係し、特にオブジェクト指向プログ
ラミングにおけるプログラム・オブジェクトを取り扱う
技術に関するものである。さらに詳しくは、本発明は、
バージョンに適合するプログラム・オブジェクトのシリ
アライゼーション方法、およびプログラム・オブジェク
トのデシリアライゼーション方法に関するものである。
【0002】
【従来の技術】オブジェクト指向プログラミングで作成
されたアプリケーションにおいては、アプリケーション
要素はプログラム・オブジェクトとして知られるプログ
ラミング構造で表現される場合がある。プログラム・オ
ブジェクトは実質的にどのようなアイテムも表現するこ
とができ、それが実在するか実在しないか、実体が有る
か無いかにかかわらない。例えば、給与支払いシステム
では、指定された採用期間中の従業員または従業員の給
与を表現するのにオブジェクトを用いることができる。
航空機の着陸管制システムでは、個々の航空機または特
定の滑走路を表現するのにオブジェクトを用いることが
できる。この同じシステム内で、全空港を表現するプロ
グラム・オブジェクトが管制塔を表現し、且その空港の
滑走路を表現するプログラム・オブジェクトを含んだり
埋め込んだりすることも可能である。
されたアプリケーションにおいては、アプリケーション
要素はプログラム・オブジェクトとして知られるプログ
ラミング構造で表現される場合がある。プログラム・オ
ブジェクトは実質的にどのようなアイテムも表現するこ
とができ、それが実在するか実在しないか、実体が有る
か無いかにかかわらない。例えば、給与支払いシステム
では、指定された採用期間中の従業員または従業員の給
与を表現するのにオブジェクトを用いることができる。
航空機の着陸管制システムでは、個々の航空機または特
定の滑走路を表現するのにオブジェクトを用いることが
できる。この同じシステム内で、全空港を表現するプロ
グラム・オブジェクトが管制塔を表現し、且その空港の
滑走路を表現するプログラム・オブジェクトを含んだり
埋め込んだりすることも可能である。
【0003】プログラム・オブジェクトは、それらを作
成したプログラムの実行寿命の期間を超えて存在しな
い。オブジェクトを表現する情報は通常 RAM のような
揮発性記憶媒体に保存され、またこの情報にアクセスし
使用する機能は通常そのプログラム・オブジェクトを作
成したプログラムが実行されている間だけ存在する。
成したプログラムの実行寿命の期間を超えて存在しな
い。オブジェクトを表現する情報は通常 RAM のような
揮発性記憶媒体に保存され、またこの情報にアクセスし
使用する機能は通常そのプログラム・オブジェクトを作
成したプログラムが実行されている間だけ存在する。
【0004】公知の手法により、実行しているプログラ
ムがプログラム・オブジェクトを表現する情報を、記録
または転送可能で、また違った時刻や場所で実行するプ
ログラムがその情報を読み、そのプログラム・オブジェ
クトを再び作成できるような形態で生成することができ
る。JavaTM プログラミング言語のプログラム・オブジェ
クトに対する適切な手法は、カリフォルニア州パロアル
ト市にあるサンマイクロシステム社が発行した「オブジ
ェクト・シリアライゼーション仕様書」で開示されてい
る。この仕様書はインターネットのhttp://java.sun.co
m/products/jdk/1.1/docs/guide/serialization/spec/
というURLの"jdk-specification directory"から得るこ
とができる。この仕様書を参照文献としてここに含むこ
とにする。このjdk-specification directoryの下でこ
の仕様の目次は "serialTOC.doc.html" に示されてお
り、システム・アーキテクチャについての説明は "seria
l-arch.doc.html" に与えられている。より詳しい情報
はウェブ・パブリシング社 ( Web Publishing Inc) 発行
のJavaWorld の記事に与えられている。これらの記事は
インターネットのhttp://www.javaworld.com/javaworld
/ というURLの "javaworld directory" の下のサブディ
レクトリから得ることができる。javaworldのベース・デ
ィレクトリの下で関連した2つの記事のサブディレクト
リおよび名称はjw-01-1998/jw-01-beans_p.htmlおよびj
w-02-1998/jw-02-beans_p.htmlで、これらを共に参照文
献としてここに含むことにする。「オブジェクト・シリア
ライゼーション」という語は、プログラム・オブジェクト
を表現する情報のシリアル・ストリームを生成するプロ
セスを指し、「オブジェクト・デシリアライゼーション」
という語は、情報のシリアル・ストリームを読みプログ
ラム・オブジェクトを再生成するプロセスを指す。
ムがプログラム・オブジェクトを表現する情報を、記録
または転送可能で、また違った時刻や場所で実行するプ
ログラムがその情報を読み、そのプログラム・オブジェ
クトを再び作成できるような形態で生成することができ
る。JavaTM プログラミング言語のプログラム・オブジェ
クトに対する適切な手法は、カリフォルニア州パロアル
ト市にあるサンマイクロシステム社が発行した「オブジ
ェクト・シリアライゼーション仕様書」で開示されてい
る。この仕様書はインターネットのhttp://java.sun.co
m/products/jdk/1.1/docs/guide/serialization/spec/
というURLの"jdk-specification directory"から得るこ
とができる。この仕様書を参照文献としてここに含むこ
とにする。このjdk-specification directoryの下でこ
の仕様の目次は "serialTOC.doc.html" に示されてお
り、システム・アーキテクチャについての説明は "seria
l-arch.doc.html" に与えられている。より詳しい情報
はウェブ・パブリシング社 ( Web Publishing Inc) 発行
のJavaWorld の記事に与えられている。これらの記事は
インターネットのhttp://www.javaworld.com/javaworld
/ というURLの "javaworld directory" の下のサブディ
レクトリから得ることができる。javaworldのベース・デ
ィレクトリの下で関連した2つの記事のサブディレクト
リおよび名称はjw-01-1998/jw-01-beans_p.htmlおよびj
w-02-1998/jw-02-beans_p.htmlで、これらを共に参照文
献としてここに含むことにする。「オブジェクト・シリア
ライゼーション」という語は、プログラム・オブジェクト
を表現する情報のシリアル・ストリームを生成するプロ
セスを指し、「オブジェクト・デシリアライゼーション」
という語は、情報のシリアル・ストリームを読みプログ
ラム・オブジェクトを再生成するプロセスを指す。
【0005】オブジェクト・シリアライゼーションやオ
ブジェクト・デシリアライゼーションを用い、1つ以上の
アプリケーションに必要な処理を最適化することができ
る。例えば、アプリケーション・処理をいくつかのセグ
メントに分割し、これらのセグメントを行うのに必要な
処理を2つ以上のコンピュータ・システムで実行すること
が可能である。1つのコンピュータ・システムが1つのア
プリケーションの最初のセグメントを行い、そのセグメ
ントを終了したとき、1つ以上のプログラム・オブジェク
トをシリアライズし、シリアル情報ストリームにおける
処理の状態を捕捉することもできる。一方第2のコンピ
ュータ・システムは、シリアル情報ストリームで表現さ
れるプログラム・オブジェクトを再生成することによ
り、したがって第1のコンピュータ・システムが最初のセ
グメントを終了したときの処理の状態を復元し、引き続
くセグメントを行い処理を継続することによりアプリケ
ーション・処理を続けることも可能である。あるいは、
シリアル化情報を複数のコンピュータ・システムに供給
し、1つのプロセスの同じセグメントを多かれ少なかれ
並行処理することも可能である。
ブジェクト・デシリアライゼーションを用い、1つ以上の
アプリケーションに必要な処理を最適化することができ
る。例えば、アプリケーション・処理をいくつかのセグ
メントに分割し、これらのセグメントを行うのに必要な
処理を2つ以上のコンピュータ・システムで実行すること
が可能である。1つのコンピュータ・システムが1つのア
プリケーションの最初のセグメントを行い、そのセグメ
ントを終了したとき、1つ以上のプログラム・オブジェク
トをシリアライズし、シリアル情報ストリームにおける
処理の状態を捕捉することもできる。一方第2のコンピ
ュータ・システムは、シリアル情報ストリームで表現さ
れるプログラム・オブジェクトを再生成することによ
り、したがって第1のコンピュータ・システムが最初のセ
グメントを終了したときの処理の状態を復元し、引き続
くセグメントを行い処理を継続することによりアプリケ
ーション・処理を続けることも可能である。あるいは、
シリアル化情報を複数のコンピュータ・システムに供給
し、1つのプロセスの同じセグメントを多かれ少なかれ
並行処理することも可能である。
【0006】
【発明が解決しようとする課題】残念ながら、プログラ
ム・オブジェクトをシリアル化およびデシリアル化する
従来の手法は、アプリケーションを行うプログラムに施
す変更に対し厳しい制限を課す。アプリケーションに対
する誤りを訂正したり新しい機能を追加したりする変更
にはプログラム・オブジェクトの1つ以上の定義された構
造における変更を必要とする。プログラム・オブジェク
トの定義を変更するとその度にプログラム・オブジェク
トの新しい「バージョン」が導入されると言われてる。
より正確には、そのような変更により、プログラム・オ
ブジェクトの構造を定義する「クラス」に対する新しいバ
ージョンが導入されることになる。プログラム・オブジ
ェクトはその構造を定義するクラスのインスタンスであ
る。
ム・オブジェクトをシリアル化およびデシリアル化する
従来の手法は、アプリケーションを行うプログラムに施
す変更に対し厳しい制限を課す。アプリケーションに対
する誤りを訂正したり新しい機能を追加したりする変更
にはプログラム・オブジェクトの1つ以上の定義された構
造における変更を必要とする。プログラム・オブジェク
トの定義を変更するとその度にプログラム・オブジェク
トの新しい「バージョン」が導入されると言われてる。
より正確には、そのような変更により、プログラム・オ
ブジェクトの構造を定義する「クラス」に対する新しいバ
ージョンが導入されることになる。プログラム・オブジ
ェクトはその構造を定義するクラスのインスタンスであ
る。
【0007】変更は下位互換性がある場合もある。これ
は、あるクラスの後のバージョンを用いるプログラム
が、それより以前のバージョンのクラスを用いたプログ
ラムにより生成されたシリアル情報からそのクラスのイ
ンスタンスをデシリアル化することが可能であることを
意味している。また、変更が上位互換性がある場合もあ
る。これは、あるクラスの以前のバージョンを用いるプ
ログラムが、それより後のバージョンのクラスを用いた
プログラムにより生成されたシリアル情報からそのクラ
スのインスタンスをデシリアル化することが可能である
ことを意味している。互換性のある変更とは上位互換性
および下位互換性が共にあるものをいう。互換性のない
変更とは上位互換性または下位互換性の1つが欠けてい
るか、あるいは、それら両方が欠けている変更のことを
いう。必要な変更が互換性を持たない場合は、分散ネッ
トワークにつながっているコンピュータがすべて同じバ
ージョンのクラスを用いるように変更されない限り、1
つのコンピュータ・システムだけにその変更を導入する
ことはできない 。Javaプログラミング言語のプログラ
ム・オブジェクトに影響する互換性および非互換性に関
するより詳しい情報は、上述したjdk-specificationデ
ィレクトリ中の書類 "version.doc.html"、および上述
のjavaworldディレクトリ中のjw-03-1998/jw-03-beans_
p.htmlの名で示されている記事から得ることができる。
これらを共に参照文献としてここに含むことにする。
は、あるクラスの後のバージョンを用いるプログラム
が、それより以前のバージョンのクラスを用いたプログ
ラムにより生成されたシリアル情報からそのクラスのイ
ンスタンスをデシリアル化することが可能であることを
意味している。また、変更が上位互換性がある場合もあ
る。これは、あるクラスの以前のバージョンを用いるプ
ログラムが、それより後のバージョンのクラスを用いた
プログラムにより生成されたシリアル情報からそのクラ
スのインスタンスをデシリアル化することが可能である
ことを意味している。互換性のある変更とは上位互換性
および下位互換性が共にあるものをいう。互換性のない
変更とは上位互換性または下位互換性の1つが欠けてい
るか、あるいは、それら両方が欠けている変更のことを
いう。必要な変更が互換性を持たない場合は、分散ネッ
トワークにつながっているコンピュータがすべて同じバ
ージョンのクラスを用いるように変更されない限り、1
つのコンピュータ・システムだけにその変更を導入する
ことはできない 。Javaプログラミング言語のプログラ
ム・オブジェクトに影響する互換性および非互換性に関
するより詳しい情報は、上述したjdk-specificationデ
ィレクトリ中の書類 "version.doc.html"、および上述
のjavaworldディレクトリ中のjw-03-1998/jw-03-beans_
p.htmlの名で示されている記事から得ることができる。
これらを共に参照文献としてここに含むことにする。
【0008】クラスの変更は一般に互換性がないため、
プログラム・オブジェクトをシリアル化する公知の手法
の多くは、プログラム・オブジェクトをシリアル化する
ときに使用したクラス・バージョンのIDを自動的に生成
する。この手法のいくつかの例が上述したベース・ディ
レクトリの下のウェブページで説明されている。このウ
ェブページのサブディレクトリおよび名前はjw-03-1998
/jw-03-beans_p.htmlで、これを参照文献としてここに
含むことにする。これにより、プログラムは、シリアル
化されたプログラム・オブジェクトのバージョンをオブ
ジェクトの新しいインスタンスを定義するのに用いるク
ラスの現在のバージョンに対しチェックすることが可能
になる。それらのバージョンが異なっている場合、エラ
ーまたは何らかの形のプログラム例外を出し、互換性が
ない可能性があるという注意をアプリケーション・プロ
グラムにすることもできる。
プログラム・オブジェクトをシリアル化する公知の手法
の多くは、プログラム・オブジェクトをシリアル化する
ときに使用したクラス・バージョンのIDを自動的に生成
する。この手法のいくつかの例が上述したベース・ディ
レクトリの下のウェブページで説明されている。このウ
ェブページのサブディレクトリおよび名前はjw-03-1998
/jw-03-beans_p.htmlで、これを参照文献としてここに
含むことにする。これにより、プログラムは、シリアル
化されたプログラム・オブジェクトのバージョンをオブ
ジェクトの新しいインスタンスを定義するのに用いるク
ラスの現在のバージョンに対しチェックすることが可能
になる。それらのバージョンが異なっている場合、エラ
ーまたは何らかの形のプログラム例外を出し、互換性が
ない可能性があるという注意をアプリケーション・プロ
グラムにすることもできる。
【0009】変更が互換性のあることが分かっている場
合、公知の手法により、クラス設計者はバージョンID自
動更新機能をオーバーライドし、以前のクラスのバージ
ョンに対し生成されたのと同じバージョンのIDを新しい
クラスのバージョンに対して生成するシリアル化プロセ
スを行なうことが可能である。この手法により、異なっ
ているが互換性のあるクラス・バージョンを用いるプロ
グラムが、そのクラスに対するシリアル化したプログラ
ム・オブジェクトを表現するシリアル情報を共有するこ
とを可能にする。しかし、異なっているが互換性のない
バージョンを用いるプログラムがシリアル化情報を共有
することを可能にする手法は知られていない。
合、公知の手法により、クラス設計者はバージョンID自
動更新機能をオーバーライドし、以前のクラスのバージ
ョンに対し生成されたのと同じバージョンのIDを新しい
クラスのバージョンに対して生成するシリアル化プロセ
スを行なうことが可能である。この手法により、異なっ
ているが互換性のあるクラス・バージョンを用いるプロ
グラムが、そのクラスに対するシリアル化したプログラ
ム・オブジェクトを表現するシリアル情報を共有するこ
とを可能にする。しかし、異なっているが互換性のない
バージョンを用いるプログラムがシリアル化情報を共有
することを可能にする手法は知られていない。
【0010】プログラムが1つのクラスの互換性のない
複数のバージョンのインスタンスであるプログラム・オ
ブジェクトのシリアル化表現を共有できるように、プロ
グラム・オブジェクトのシリアライゼーションおよびデ
シリアライゼーションを提供することが本発明の目的で
ある。
複数のバージョンのインスタンスであるプログラム・オ
ブジェクトのシリアル化表現を共有できるように、プロ
グラム・オブジェクトのシリアライゼーションおよびデ
シリアライゼーションを提供することが本発明の目的で
ある。
【0011】
【課題を解決するための手段】本発明の1つの側面は、
オブジェクト・クラスの具体化であるプログラム・オブジ
ェクトを、このプログラム・オブジェクトのバージョン
ID を求め、且このオブジェクト・クラスとこのバージョ
ン ID の関数として決定されるプログラム・オブジェク
トの表現を伝えるシリアル化情報を生成することによ
り、シリアル化する方法を提供することである。
オブジェクト・クラスの具体化であるプログラム・オブジ
ェクトを、このプログラム・オブジェクトのバージョン
ID を求め、且このオブジェクト・クラスとこのバージョ
ン ID の関数として決定されるプログラム・オブジェク
トの表現を伝えるシリアル化情報を生成することによ
り、シリアル化する方法を提供することである。
【0012】本発明の他の側面は、オブジェクト・クラ
スの具体化であるプログラム・オブジェクトの表現を伝
えるシリアル化情報を、このオブジェクト・クラスおよ
びプログラム・オブジェクトのバージョン ID をシリア
ル化情報から求め、且このシリアル化情報からオブジェ
クトの1つ以上の特性に対する値を確立することによ
り、デシリアル化する方法を提供することである。ここ
で1つ以上の特性に対する値はオブジェクト・クラスとバ
ージョン ID の関数として確立される。
スの具体化であるプログラム・オブジェクトの表現を伝
えるシリアル化情報を、このオブジェクト・クラスおよ
びプログラム・オブジェクトのバージョン ID をシリア
ル化情報から求め、且このシリアル化情報からオブジェ
クトの1つ以上の特性に対する値を確立することによ
り、デシリアル化する方法を提供することである。ここ
で1つ以上の特性に対する値はオブジェクト・クラスとバ
ージョン ID の関数として確立される。
【0013】本発明のこれらの側面はこれらの方法を実
行するように適合化された装置によりインプリメントさ
れる。これらの側面はまた、コンピュータ・システムの
ような装置が読むことが可能な媒体に保存され、このコ
ンピュータ・システムが実行可能な命令プログラムによ
りインプリメントされる場合もある。
行するように適合化された装置によりインプリメントさ
れる。これらの側面はまた、コンピュータ・システムの
ような装置が読むことが可能な媒体に保存され、このコ
ンピュータ・システムが実行可能な命令プログラムによ
りインプリメントされる場合もある。
【0014】本発明の他の側面は、装置による読み込み
が可能で、オブジェクト・クラスの具体化である1つ以上
のプログラム・オブジェクトを表現するシリアル化情報
を伝える媒体を提供することである。ここでこのシリア
ル化情報には、シリアル化情報により表現されるプログ
ラム・オブジェクトの数、オブジェクト・クラス名、なら
びに、シリアル化情報により表現されるそれぞれのプロ
グラム・オブジェクトに対し、それぞれのプログラム・オ
ブジェクトのバージョン ID およびそれぞれのプログラ
ム・オブジェクトの1つ以上の特性に対する値が含まれて
いる。
が可能で、オブジェクト・クラスの具体化である1つ以上
のプログラム・オブジェクトを表現するシリアル化情報
を伝える媒体を提供することである。ここでこのシリア
ル化情報には、シリアル化情報により表現されるプログ
ラム・オブジェクトの数、オブジェクト・クラス名、なら
びに、シリアル化情報により表現されるそれぞれのプロ
グラム・オブジェクトに対し、それぞれのプログラム・オ
ブジェクトのバージョン ID およびそれぞれのプログラ
ム・オブジェクトの1つ以上の特性に対する値が含まれて
いる。
【0015】本発明の他の側面は、装置による読み込み
が可能で、且プログラム・クラスの具体化であるプログ
ラム・オブジェクトをシリアル化またはデシリアル化す
るメソッドを装置が実行するための1つ以上の命令プロ
グラムを伝える媒体を提供することである。ここで1つ
以上の命令プログラムは、それぞれのプログラム・オブ
ジェクトのバージョン ID を求めるためのメソッドを含
むオブジェクト・クラスの定義、およびシリアル化また
はデシリアル化しようとする各プログラム・オブジェク
トの1つ以上の特性を特定するためのメソッドを含むオ
ブジェクト‐ディスクリプタ・クラスの定義を有する。
が可能で、且プログラム・クラスの具体化であるプログ
ラム・オブジェクトをシリアル化またはデシリアル化す
るメソッドを装置が実行するための1つ以上の命令プロ
グラムを伝える媒体を提供することである。ここで1つ
以上の命令プログラムは、それぞれのプログラム・オブ
ジェクトのバージョン ID を求めるためのメソッドを含
むオブジェクト・クラスの定義、およびシリアル化また
はデシリアル化しようとする各プログラム・オブジェク
トの1つ以上の特性を特定するためのメソッドを含むオ
ブジェクト‐ディスクリプタ・クラスの定義を有する。
【0016】本発明の種々の特長および実施例は、以下
の説明および図を参照することによりより明確になるで
あろう。また、いくつかの図において、同一の要素は同
じ参照番号で表わされている。以下の説明および図は例
として挙げられたものであり、本発明の範囲の限度を示
すものではない。
の説明および図を参照することによりより明確になるで
あろう。また、いくつかの図において、同一の要素は同
じ参照番号で表わされている。以下の説明および図は例
として挙げられたものであり、本発明の範囲の限度を示
すものではない。
【0017】
【発明の実施の形態】A.概要 1.インプリメンテーション 本発明はパーソナル・コンピュータ・システムで用いるソ
フトウエアも含め、種々の方法でインプリメントするこ
とができる。図1に、本発明の種々の面をインプリメン
トするのに用いるコンピュータ・システム10のブロック
図を示す。CPU 12は計算リソースを提供する。入力制御
13はキーボードやマウスのような入力装置14へのインタ
フェースを表現する。RAM 19はランダム・アクセス・メモ
リ (RAM)である。記憶制御15は、磁気テープや磁気ディ
スク、または光学媒体のような記憶媒体を含む記憶デバ
イス16へのインタフェースを表す。記憶媒体は、オペレ
ーティング・システム、ユーティリティ、アプリケーシ
ョン等の命令プログラムを記録するのに用いられ、本発
明の種々の面をインプリメントするプログラム実施例を
含む場合がある。表示制御17は表示装置18に対するイン
タフェースを表す。通信制御21は、通信設備20に接続す
る通信チャンネル22へのインタフェースを表す。通信設
備20は、実質的に、ネットワーク、スイッチ、またはポ
イント‐ポイント通信パス等の、コンピュータ・システ
ム10と他の装置とが通信できるようにする設備である。
フトウエアも含め、種々の方法でインプリメントするこ
とができる。図1に、本発明の種々の面をインプリメン
トするのに用いるコンピュータ・システム10のブロック
図を示す。CPU 12は計算リソースを提供する。入力制御
13はキーボードやマウスのような入力装置14へのインタ
フェースを表現する。RAM 19はランダム・アクセス・メモ
リ (RAM)である。記憶制御15は、磁気テープや磁気ディ
スク、または光学媒体のような記憶媒体を含む記憶デバ
イス16へのインタフェースを表す。記憶媒体は、オペレ
ーティング・システム、ユーティリティ、アプリケーシ
ョン等の命令プログラムを記録するのに用いられ、本発
明の種々の面をインプリメントするプログラム実施例を
含む場合がある。表示制御17は表示装置18に対するイン
タフェースを表す。通信制御21は、通信設備20に接続す
る通信チャンネル22へのインタフェースを表す。通信設
備20は、実質的に、ネットワーク、スイッチ、またはポ
イント‐ポイント通信パス等の、コンピュータ・システ
ム10と他の装置とが通信できるようにする設備である。
【0018】ここで示す実施例では、システムの主要成
分のすべてはバス11に接続されているが、このバスは物
理的に複数のバスを表している場合もある。例えば、あ
る種のパーソナル・コンピュータは、いわゆるISA ( Ind
ustry Standard Architecture ) またはその変形に準拠
するバスを1つだけ備えている。また、PCIローカル・バ
ス標準のようなある種のバス標準に準拠する広帯域バス
のようなバスをもう一つ備えているコンピュータもあ
る。本発明を実施するために特殊なバス・アーキテクチ
ャは必要でない。
分のすべてはバス11に接続されているが、このバスは物
理的に複数のバスを表している場合もある。例えば、あ
る種のパーソナル・コンピュータは、いわゆるISA ( Ind
ustry Standard Architecture ) またはその変形に準拠
するバスを1つだけ備えている。また、PCIローカル・バ
ス標準のようなある種のバス標準に準拠する広帯域バス
のようなバスをもう一つ備えているコンピュータもあ
る。本発明を実施するために特殊なバス・アーキテクチ
ャは必要でない。
【0019】本発明の種々の面を実施するのに必要な機
能は、ディスクリートな論理素子、1つ以上のASIC、お
よび/またはプログラムにより制御されるプロセッサ等
を含む広い範囲の種々の方法でインプリメントされた成
分により行われる。これらの成分がインプリメントされ
る方法は本発明には重要ではない。例えば、本発明を実
施するのに必要な動作は、コンピュータ・システム10の
ようなコンピュータ・システムで、記憶装置16に保存さ
れ、RAM 19にコピーされ、CPU 12で実行される命令プロ
グラムによって行うことができる。
能は、ディスクリートな論理素子、1つ以上のASIC、お
よび/またはプログラムにより制御されるプロセッサ等
を含む広い範囲の種々の方法でインプリメントされた成
分により行われる。これらの成分がインプリメントされ
る方法は本発明には重要ではない。例えば、本発明を実
施するのに必要な動作は、コンピュータ・システム10の
ようなコンピュータ・システムで、記憶装置16に保存さ
れ、RAM 19にコピーされ、CPU 12で実行される命令プロ
グラムによって行うことができる。
【0020】このようなソフトウエアは、超音波から紫
外線の周波数を含むスペクトルを持つ、磁気テープ、磁
気ディスク、光ディスク、ベースバンドまたは変調通信
パス等を含む種々の機械可読媒体により伝送される場合
もある。コンピュータ・システム10の種々の成分の中
で、ASICのような処理回路、汎用集積回路、ROMまたはR
AMの種々の形態に内蔵されたプログラムで制御されたマ
イクロプロセッサ、および他の手法により、種々の面を
インプリメントすることも可能である。
外線の周波数を含むスペクトルを持つ、磁気テープ、磁
気ディスク、光ディスク、ベースバンドまたは変調通信
パス等を含む種々の機械可読媒体により伝送される場合
もある。コンピュータ・システム10の種々の成分の中
で、ASICのような処理回路、汎用集積回路、ROMまたはR
AMの種々の形態に内蔵されたプログラムで制御されたマ
イクロプロセッサ、および他の手法により、種々の面を
インプリメントすることも可能である。
【0021】2.シリアル情報の分散使用 図2に、例えばインターネットのようなネットワーク形
態の通信設備20により相互接続されたいくつかのコンピ
ュータ・システムのブロック図を示す。ここに示した特
別な実施例では、コンピュータ・システム8、9、10はク
ライアントとして動作し、1つ以上のサーバー5、6とネ
ットワークを介して対話をする。この特別な実施例は、
コンピュータ・システムがお互いに通信し合う方法の一
例として示すだけである。この実施例の特別な特徴は本
発明にとって特に重要ではない。
態の通信設備20により相互接続されたいくつかのコンピ
ュータ・システムのブロック図を示す。ここに示した特
別な実施例では、コンピュータ・システム8、9、10はク
ライアントとして動作し、1つ以上のサーバー5、6とネ
ットワークを介して対話をする。この特別な実施例は、
コンピュータ・システムがお互いに通信し合う方法の一
例として示すだけである。この実施例の特別な特徴は本
発明にとって特に重要ではない。
【0022】コンピュータ・システム10のような装置
は、記憶装置16に含まれるような記憶媒体、または通信
施設20に表されるような通信パスにシリアル情報を書き
こんだり、逆にそれらからシリアル情報を読み出したり
することにより本発明の種々の面を実行する場合もあ
る。このシリアル情報は1つ以上のプログラム・オブジェ
クトを表現するのに用いられ、ある時刻と場所で生成し
たプログラム・オブジェクトを別の時刻と場所で再生成
することを可能にする。この特徴により、アプリケーシ
ョンの処理を時刻、および/または、場所に関し分散す
ることが可能になる。
は、記憶装置16に含まれるような記憶媒体、または通信
施設20に表されるような通信パスにシリアル情報を書き
こんだり、逆にそれらからシリアル情報を読み出したり
することにより本発明の種々の面を実行する場合もあ
る。このシリアル情報は1つ以上のプログラム・オブジェ
クトを表現するのに用いられ、ある時刻と場所で生成し
たプログラム・オブジェクトを別の時刻と場所で再生成
することを可能にする。この特徴により、アプリケーシ
ョンの処理を時刻、および/または、場所に関し分散す
ることが可能になる。
【0023】ここで用いられる「シリアル情報」とは、シ
リアルな方法で記録されるかまたは伝送される情報のこ
とをいう。しかし、この情報は実質的にはどのような形
態で記録または伝送されてもよい。例えば、「シリアル
情報」はバイトのような情報要素から構成されるが、バ
イト中の二進ビットはパラレルで記録または伝送されて
もよい。
リアルな方法で記録されるかまたは伝送される情報のこ
とをいう。しかし、この情報は実質的にはどのような形
態で記録または伝送されてもよい。例えば、「シリアル
情報」はバイトのような情報要素から構成されるが、バ
イト中の二進ビットはパラレルで記録または伝送されて
もよい。
【0024】例えば、図2で示される実施例では、本発
明により、ある特定のアプリケーションを実行するのに
コンピュータ・システム10が通信設備20に接続されてい
る他のコンピュータ・システムのリソースを用いること
ができるようにすることによって、必要な処理を分散す
ることができる。これを行うには、コンピュータ・シス
テム10が1つ以上のプログラム・オブジェクトを表現する
シリアル情報を生成し、それをクライアント8のような
他のコンピュータ・システムに 送ればよい。サーバー
5、および/または、6を、コンピューター・システム間
のシリアル情報の転送を容易にするのに用いてもよい。
クライアント8で実行されているアプリケーションは、
通信設備20を通して入力したシリアル情報から以前コン
ピュータ・システム10にあった1つ以上のプログラム・オ
ブジェクトに対応するプログラム・オブジェクトを生成
し、クライアント8で得られるリソースに対し適切なタ
スクを実行してもよい。これらのタスクを実行すること
により1つ以上のプログラム・オブジェクトが修正されて
もよく、またこれらのプログラム・オブジェクトをクラ
イアント8が生成したシリアル情報により転送すること
ができる。このシリアル情報を他のコンピュータ・シス
テムに出力し引き続き処理を行うこともできる。
明により、ある特定のアプリケーションを実行するのに
コンピュータ・システム10が通信設備20に接続されてい
る他のコンピュータ・システムのリソースを用いること
ができるようにすることによって、必要な処理を分散す
ることができる。これを行うには、コンピュータ・シス
テム10が1つ以上のプログラム・オブジェクトを表現する
シリアル情報を生成し、それをクライアント8のような
他のコンピュータ・システムに 送ればよい。サーバー
5、および/または、6を、コンピューター・システム間
のシリアル情報の転送を容易にするのに用いてもよい。
クライアント8で実行されているアプリケーションは、
通信設備20を通して入力したシリアル情報から以前コン
ピュータ・システム10にあった1つ以上のプログラム・オ
ブジェクトに対応するプログラム・オブジェクトを生成
し、クライアント8で得られるリソースに対し適切なタ
スクを実行してもよい。これらのタスクを実行すること
により1つ以上のプログラム・オブジェクトが修正されて
もよく、またこれらのプログラム・オブジェクトをクラ
イアント8が生成したシリアル情報により転送すること
ができる。このシリアル情報を他のコンピュータ・シス
テムに出力し引き続き処理を行うこともできる。
【0025】同様なやり方で、単一コンピュータ・シス
テムは、1つ以上のプログラム・オブジェクトを表現する
シリアル情報を生成し、そのシリアル情報を記憶装置16
に書きこむことにより処理を時間的に分散することがで
きる。引き続き、アプリケーションは記憶装置16から読
み出したシリアル情報からそれに対応するプログラム・
オブジェクトを生成することができる。
テムは、1つ以上のプログラム・オブジェクトを表現する
シリアル情報を生成し、そのシリアル情報を記憶装置16
に書きこむことにより処理を時間的に分散することがで
きる。引き続き、アプリケーションは記憶装置16から読
み出したシリアル情報からそれに対応するプログラム・
オブジェクトを生成することができる。
【0026】この機構は、プログラム・オブジェクトの
定義またはクラス構造に影響する変更が1つ以上のアプ
リケーションに対して行なわれるまで、十分に機能す
る。これらのアプリケーションにおいて誤りを訂正した
り新しい機能を付加したりするにはクラス構造を変更す
ることが必要になる場合もある。しかし、複数のコンピ
ュータ・システムで実行される複数のアプリケーション
間では、プログラム・オブジェクトに関する互換性を維
持する必要性があるため、ある特定のコンピュータ・シ
ステムで実行されるアプリケーションに対してそのよう
な変更を行うのは困難な場合がしばしば生じる。これら
の分散したアプリケーションが、これらのプログラム・
オブジェクトを表現するシリアル情報を共有できるため
には互換性が必要である。本発明はこの困難を解決する
のであるが、これは、プログラム・オブジェクトの定義
を変更するたびに特有の「バージョン」IDを与え、シリア
ル化またはデシリアル化されるプログラム・オブジェク
トの特定のバージョンに適合可能なシリアル化またはデ
シリアル化機能を与えることにより行われる。
定義またはクラス構造に影響する変更が1つ以上のアプ
リケーションに対して行なわれるまで、十分に機能す
る。これらのアプリケーションにおいて誤りを訂正した
り新しい機能を付加したりするにはクラス構造を変更す
ることが必要になる場合もある。しかし、複数のコンピ
ュータ・システムで実行される複数のアプリケーション
間では、プログラム・オブジェクトに関する互換性を維
持する必要性があるため、ある特定のコンピュータ・シ
ステムで実行されるアプリケーションに対してそのよう
な変更を行うのは困難な場合がしばしば生じる。これら
の分散したアプリケーションが、これらのプログラム・
オブジェクトを表現するシリアル情報を共有できるため
には互換性が必要である。本発明はこの困難を解決する
のであるが、これは、プログラム・オブジェクトの定義
を変更するたびに特有の「バージョン」IDを与え、シリア
ル化またはデシリアル化されるプログラム・オブジェク
トの特定のバージョンに適合可能なシリアル化またはデ
シリアル化機能を与えることにより行われる。
【0027】B.シリアル化 図3に、プログラム・オブジェクトを表現するシリアル情
報をそのプログラム・オブジェクトのバージョンに従っ
て生成するための基本的バージョン適合プロセスのステ
ップを示す。この特定のプロセスでは、ステップ110で
プログラム・オブジェクトのバージョンが得られ、ステ
ップ120でバージョンに従ってそのプログラム・オブジェ
クトの表現を決定し、ステップ130でこの表現を伝達す
るシリアル情報を生成する。この特定のプロセスは種々
の方法でインプリメントできるであろう。しかし、好ま
しいインプリメンテーションにおいては、シリアル化す
るプログラム・オブジェクトは、このシリアル化プロセ
スを容易にする種々の機能を定義しているクラスのイン
スタンスとなっていることが必要である。このようなク
ラスは「シリアル化可能な」クラスと見なされる。
報をそのプログラム・オブジェクトのバージョンに従っ
て生成するための基本的バージョン適合プロセスのステ
ップを示す。この特定のプロセスでは、ステップ110で
プログラム・オブジェクトのバージョンが得られ、ステ
ップ120でバージョンに従ってそのプログラム・オブジェ
クトの表現を決定し、ステップ130でこの表現を伝達す
るシリアル情報を生成する。この特定のプロセスは種々
の方法でインプリメントできるであろう。しかし、好ま
しいインプリメンテーションにおいては、シリアル化す
るプログラム・オブジェクトは、このシリアル化プロセ
スを容易にする種々の機能を定義しているクラスのイン
スタンスとなっていることが必要である。このようなク
ラスは「シリアル化可能な」クラスと見なされる。
【0028】図4に、この基本的シリアル化プロセスの
1つのインプリメンテーションに対する詳細を示す。こ
の特定のインプリメンテーションでは、シリアル化を行
なおうとしているプログラム・オブジェクトのクラス
は、そのプログラム・オブジェクトのバージョンを得る
メソッドを定義している。ステップ 101 ではこのクラ
スのプログラム・オブジェクトが具体化され、ステップ1
10では、プログラム・オブジェクトのバージョンの ID
を得る適切なメソッドが起動される。ステップ121で
は、プログラム・オブジェクトのこのバージョンに対す
る、シリアル化表現に含まれるべき特性が決定される。
これは種々の方法でインプリメントできるであろうが、
それには、例えば、シリアル化するプログラム・オブジ
ェクトのメソッド、シリアル化するプログラム・オブジ
ェクトのクラスに何らかの形で関係する他のクラスのプ
ログラム・オブジェクトのメソッド、または特性のデー
タベース等がある。とにかく、シリアル化する特性を決
定するプロセスのインプリメンテーションは、プログラ
ム・オブジェクトのクラスおよびバージョンの機能と考
えることができる。ステップ122ではシリアル化する特
性それぞれの値を確認し、ステップ130では、プログラ
ム・オブジェクトのクラスおよびバージョン、ならびに
ステップ 121 および 122 で決定されたそれぞれの特性
の表現を伝達するシリアル情報が生成される。
1つのインプリメンテーションに対する詳細を示す。こ
の特定のインプリメンテーションでは、シリアル化を行
なおうとしているプログラム・オブジェクトのクラス
は、そのプログラム・オブジェクトのバージョンを得る
メソッドを定義している。ステップ 101 ではこのクラ
スのプログラム・オブジェクトが具体化され、ステップ1
10では、プログラム・オブジェクトのバージョンの ID
を得る適切なメソッドが起動される。ステップ121で
は、プログラム・オブジェクトのこのバージョンに対す
る、シリアル化表現に含まれるべき特性が決定される。
これは種々の方法でインプリメントできるであろうが、
それには、例えば、シリアル化するプログラム・オブジ
ェクトのメソッド、シリアル化するプログラム・オブジ
ェクトのクラスに何らかの形で関係する他のクラスのプ
ログラム・オブジェクトのメソッド、または特性のデー
タベース等がある。とにかく、シリアル化する特性を決
定するプロセスのインプリメンテーションは、プログラ
ム・オブジェクトのクラスおよびバージョンの機能と考
えることができる。ステップ122ではシリアル化する特
性それぞれの値を確認し、ステップ130では、プログラ
ム・オブジェクトのクラスおよびバージョン、ならびに
ステップ 121 および 122 で決定されたそれぞれの特性
の表現を伝達するシリアル情報が生成される。
【0029】図7に、1つ以上のプログラム・オブジェク
トを表現するシリアル情報を生成するのに用いる1つの
プロセスのフローチャートを示す。このプロセスでは、
ステップ 131 でシリアル化するプログラム・オブジェク
トの数をシリアル情報ストリームに書き込む。シリアル
化するプログラム・オブジェクトのそれぞれに対し、ス
テップ 132 ではそれぞれのプログラム・オブジェクトの
クラスに関する ID をシリアル情報ストリーム内に書き
込み、ステップ 133 ではそれぞれのプログラム・オブジ
ェクトのバージョン関する ID を書き込む。
トを表現するシリアル情報を生成するのに用いる1つの
プロセスのフローチャートを示す。このプロセスでは、
ステップ 131 でシリアル化するプログラム・オブジェク
トの数をシリアル情報ストリームに書き込む。シリアル
化するプログラム・オブジェクトのそれぞれに対し、ス
テップ 132 ではそれぞれのプログラム・オブジェクトの
クラスに関する ID をシリアル情報ストリーム内に書き
込み、ステップ 133 ではそれぞれのプログラム・オブジ
ェクトのバージョン関する ID を書き込む。
【0030】シリアル化するそれぞれのプログラム・オ
ブジェクトのそれぞれの特性に関し、ステップ 134 で
はそれらそれぞれの特性をシリアル化する適切なプロセ
スを起動する。ステップ 134 では、それ自身1つ以上の
シリアル化可能なプログラム・オブジェクトであるプロ
グラム・オブジェクト特性をシリアル化する再帰的プロ
セスをインプリメントする。この機能に関しては以下で
詳細に説明する。ステップ 135 ではそれぞれのプログ
ラム・オブジェクトに対する特性がすべてシリアル化さ
れたかどうかを判定し、まだの場合は、ステップ 134
に戻り次ぎの特性をシリアル化する。
ブジェクトのそれぞれの特性に関し、ステップ 134 で
はそれらそれぞれの特性をシリアル化する適切なプロセ
スを起動する。ステップ 134 では、それ自身1つ以上の
シリアル化可能なプログラム・オブジェクトであるプロ
グラム・オブジェクト特性をシリアル化する再帰的プロ
セスをインプリメントする。この機能に関しては以下で
詳細に説明する。ステップ 135 ではそれぞれのプログ
ラム・オブジェクトに対する特性がすべてシリアル化さ
れたかどうかを判定し、まだの場合は、ステップ 134
に戻り次ぎの特性をシリアル化する。
【0031】それぞれのプログラム・オブジェクトに対
する特性がすべてシリアル化されると、プロセスはステ
ップ 136 に進み、それぞれのプログラム・オブジェクト
のクラスがシリアル化されるべきベース・クラスから導
かれるかどうかを判定する。図9は、サン・マイクロシス
テム社から得られる Java Development Kit (JDK) バー
ジョン 1.1 に含まれている、例えば"JavaBeansTM API
specification" のバージョン 1.01に準拠するプログラ
ム・オブジェクトを用いたアプリケーションにおいてス
テップ 136 をインプリメントするために用いる1つのプ
ロセスのステップを示したものである。この仕様のバー
ジョン 1.01 には "JavaBean" として公知のプログラム
成分をシリアル化するための仕様が含まれており、この
仕様はインターネット上のURL http://java.sun.com/pr
oducts/jdk/1.1/docs/guide/beans/index.html で供給
されている。これを参照文献としてここに含むことにす
る。
する特性がすべてシリアル化されると、プロセスはステ
ップ 136 に進み、それぞれのプログラム・オブジェクト
のクラスがシリアル化されるべきベース・クラスから導
かれるかどうかを判定する。図9は、サン・マイクロシス
テム社から得られる Java Development Kit (JDK) バー
ジョン 1.1 に含まれている、例えば"JavaBeansTM API
specification" のバージョン 1.01に準拠するプログラ
ム・オブジェクトを用いたアプリケーションにおいてス
テップ 136 をインプリメントするために用いる1つのプ
ロセスのステップを示したものである。この仕様のバー
ジョン 1.01 には "JavaBean" として公知のプログラム
成分をシリアル化するための仕様が含まれており、この
仕様はインターネット上のURL http://java.sun.com/pr
oducts/jdk/1.1/docs/guide/beans/index.html で供給
されている。これを参照文献としてここに含むことにす
る。
【0032】図9に示されているインプリメンテーショ
ンはリフレクションとして知られている Java プログラ
ミング言語の機能を利用している。ステップ 361 で
は、インスタンスであるプログラム・オブジェクトのク
ラス名を得るためプログラム・オブジェクトのメソッド
が起動される。ステップ 362 では、シリアル化するプ
ログラム・オブジェクトのクラスに付随したオブジェク
ト・ディスクリプタ・クラスのクラス名が確認される。好
ましい実施例では、オブジェクト・ディスクリプタ・クラ
スのクラス名は、例えばクラス名に "Descriptor" とい
うストリングを追加するような方法で、プログラム・オ
ブジェクトのクラス名から導かれる。この例では、クラ
ス "Widget" に対するオブジェクト・ディスクリプタ・ク
ラス名は "WidgetDescriptor" である。ステップ 363
ではオブジェクト・ディスクリプタ・クラスのオブジェク
トを具体化し、ステップ 364 では、このオブジェクト・
ディスクリプタ・クラスが導かれるベース・クラスの名称
を得るため、Java リフレクション・アプリケーション・
プログラミング・インタフェース (API) が提供するこの
オブジェクトのメソッドを起動する。このインプリメン
テーションに関しては以下でより詳細に説明する。
ンはリフレクションとして知られている Java プログラ
ミング言語の機能を利用している。ステップ 361 で
は、インスタンスであるプログラム・オブジェクトのク
ラス名を得るためプログラム・オブジェクトのメソッド
が起動される。ステップ 362 では、シリアル化するプ
ログラム・オブジェクトのクラスに付随したオブジェク
ト・ディスクリプタ・クラスのクラス名が確認される。好
ましい実施例では、オブジェクト・ディスクリプタ・クラ
スのクラス名は、例えばクラス名に "Descriptor" とい
うストリングを追加するような方法で、プログラム・オ
ブジェクトのクラス名から導かれる。この例では、クラ
ス "Widget" に対するオブジェクト・ディスクリプタ・ク
ラス名は "WidgetDescriptor" である。ステップ 363
ではオブジェクト・ディスクリプタ・クラスのオブジェク
トを具体化し、ステップ 364 では、このオブジェクト・
ディスクリプタ・クラスが導かれるベース・クラスの名称
を得るため、Java リフレクション・アプリケーション・
プログラミング・インタフェース (API) が提供するこの
オブジェクトのメソッドを起動する。このインプリメン
テーションに関しては以下でより詳細に説明する。
【0033】このオブジェクト‐ディスクリプタ・クラ
スがオブジェクト‐ディスクリプタ・ベース・クラスから
導かれる場合、プロセスはステップ 133 に進み、この
ベース・クラスに関係したバージョンの ID をシリアル
情報ストリームに書き込む。プロセスはそのベース・ク
ラスの適切な特性をシリアル化することにより続けられ
る。このプロセスは、ステップ 136 でベース・クラスが
もう残っていないと判定されるまで繰り返される。ベー
ス・クラスのプロセスがすべて完了すれば、ステップ 13
7 でシリアライズするプログラム・オブジェクトがまだ
あるかどうかを判定する。まだ残っている場合は、ステ
ップ 132 に戻り、次ぎのプログラム・オブジェクトのプ
ロセスを行う。すべてのプログラム・オブジェクトがシ
リアライズされれば、ステップ 138 に進みプロセスは
完了する。
スがオブジェクト‐ディスクリプタ・ベース・クラスから
導かれる場合、プロセスはステップ 133 に進み、この
ベース・クラスに関係したバージョンの ID をシリアル
情報ストリームに書き込む。プロセスはそのベース・ク
ラスの適切な特性をシリアル化することにより続けられ
る。このプロセスは、ステップ 136 でベース・クラスが
もう残っていないと判定されるまで繰り返される。ベー
ス・クラスのプロセスがすべて完了すれば、ステップ 13
7 でシリアライズするプログラム・オブジェクトがまだ
あるかどうかを判定する。まだ残っている場合は、ステ
ップ 132 に戻り、次ぎのプログラム・オブジェクトのプ
ロセスを行う。すべてのプログラム・オブジェクトがシ
リアライズされれば、ステップ 138 に進みプロセスは
完了する。
【0034】導かれたプログラム・オブジェクトのクラ
スの階層とそれに関連したオブジェクト・ディスクリプ
タのクラスの階層との間にある関係が図11に示されてい
る。プログラム・オブジェクト・クラス C1~C5 はそれぞ
れボックス 381~385 で表現され、オブジェクト・ディス
クリプタのクラス C3Descriptor、C4Descriptor、およ
びC5Descriptorはそれぞれボックス 483~485 で表現さ
れている。クラス C5 はクラス C4 から導かれ、C4 は
クラス C3 から導かれる。この例では、クラス C3は XS
erializable と見なされるクラス中、最高位のプログラ
ム・オブジェクトである。この特定のインプリメンテー
ションにおけるXSerializableという名称は、プログラ
ム・オブジェクト・クラスのインスタンスがシリアル化可
能であることを示しているが、その理由は、そのクラス
がオブジェクトのシリアル化を容易にする機能をインプ
リメントしているからである。クラス C5Descriptor は
クラス C4Descriptor から導かれるオブジェクト・ディ
スクリプタ・クラスであり、クラス C4Descriptor はク
ラス C3Descriptor から導かれるオブジェクト・ディス
クリプタ・クラスである。これらのオブジェクト・ディス
クリプタ・クラスの各々は、そのプログラム・オブジェク
ト・クラスに関する記述的情報を得るため、起動可能な
メソッドをインプリメントする。この情報をそれぞれの
クラスに対するプログラム・オブジェクトをシリアル化
するために用いてもよい。
スの階層とそれに関連したオブジェクト・ディスクリプ
タのクラスの階層との間にある関係が図11に示されてい
る。プログラム・オブジェクト・クラス C1~C5 はそれぞ
れボックス 381~385 で表現され、オブジェクト・ディス
クリプタのクラス C3Descriptor、C4Descriptor、およ
びC5Descriptorはそれぞれボックス 483~485 で表現さ
れている。クラス C5 はクラス C4 から導かれ、C4 は
クラス C3 から導かれる。この例では、クラス C3は XS
erializable と見なされるクラス中、最高位のプログラ
ム・オブジェクトである。この特定のインプリメンテー
ションにおけるXSerializableという名称は、プログラ
ム・オブジェクト・クラスのインスタンスがシリアル化可
能であることを示しているが、その理由は、そのクラス
がオブジェクトのシリアル化を容易にする機能をインプ
リメントしているからである。クラス C5Descriptor は
クラス C4Descriptor から導かれるオブジェクト・ディ
スクリプタ・クラスであり、クラス C4Descriptor はク
ラス C3Descriptor から導かれるオブジェクト・ディス
クリプタ・クラスである。これらのオブジェクト・ディス
クリプタ・クラスの各々は、そのプログラム・オブジェク
ト・クラスに関する記述的情報を得るため、起動可能な
メソッドをインプリメントする。この情報をそれぞれの
クラスに対するプログラム・オブジェクトをシリアル化
するために用いてもよい。
【0035】例えば、C4Descriptor のオブジェクトの
メソッドを起動し、C4 クラスに対するシリアル化する
特性のリストを得ることができる。Java プログラム言
語でのインプリメンテーションに関しては、この情報を
得るため、オブジェクト・ディスクリプタ・クラスのメソ
ッドにより Java リフレクション機構の機能を用いるこ
とができる。クラス C3 は XSerializable で最高位の
プログラム・オブジェクト・クラスであるから、それより
も高位のプログラム・オブジェクト・クラス C2および C1
に対して定義されるオブジェクト・ディスクリプタ・ク
ラスは存在しない。
メソッドを起動し、C4 クラスに対するシリアル化する
特性のリストを得ることができる。Java プログラム言
語でのインプリメンテーションに関しては、この情報を
得るため、オブジェクト・ディスクリプタ・クラスのメソ
ッドにより Java リフレクション機構の機能を用いるこ
とができる。クラス C3 は XSerializable で最高位の
プログラム・オブジェクト・クラスであるから、それより
も高位のプログラム・オブジェクト・クラス C2および C1
に対して定義されるオブジェクト・ディスクリプタ・ク
ラスは存在しない。
【0036】C.シリアル情報形式 原則としてはシリアル情報はいかなる形式にも配置する
ことができる。本発明には形式は重要でない。上述した
プロセスで生成されたシリアル情報ストリーム300 のコ
ンテンツに関する模式図を図10に示す。この図に示され
た形式では、セグメント 301 はストリーム中の情報で
表現されるプログラム・オブジェクトの数を示し、セグ
メント 302 および 303 はそれぞれストリーム中で表現
される第1 のプログラム・オブジェクトのクラス名およ
びバージョンを示し、セグメント304 は第 1 のプログ
ラム・オブジェクトの1つ以上の特性を表現するシリアル
情報を示す。
ことができる。本発明には形式は重要でない。上述した
プロセスで生成されたシリアル情報ストリーム300 のコ
ンテンツに関する模式図を図10に示す。この図に示され
た形式では、セグメント 301 はストリーム中の情報で
表現されるプログラム・オブジェクトの数を示し、セグ
メント 302 および 303 はそれぞれストリーム中で表現
される第1 のプログラム・オブジェクトのクラス名およ
びバージョンを示し、セグメント304 は第 1 のプログ
ラム・オブジェクトの1つ以上の特性を表現するシリアル
情報を示す。
【0037】第 1 のプログラム・オブジェクトのクラス
がシリアル化されるベース・クラスから導かれる場合
は、セグメント 305 および 306 はベース・クラスのバ
ージョンおよび特性を表す。このベース・クラスがさら
に1つ以上のシリアル化するベース・クラスから導かれる
場合は、それぞれのベース・クラスのバージョンおよび
特性に関する情報を示すため、さらにいくつかのセグメ
ント対が使用される。
がシリアル化されるベース・クラスから導かれる場合
は、セグメント 305 および 306 はベース・クラスのバ
ージョンおよび特性を表す。このベース・クラスがさら
に1つ以上のシリアル化するベース・クラスから導かれる
場合は、それぞれのベース・クラスのバージョンおよび
特性に関する情報を示すため、さらにいくつかのセグメ
ント対が使用される。
【0038】2つ以上のプログラム・オブジェクトがシリ
アル情報ストリーム 300 で表現される場合、第 2 のプ
ログラム・オブジェクトの表現は、この第 2 のプログラ
ム・オブジェクトのクラス名を表すセグメント 307 から
始まる。これらのセグメントに加えていくつかのセグメ
ントを用い、この第 2 のプログラム・オブジェクトおよ
びそれ以降のプログラム・オブジェクトの情報が、第 1
のプログラム・オブジェクトの情報がセグメント 302〜3
06 で表現されたのと同様にして表現される。
アル情報ストリーム 300 で表現される場合、第 2 のプ
ログラム・オブジェクトの表現は、この第 2 のプログラ
ム・オブジェクトのクラス名を表すセグメント 307 から
始まる。これらのセグメントに加えていくつかのセグメ
ントを用い、この第 2 のプログラム・オブジェクトおよ
びそれ以降のプログラム・オブジェクトの情報が、第 1
のプログラム・オブジェクトの情報がセグメント 302〜3
06 で表現されたのと同様にして表現される。
【0039】1つ以上のシリアル化された特性を示すセ
グメント 304 のようなセグメントは、必要に応じてい
くつかの情報単位に分割することもできる。例えば、複
数の特性を表しているセグメントにある情報を、各特性
に対するそれぞれの情報単位に分割してもよい。それ自
身がシリアル化可能なオブジェクトである特性に関して
は、1つの単位をさらにいくつかのセグメントに分割す
ることができる。例えば、セグメント 304 が複数のシ
リアル化可能なオブジェクトを表している場合、このセ
グメント内の情報を図10に示すようなセグメント 301〜
307 の形式に従って分割することができる。
グメント 304 のようなセグメントは、必要に応じてい
くつかの情報単位に分割することもできる。例えば、複
数の特性を表しているセグメントにある情報を、各特性
に対するそれぞれの情報単位に分割してもよい。それ自
身がシリアル化可能なオブジェクトである特性に関して
は、1つの単位をさらにいくつかのセグメントに分割す
ることができる。例えば、セグメント 304 が複数のシ
リアル化可能なオブジェクトを表している場合、このセ
グメント内の情報を図10に示すようなセグメント 301〜
307 の形式に従って分割することができる。
【0040】D.デシリアライゼーション 図5に、あるクラスの特定のバージョンに対するプログ
ラム・オブジェクトを、そのクラスに属するが恐らく異
なったバージョンに対するプログラム・オブジェクトを
表現するシリアル情報から、生成する基本プロセスのス
テップを示す。この特定のプロセスにおいては、ステッ
プ 210 でシリアル情報を読み込み、シリアル情報で表
現されているプログラム・オブジェクトのバージョンを
得る。次ぎにステップ 220 では、そのプログラム・オブ
ジェクトの特性の値が、シリアル情報中で表現されてい
るクラスのバージョン、並びにプログラム・オブジェク
トが作成されるクラスのバージョンに従って、確立され
る。この特定のプロセスは種々の方法でインプリメント
することが可能である。しかし、好ましいインプリメン
テーションでは、シリアル化するプログラム・オブジェ
クトはシリアル化可能と見なされるクラスのインスタン
スである必要がある。その理由は、そのクラスがシリア
ル化プロセスを容易にする種々の機能を定義するからで
ある。
ラム・オブジェクトを、そのクラスに属するが恐らく異
なったバージョンに対するプログラム・オブジェクトを
表現するシリアル情報から、生成する基本プロセスのス
テップを示す。この特定のプロセスにおいては、ステッ
プ 210 でシリアル情報を読み込み、シリアル情報で表
現されているプログラム・オブジェクトのバージョンを
得る。次ぎにステップ 220 では、そのプログラム・オブ
ジェクトの特性の値が、シリアル情報中で表現されてい
るクラスのバージョン、並びにプログラム・オブジェク
トが作成されるクラスのバージョンに従って、確立され
る。この特定のプロセスは種々の方法でインプリメント
することが可能である。しかし、好ましいインプリメン
テーションでは、シリアル化するプログラム・オブジェ
クトはシリアル化可能と見なされるクラスのインスタン
スである必要がある。その理由は、そのクラスがシリア
ル化プロセスを容易にする種々の機能を定義するからで
ある。
【0041】図6に、この基本デシリアライゼーション・
プロセスに対する1つのインプリメンテーションをさら
に詳細に示す。このインプリメンテーションでは、ステ
ップ201 でプログラム・オブジェクトを具体化し、次ぎ
にステップ 210 で、シリアル情報を読み、シリアル情
報で表現されるプログラム・オブジェクトのバージョンI
D を得る。他のインプリメンテーションでは、プログラ
ム・オブジェクトのインスタンスが引き続くステップで
作成される。ステップ 221 では、シリアル情報に含ま
れている当プログラム・オブジェクト・バージョンに対す
る特性が特定される。これは種々の方法でインプリメン
トできるが、それには、例えば、デシリアライズするプ
ログラム・オブジェクトのメソッド、デシリアライズす
るプログラム・オブジェクトのクラスにある点で関連し
たクラスのプログラム・オブジェクトのメソッド、また
は特性のデータベース等がある。とにかく、デシリアラ
イズする特性を決定するプロセスのインプリメンテーシ
ョンはプログラム・オブジェクトのクラスおよびバージ
ョンの関数と考えられる。ステップ 222 でシリアル情
報から1つ以上の特性の値を獲得し、ステップ 223 でこ
れらの値を、そのプログラム・オブジェクトの新しく作
成されたインスタンスの対応する特性に対する値として
確立する。
プロセスに対する1つのインプリメンテーションをさら
に詳細に示す。このインプリメンテーションでは、ステ
ップ201 でプログラム・オブジェクトを具体化し、次ぎ
にステップ 210 で、シリアル情報を読み、シリアル情
報で表現されるプログラム・オブジェクトのバージョンI
D を得る。他のインプリメンテーションでは、プログラ
ム・オブジェクトのインスタンスが引き続くステップで
作成される。ステップ 221 では、シリアル情報に含ま
れている当プログラム・オブジェクト・バージョンに対す
る特性が特定される。これは種々の方法でインプリメン
トできるが、それには、例えば、デシリアライズするプ
ログラム・オブジェクトのメソッド、デシリアライズす
るプログラム・オブジェクトのクラスにある点で関連し
たクラスのプログラム・オブジェクトのメソッド、また
は特性のデータベース等がある。とにかく、デシリアラ
イズする特性を決定するプロセスのインプリメンテーシ
ョンはプログラム・オブジェクトのクラスおよびバージ
ョンの関数と考えられる。ステップ 222 でシリアル情
報から1つ以上の特性の値を獲得し、ステップ 223 でこ
れらの値を、そのプログラム・オブジェクトの新しく作
成されたインスタンスの対応する特性に対する値として
確立する。
【0042】図 8 に、1つ以上のプログラム・オブジェ
クトを表現するシリアル情報を読み込み・処理するのに
用いる1つのプロセスのフローチャートを示す。このプ
ロセスでは、ステップ 231 でシリアル情報を読み込
み、シリアル情報内で表現されているプログラム・オブ
ジェクトの数を得る。デシリアル化するプログラム・オ
ブジェクトのそれぞれに対し、ステップ 232 ではそれ
ぞれのプログラム・オブジェクトのクラスに関する ID
をシリアル情報から読み込み、ステップ 233 ではそれ
ぞれのプログラム・オブジェクトのバージョン関する ID
を読み込む。
クトを表現するシリアル情報を読み込み・処理するのに
用いる1つのプロセスのフローチャートを示す。このプ
ロセスでは、ステップ 231 でシリアル情報を読み込
み、シリアル情報内で表現されているプログラム・オブ
ジェクトの数を得る。デシリアル化するプログラム・オ
ブジェクトのそれぞれに対し、ステップ 232 ではそれ
ぞれのプログラム・オブジェクトのクラスに関する ID
をシリアル情報から読み込み、ステップ 233 ではそれ
ぞれのプログラム・オブジェクトのバージョン関する ID
を読み込む。
【0043】デシリアル化するそれぞれのプログラム・
オブジェクトのそれぞれの特性に関し、ステップ 234
ではそれぞれの特性をデシリアル化する適切なプロセス
を起動する。ステップ 234 では、それ自身1つ以上のデ
シリアル化可能なプログラム・オブジェクトであるプロ
グラム・オブジェクト特性をデシリアル化する再帰的プ
ロセスをインプリメントする。この機能に関しては以下
で詳細に説明する。ステップ 235 ではそれぞれのプロ
グラム・オブジェクトに対する特性がすべてデシリアル
化されたかどうかを判定し、まだの場合は、ステップ 2
34 に戻り次ぎの特性をデシリアル化する。
オブジェクトのそれぞれの特性に関し、ステップ 234
ではそれぞれの特性をデシリアル化する適切なプロセス
を起動する。ステップ 234 では、それ自身1つ以上のデ
シリアル化可能なプログラム・オブジェクトであるプロ
グラム・オブジェクト特性をデシリアル化する再帰的プ
ロセスをインプリメントする。この機能に関しては以下
で詳細に説明する。ステップ 235 ではそれぞれのプロ
グラム・オブジェクトに対する特性がすべてデシリアル
化されたかどうかを判定し、まだの場合は、ステップ 2
34 に戻り次ぎの特性をデシリアル化する。
【0044】それぞれのプログラム・オブジェクトに対
する特性がすべてデシリアル化されると、プロセスはス
テップ 236 に進み、それぞれのプログラム・オブジェク
トのクラスがデシリアル化されるべきベース・クラスか
ら導かれるかどうかを判定する。図9は、前述した Java
Object Serialization Specificationに準拠するプロ
グラム・オブジェクトを用いたアプリケーションにおい
てステップ 236 をインプリメントするために用いる1つ
のプロセスのステップを示したものである。上述したこ
のインプリメンテーションはリフレクションとして知ら
れている Javaプログラミング言語の機能を利用してい
る。
する特性がすべてデシリアル化されると、プロセスはス
テップ 236 に進み、それぞれのプログラム・オブジェク
トのクラスがデシリアル化されるべきベース・クラスか
ら導かれるかどうかを判定する。図9は、前述した Java
Object Serialization Specificationに準拠するプロ
グラム・オブジェクトを用いたアプリケーションにおい
てステップ 236 をインプリメントするために用いる1つ
のプロセスのステップを示したものである。上述したこ
のインプリメンテーションはリフレクションとして知ら
れている Javaプログラミング言語の機能を利用してい
る。
【0045】このクラスがベース・クラスから導かれる
場合は、プロセスはステップ 233 に進み、このベース・
クラスに関係したバージョンの ID をシリアル情報から
読み込む。プロセスはそのベース・クラスの適切な特性
をデシリアル化することにより続けられる。このプロセ
スは、ステップ 236 でベース・クラスがもう残っていな
いと判定されるまで繰り返される。ベース・クラスのプ
ロセスがすべて完了すれば、ステップ 237 でデシリア
ライズするプログラム・オブジェクトがまだあるかどう
かを判定する。まだ残っている場合は、ステップ 232
に戻り、次ぎのプログラム・オブジェクトのプロセスを
行う。すべてのプログラム・オブジェクトがデシリアラ
イズされれば、ステップ 238 に進みプロセスは完了す
る。
場合は、プロセスはステップ 233 に進み、このベース・
クラスに関係したバージョンの ID をシリアル情報から
読み込む。プロセスはそのベース・クラスの適切な特性
をデシリアル化することにより続けられる。このプロセ
スは、ステップ 236 でベース・クラスがもう残っていな
いと判定されるまで繰り返される。ベース・クラスのプ
ロセスがすべて完了すれば、ステップ 237 でデシリア
ライズするプログラム・オブジェクトがまだあるかどう
かを判定する。まだ残っている場合は、ステップ 232
に戻り、次ぎのプログラム・オブジェクトのプロセスを
行う。すべてのプログラム・オブジェクトがデシリアラ
イズされれば、ステップ 238 に進みプロセスは完了す
る。
【0046】E.インプリメンテーション 1.シリアライゼーション a)ハイレベル手順 上述したプロセスの種々の面のインプリメンテーション
が以下に示すいくつかの断片プログラムで示されてい
る。これらの断片プログラムは Java プログラミング言
語の文法的特徴を備える擬似コードで示されている。こ
こで示す断片プログラムは、コンパイルして実用に適す
るようなものを示すためではなく、インプリメンテーシ
ョンの際に考慮すべきいくつかの点を示すためである。
例えば、これらの断片プログラムには、実際に使用する
場合に必要となる、誤り条件や例外に対するチェックが
備えられていない。さらに、種々の Java の規則や仕様
に準拠するインプリメンテーションに関する説明が特に
多くなされるが、本発明は実質上いかなるプログラミン
グ言語を用いてもインプリメント可能である。しかし、
Java プログラミング言語は、以下に述べる特定のイン
プリメンテーションを容易にするリフレクション API
のような機能を提供する。
が以下に示すいくつかの断片プログラムで示されてい
る。これらの断片プログラムは Java プログラミング言
語の文法的特徴を備える擬似コードで示されている。こ
こで示す断片プログラムは、コンパイルして実用に適す
るようなものを示すためではなく、インプリメンテーシ
ョンの際に考慮すべきいくつかの点を示すためである。
例えば、これらの断片プログラムには、実際に使用する
場合に必要となる、誤り条件や例外に対するチェックが
備えられていない。さらに、種々の Java の規則や仕様
に準拠するインプリメンテーションに関する説明が特に
多くなされるが、本発明は実質上いかなるプログラミン
グ言語を用いてもインプリメント可能である。しかし、
Java プログラミング言語は、以下に述べる特定のイン
プリメンテーションを容易にするリフレクション API
のような機能を提供する。
【0047】以下の断片プログラムは、1つ以上のプロ
グラム・オブジェクトをシリアル化する際に呼び出され
る手順 serializeObjects をインプリメントしたもので
ある。 public void serializeObjects(ObjectOutputStream out, Vector objects) { int nObjects = 0; Object [ ] objArry = new Object[objects.size( )]; objects.copyInto(objArry); for (int i = 0; i < objArry.length; i++) { Object o = objArry[i]; if (o instanceof XSerializable) nObjects++; } out.writeInt(nObjects); // Write the objects for (int i = 0; i < objArry.length; i++) { Object o = objArry[i]; if (o instanceof XSerializable) serializeObject(out, (XSerializable)o); } このインプリメンテーションでは、手順 serializeObje
cts はシリアル化しようとする1つ以上のプログラム・オ
ブジェクトを特定するアレイ objects を入力し、ま
た、シリアル化した表現を書き込む先のシリアル・スト
リームを特定するレファレンス out を入力する。この
手順は変数 nObjects を用いアレイ objects 内で表現
されているシリアライズ可能なオブジェクトの数を求め
る。上述したように、この特定のインプリメンテーショ
ンにおいて XSerializable という名称から、プログラ
ム・オブジェクトがシリアル化可能であることが分か
る。その理由は、当プログラム・オブジェクトが、オブ
ジェクトのシリアル化を容易にする機能をインプリメン
トするクラスに属しているからである。オブジェクト・
カウント nObjects はシリアル・ストリーム out に書
き込まれる。手順中の forループは手順 serializeObje
ct を繰り返し呼び出し、XSerializable と名付けられ
た object アレイ内で特定されているプログラム・オブ
ジェクトを1つづつシリアル化する。
グラム・オブジェクトをシリアル化する際に呼び出され
る手順 serializeObjects をインプリメントしたもので
ある。 public void serializeObjects(ObjectOutputStream out, Vector objects) { int nObjects = 0; Object [ ] objArry = new Object[objects.size( )]; objects.copyInto(objArry); for (int i = 0; i < objArry.length; i++) { Object o = objArry[i]; if (o instanceof XSerializable) nObjects++; } out.writeInt(nObjects); // Write the objects for (int i = 0; i < objArry.length; i++) { Object o = objArry[i]; if (o instanceof XSerializable) serializeObject(out, (XSerializable)o); } このインプリメンテーションでは、手順 serializeObje
cts はシリアル化しようとする1つ以上のプログラム・オ
ブジェクトを特定するアレイ objects を入力し、ま
た、シリアル化した表現を書き込む先のシリアル・スト
リームを特定するレファレンス out を入力する。この
手順は変数 nObjects を用いアレイ objects 内で表現
されているシリアライズ可能なオブジェクトの数を求め
る。上述したように、この特定のインプリメンテーショ
ンにおいて XSerializable という名称から、プログラ
ム・オブジェクトがシリアル化可能であることが分か
る。その理由は、当プログラム・オブジェクトが、オブ
ジェクトのシリアル化を容易にする機能をインプリメン
トするクラスに属しているからである。オブジェクト・
カウント nObjects はシリアル・ストリーム out に書
き込まれる。手順中の forループは手順 serializeObje
ct を繰り返し呼び出し、XSerializable と名付けられ
た object アレイ内で特定されているプログラム・オブ
ジェクトを1つづつシリアル化する。
【0048】b)ローレベル手順 以下の断片プログラムは、プログラム・オブジェクトを
シリアル化する際に serializeObjects 手順により呼び
出される手順 serializeObject をインプリメントした
ものである。この手順はプログラム・オブジェクトの特
定の特性をシリアル化するもので、その特性には、その
プログラム・オブジェクトのクラスが導かれるすべての
ベース・クラスの特性も含まれている。特性としては整
数のような1つのエンティティの場合もあり、エンティ
ティのアレイの場合もある。特性自身がシリアル化可能
なプログラム・オブジェクトの場合、またはシリアル化
可能なプログラム・オブジェクトのアレイの場合、これ
らのプログラム・オブジェクトをシリアル化するため1つ
以上の再帰呼び出しが serializeObject に対して行わ
れる。 private void serializeObject(ObjectOutputStream out, XSerializable obj) { String className = obj.getClass( ).getName( ); ObjectDescriptor desc = (ObjectDescriptor)Class.forName(className + "Descr iptor").newInstance( ); Vector temp = new Vector( ); // Go up descripto r class hierarchy temp.addElement(desc.getClass( )); Class c = desc.getClass( ); while ((c = c.getSuperclass( )) != null) temp.addElement(c); out.writeUTF(className); // Write class name Class [ ] descriptors = new Class[temp.size( )]; temp.copyInto(descriptors); for (int i = 0; i < descriptors.length; i++) { // For each descriptor class ... Object descObj = descriptors[i].newInstance( ); ObjectDescriptor descriptor = (ObjectDescriptor)de scObj; Class targetClass = Class.forName(descriptor.getCl assName( )); Object targetObj = targetClass.newInstance( ); if (targetObj instanceof XSerializable) { float version = ((XSerializable)targetObj).get XClassVersion( ); out.writeFloat(version); // Write versi on of object PropertyDescriptor[ ] props = descriptor.getPr operties(version); for (int j = 0; j < props.length; j++) { // Use reflection to read property of object t o serialize String funcName = "get" + Character.toUpperCase(props[j].name.charAt(0)) + props[j].name.substring(1); Class [ ] args = new Class[0]; Method m = targetClass.getMethod(funcName, arg s); if (m != null) { Object [ ] params = new Object[0]; Object retVal = m.invoke(obj, params); if (retVal instanceof XSerializable) // Write property this.serializeObject(out, (XSerializable)retVa l); else if (retVal instanceof XSerializableArray) { XSerializable [ ] data = (XSerializableArray)retVal).getObjects( ); if (data != null) { // Write len gth and objects out.writeInt(data.length); for (int h = 0; h < data.length; h++) this.serializeObject(out, data[h]); } else out.writeInt(0); // Write zero leng th } else if (retVal instanceof ByteArrayWrapper) { byte [ ] data = ((ByteArrayWrapper)retVal).get Bytes( ); if (data != null) { out.writeInt(data.length); // Write length of byte array out.write(data); } else out.writeInt(0); // Write zero len gth } else if (retVal instanceof IntArrayWrapper) { int [ ] data = ((IntArrayWrapper)retVal).getIn ts( ); if (data != null) { // Write length and int array out.writeInt(data.length); for (int h = 0; h < data.length; h++) out.writeInt(data[h]); } else out.writeInt(0); // Write zero leng th } else out.writeObject(retVal); // Write object } } } } } このインプリメンテーションでは、手順 serializeObje
ct はシリアル化可能なオブジェクトに対するリファレ
ンス obj およびシリアル化した表現の書き込み先のシ
リアル・ストリームを特定するレファレンスout を入力
する。この手順では、そのオブジェクトのクラス名が求
められ、その名がシリアル・ストリームout に書き込ま
れる。またこの手順では、クラスのアレイ descriptors
も作られる。アレイの第1の要素は、シリアル化するプ
ログラム・オブジェクトに関係したオブジェクト・ディス
クリプタのクラスである。そのアレイ内で引き続くエン
トリがある場合は、それらは、オブジェクト・ディスク
リプタのクラスが導かれる元になるベース・クラスであ
る。
シリアル化する際に serializeObjects 手順により呼び
出される手順 serializeObject をインプリメントした
ものである。この手順はプログラム・オブジェクトの特
定の特性をシリアル化するもので、その特性には、その
プログラム・オブジェクトのクラスが導かれるすべての
ベース・クラスの特性も含まれている。特性としては整
数のような1つのエンティティの場合もあり、エンティ
ティのアレイの場合もある。特性自身がシリアル化可能
なプログラム・オブジェクトの場合、またはシリアル化
可能なプログラム・オブジェクトのアレイの場合、これ
らのプログラム・オブジェクトをシリアル化するため1つ
以上の再帰呼び出しが serializeObject に対して行わ
れる。 private void serializeObject(ObjectOutputStream out, XSerializable obj) { String className = obj.getClass( ).getName( ); ObjectDescriptor desc = (ObjectDescriptor)Class.forName(className + "Descr iptor").newInstance( ); Vector temp = new Vector( ); // Go up descripto r class hierarchy temp.addElement(desc.getClass( )); Class c = desc.getClass( ); while ((c = c.getSuperclass( )) != null) temp.addElement(c); out.writeUTF(className); // Write class name Class [ ] descriptors = new Class[temp.size( )]; temp.copyInto(descriptors); for (int i = 0; i < descriptors.length; i++) { // For each descriptor class ... Object descObj = descriptors[i].newInstance( ); ObjectDescriptor descriptor = (ObjectDescriptor)de scObj; Class targetClass = Class.forName(descriptor.getCl assName( )); Object targetObj = targetClass.newInstance( ); if (targetObj instanceof XSerializable) { float version = ((XSerializable)targetObj).get XClassVersion( ); out.writeFloat(version); // Write versi on of object PropertyDescriptor[ ] props = descriptor.getPr operties(version); for (int j = 0; j < props.length; j++) { // Use reflection to read property of object t o serialize String funcName = "get" + Character.toUpperCase(props[j].name.charAt(0)) + props[j].name.substring(1); Class [ ] args = new Class[0]; Method m = targetClass.getMethod(funcName, arg s); if (m != null) { Object [ ] params = new Object[0]; Object retVal = m.invoke(obj, params); if (retVal instanceof XSerializable) // Write property this.serializeObject(out, (XSerializable)retVa l); else if (retVal instanceof XSerializableArray) { XSerializable [ ] data = (XSerializableArray)retVal).getObjects( ); if (data != null) { // Write len gth and objects out.writeInt(data.length); for (int h = 0; h < data.length; h++) this.serializeObject(out, data[h]); } else out.writeInt(0); // Write zero leng th } else if (retVal instanceof ByteArrayWrapper) { byte [ ] data = ((ByteArrayWrapper)retVal).get Bytes( ); if (data != null) { out.writeInt(data.length); // Write length of byte array out.write(data); } else out.writeInt(0); // Write zero len gth } else if (retVal instanceof IntArrayWrapper) { int [ ] data = ((IntArrayWrapper)retVal).getIn ts( ); if (data != null) { // Write length and int array out.writeInt(data.length); for (int h = 0; h < data.length; h++) out.writeInt(data[h]); } else out.writeInt(0); // Write zero leng th } else out.writeObject(retVal); // Write object } } } } } このインプリメンテーションでは、手順 serializeObje
ct はシリアル化可能なオブジェクトに対するリファレ
ンス obj およびシリアル化した表現の書き込み先のシ
リアル・ストリームを特定するレファレンスout を入力
する。この手順では、そのオブジェクトのクラス名が求
められ、その名がシリアル・ストリームout に書き込ま
れる。またこの手順では、クラスのアレイ descriptors
も作られる。アレイの第1の要素は、シリアル化するプ
ログラム・オブジェクトに関係したオブジェクト・ディス
クリプタのクラスである。そのアレイ内で引き続くエン
トリがある場合は、それらは、オブジェクト・ディスク
リプタのクラスが導かれる元になるベース・クラスであ
る。
【0049】この手順は、descriptors アレイを通して
繰り返される for ループを用いて続けられる。アレイ
内の各ディスクリプタ・クラスに対し、そのクラスのそ
れぞれのオブジェクト‐ディスクリプタ・オブジェクト
は、 descriptor として具体化され、オブジェクト‐デ
ィスクリプタ・オブジェクトにより記述されるプログラ
ム・オブジェクトのターゲット・クラスを特定するのに用
いられる。例えば、アレイ descriptors から具体化さ
れる第1のオブジェクト‐ディスクリプタ・オブジェクト
のターゲット・クラスは、シリアル化されるプログラム・
オブジェクト obj のクラスである。このターゲット・ク
ラスのオブジェクトが XSerializableと見なされる場
合、この手順は、ターゲット・クラスに対するバージョ
ンの IDを求め、そのバージョンID をシリアル out に
書き込むことにより続けられる。次ぎに、オブジェクト
‐ディスクリプタ・オブジェクトのメソッド getPropert
ies を起動し、各要素がシリアル化する特性を記述して
いるアレイ props が求められる。この getProperties
のメソッドはターゲット・クラスのバージョンの関数で
あり、このメソッドをインプリメントしている手順はそ
れぞれのターゲット・クラスで変化している場合がある
ので、シリアル化する特性を特定するプロセスはターゲ
ット・クラスとそのバージョンの両方の関数であると考
えられる。
繰り返される for ループを用いて続けられる。アレイ
内の各ディスクリプタ・クラスに対し、そのクラスのそ
れぞれのオブジェクト‐ディスクリプタ・オブジェクト
は、 descriptor として具体化され、オブジェクト‐デ
ィスクリプタ・オブジェクトにより記述されるプログラ
ム・オブジェクトのターゲット・クラスを特定するのに用
いられる。例えば、アレイ descriptors から具体化さ
れる第1のオブジェクト‐ディスクリプタ・オブジェクト
のターゲット・クラスは、シリアル化されるプログラム・
オブジェクト obj のクラスである。このターゲット・ク
ラスのオブジェクトが XSerializableと見なされる場
合、この手順は、ターゲット・クラスに対するバージョ
ンの IDを求め、そのバージョンID をシリアル out に
書き込むことにより続けられる。次ぎに、オブジェクト
‐ディスクリプタ・オブジェクトのメソッド getPropert
ies を起動し、各要素がシリアル化する特性を記述して
いるアレイ props が求められる。この getProperties
のメソッドはターゲット・クラスのバージョンの関数で
あり、このメソッドをインプリメントしている手順はそ
れぞれのターゲット・クラスで変化している場合がある
ので、シリアル化する特性を特定するプロセスはターゲ
ット・クラスとそのバージョンの両方の関数であると考
えられる。
【0050】この手順は、props アレイを通して繰り返
す for ループを用いて続けられる。アレイ中の特性デ
ィスクリプタのそれぞれに対し、Java のリフレクショ
ン機構を用いてそれに対応する特性自身が求められる。
その特性自身が XSerializable と名付けられていれ
ば、このオブジェクトをシリアル化するため再帰呼び出
しが手順 serializeObject に対して行われる。その特
性がXSerializable と名付けられた要素からなるアレイ
の場合は、それら要素のためにアレイ data が構築さ
れ、そのアレイの長さはシリアル・ストリーム out に書
き込まれ、アレイ中の各要素に対し再帰呼び出しがseri
alizeObject に対して行われる。特性がバイト・アレイ
または整数アレイの場合、アレイの長さおよびアレイ中
の各要素の表現がシリアル・ストリーム out に書き込ま
れる。それ以外の場合は、特性自身の表現がシリアル・
ストリーム out に書き込まれる。
す for ループを用いて続けられる。アレイ中の特性デ
ィスクリプタのそれぞれに対し、Java のリフレクショ
ン機構を用いてそれに対応する特性自身が求められる。
その特性自身が XSerializable と名付けられていれ
ば、このオブジェクトをシリアル化するため再帰呼び出
しが手順 serializeObject に対して行われる。その特
性がXSerializable と名付けられた要素からなるアレイ
の場合は、それら要素のためにアレイ data が構築さ
れ、そのアレイの長さはシリアル・ストリーム out に書
き込まれ、アレイ中の各要素に対し再帰呼び出しがseri
alizeObject に対して行われる。特性がバイト・アレイ
または整数アレイの場合、アレイの長さおよびアレイ中
の各要素の表現がシリアル・ストリーム out に書き込ま
れる。それ以外の場合は、特性自身の表現がシリアル・
ストリーム out に書き込まれる。
【0051】2.デシリアライゼーション a)ハイレベル手順 以下の断片プログラムは、1つ以上のプログラム・オブジ
ェクトをデシリアル化する際に呼び出される手順deseri
alizeObjects をインプリメントしたものである。 public Vector deserializeObjects(ObjectInputStream in) { Vector objects = new Vector(); int nObjects = in.readInt(); // Read no. of seria lized objects for (int i = 0; i < nObjects; i++) { // Read e ach object Object o = deserializeObject(in); if (o != null) objects.addElement(o); } } このインプリメンテーションにおいては、手順 deseria
lizeObjects は、デシリアライズしようとする1つ以上
のプログラム・オブジェクトのシリアル化した表現が含
まれたシリアル・ストリームを特定するリファレンス in
を入力する。シリアル・ストリーム内で表わされている
オブジェクトの数が変数 nObjects から読み込まれる。
手順内のfor ループが手順 deserializeObject を繰り
返し呼び出し、シリアル・ストリーム内で表わされてい
るプログラム・オブジェクト1つ1つをデシリアル化す
る。
ェクトをデシリアル化する際に呼び出される手順deseri
alizeObjects をインプリメントしたものである。 public Vector deserializeObjects(ObjectInputStream in) { Vector objects = new Vector(); int nObjects = in.readInt(); // Read no. of seria lized objects for (int i = 0; i < nObjects; i++) { // Read e ach object Object o = deserializeObject(in); if (o != null) objects.addElement(o); } } このインプリメンテーションにおいては、手順 deseria
lizeObjects は、デシリアライズしようとする1つ以上
のプログラム・オブジェクトのシリアル化した表現が含
まれたシリアル・ストリームを特定するリファレンス in
を入力する。シリアル・ストリーム内で表わされている
オブジェクトの数が変数 nObjects から読み込まれる。
手順内のfor ループが手順 deserializeObject を繰り
返し呼び出し、シリアル・ストリーム内で表わされてい
るプログラム・オブジェクト1つ1つをデシリアル化す
る。
【0052】b)ローレベル手順 以下の断片プログラムは、プログラム・オブジェクトを
デシリアル化する際にdeserializeObjects 手順により
呼び出される手順 desdeerializeObject をインプリメ
ントしたものである。この手順はプログラム・オブジェ
クトの特定の特性をデシリアル化するもので、その特性
には、そのプログラム・オブジェクトのクラスが導かれ
るすべてのベース・クラスの特性も含まれている。特性
としては整数のような1つのエンティティの場合もあ
り、エンティティのアレイの場合もある。特性自身がプ
ログラム・オブジェクトの場合、またはプログラム・オブ
ジェクトのアレイの場合、これらのプログラム・オブジ
ェクトをデシリアル化するため1つ以上の再帰呼び出し
が deserializeObjectに対して行われる。 private Object deserializeObject(ObjectInputStream in) { Object obj = null; String className = in.readUTF(); // Read object class nam e // Get object descriptor for class ObjectDescriptor desc = (ObjectDescriptor)Class.forName(className + "Descr iptor").newInstance(); Class objClass = Class.forName(desc.getClassName()); obj = objClass.newInstance(); // Go up descriptor class hierarchy Vector temp = new Vector(); temp.addElement(desc.getClass()); Class c = desc.getClass(); while ((c = c.getSuperclass()) != null) temp.addElement(c); Class [] descriptors = new Class[temp.size()]; temp.copyInto(descriptors); for (int i = 0; i < descriptors.length; i++) { // For each descriptor ... Class d = descriptors[i]; Object theObj = d.newInstance(); float version = in.readFloat(); // Read version of object ObjectDescriptor objDesc = (ObjectDescriptor)theOb j; PropertyDescriptor[] props = objDesc.getProperties (version); Class [] args = new Class[1]; for (int j = 0; j < props.length; j++) { Object propVal = null; if (isXSerializable(props[j].type)) propVal = deserializeObject(in); else if (props[j].type.getName() == "XSerializ ableArray") { int length = in.readInt(); // Read length of b yte array XSerializable[] data = new XSerializable[lengt h]; for (int h = 0; h < length; h++) data[h] = (XSerializable)deserializeObject(in) ; propVal = new XSerializableArray(data); } else if (props[j].type.getName() == "ByteArray Wrapper") { int length = in.readInt(); // Read length of byte array byte[] data = new byte[length]; in.readFully(data, 0, length); propVal = new ByteArrayWrapper(data); } else if (props[j].type.getName() == "IntArrayW rapper") { int length = in.readInt(); // Read length of b yte array int[] data = new int[length]; for (int h = 0; h < length; h++) data[h] = in.readInt(); propVal = new IntArrayWrapper(data); } else propVal = in.readObject(); args[0] = props[j].type; // Invoke meth od to set property String funcName = "set" + Character.toUpperCase(props[j].name.charAt(0)) + props[j].name.substring(1); Method m = objClass.getMethod(funcName, args); if (m != null) { Object [] params = new Object[1]; params[0] = propVal; m.invoke(obj, params); } } } return obj; } このインプリメンテーションでは、手順 deserializeOb
jectは、プログラム・オブジェクトのシリアル化した表
現をデシリアル化しようとするシリアル・ストリームを
特定するレファレンス in を入力する。手順は、シリア
ル・ストリームin からそのオブジェクトに対するクラス
名を読み込む。この手順では、オブジェクト・ディスク
リプタのクラスのアレイ descriptors も作られる。ア
レイの第1の要素は、シリアル・ストリームから読み込ま
れたクラスに関係したオブジェクト・ディスクリプタの
クラスである。そのアレイ内で引き続くエントリがある
場合は、それらは、オブジェクト・ディスクリプタのク
ラスが導かれる元になるベース・クラスである。
デシリアル化する際にdeserializeObjects 手順により
呼び出される手順 desdeerializeObject をインプリメ
ントしたものである。この手順はプログラム・オブジェ
クトの特定の特性をデシリアル化するもので、その特性
には、そのプログラム・オブジェクトのクラスが導かれ
るすべてのベース・クラスの特性も含まれている。特性
としては整数のような1つのエンティティの場合もあ
り、エンティティのアレイの場合もある。特性自身がプ
ログラム・オブジェクトの場合、またはプログラム・オブ
ジェクトのアレイの場合、これらのプログラム・オブジ
ェクトをデシリアル化するため1つ以上の再帰呼び出し
が deserializeObjectに対して行われる。 private Object deserializeObject(ObjectInputStream in) { Object obj = null; String className = in.readUTF(); // Read object class nam e // Get object descriptor for class ObjectDescriptor desc = (ObjectDescriptor)Class.forName(className + "Descr iptor").newInstance(); Class objClass = Class.forName(desc.getClassName()); obj = objClass.newInstance(); // Go up descriptor class hierarchy Vector temp = new Vector(); temp.addElement(desc.getClass()); Class c = desc.getClass(); while ((c = c.getSuperclass()) != null) temp.addElement(c); Class [] descriptors = new Class[temp.size()]; temp.copyInto(descriptors); for (int i = 0; i < descriptors.length; i++) { // For each descriptor ... Class d = descriptors[i]; Object theObj = d.newInstance(); float version = in.readFloat(); // Read version of object ObjectDescriptor objDesc = (ObjectDescriptor)theOb j; PropertyDescriptor[] props = objDesc.getProperties (version); Class [] args = new Class[1]; for (int j = 0; j < props.length; j++) { Object propVal = null; if (isXSerializable(props[j].type)) propVal = deserializeObject(in); else if (props[j].type.getName() == "XSerializ ableArray") { int length = in.readInt(); // Read length of b yte array XSerializable[] data = new XSerializable[lengt h]; for (int h = 0; h < length; h++) data[h] = (XSerializable)deserializeObject(in) ; propVal = new XSerializableArray(data); } else if (props[j].type.getName() == "ByteArray Wrapper") { int length = in.readInt(); // Read length of byte array byte[] data = new byte[length]; in.readFully(data, 0, length); propVal = new ByteArrayWrapper(data); } else if (props[j].type.getName() == "IntArrayW rapper") { int length = in.readInt(); // Read length of b yte array int[] data = new int[length]; for (int h = 0; h < length; h++) data[h] = in.readInt(); propVal = new IntArrayWrapper(data); } else propVal = in.readObject(); args[0] = props[j].type; // Invoke meth od to set property String funcName = "set" + Character.toUpperCase(props[j].name.charAt(0)) + props[j].name.substring(1); Method m = objClass.getMethod(funcName, args); if (m != null) { Object [] params = new Object[1]; params[0] = propVal; m.invoke(obj, params); } } } return obj; } このインプリメンテーションでは、手順 deserializeOb
jectは、プログラム・オブジェクトのシリアル化した表
現をデシリアル化しようとするシリアル・ストリームを
特定するレファレンス in を入力する。手順は、シリア
ル・ストリームin からそのオブジェクトに対するクラス
名を読み込む。この手順では、オブジェクト・ディスク
リプタのクラスのアレイ descriptors も作られる。ア
レイの第1の要素は、シリアル・ストリームから読み込ま
れたクラスに関係したオブジェクト・ディスクリプタの
クラスである。そのアレイ内で引き続くエントリがある
場合は、それらは、オブジェクト・ディスクリプタのク
ラスが導かれる元になるベース・クラスである。
【0053】この手順は、descriptors アレイを通して
繰り返す for ループを用いて続けられる。アレイ内の
各ディスクリプタ・クラスに対し、それぞれのバージョ
ン IDはシリアル・ストリームin から読み込まれ、その
クラスのそれぞれのオブジェクト‐ディスクリプタ・オ
ブジェクトは objDescとして具体化され、デシリアル化
しようとするそれぞれのターゲット・プログラム・オブジ
ェクトは theObj として具体化される。オブジェクト‐
ディスクリプタ・オブジェクト objDesc のメソッド get
Propertiesが起動され、シリアル・ストリーム中で表現
されデシリアル化されようとする特性を各要素が記述し
ているアレイ props が求められる。このメソッドはシ
リアル・ストリームin から読み込まれるそれぞれのバー
ジョン ID の関数である。前述したように、デシリアル
化しようとする特性を決定するプロセスはターゲット・
オブジェクト・クラスとそのバージョンの両方の関数で
あると考えられる。
繰り返す for ループを用いて続けられる。アレイ内の
各ディスクリプタ・クラスに対し、それぞれのバージョ
ン IDはシリアル・ストリームin から読み込まれ、その
クラスのそれぞれのオブジェクト‐ディスクリプタ・オ
ブジェクトは objDescとして具体化され、デシリアル化
しようとするそれぞれのターゲット・プログラム・オブジ
ェクトは theObj として具体化される。オブジェクト‐
ディスクリプタ・オブジェクト objDesc のメソッド get
Propertiesが起動され、シリアル・ストリーム中で表現
されデシリアル化されようとする特性を各要素が記述し
ているアレイ props が求められる。このメソッドはシ
リアル・ストリームin から読み込まれるそれぞれのバー
ジョン ID の関数である。前述したように、デシリアル
化しようとする特性を決定するプロセスはターゲット・
オブジェクト・クラスとそのバージョンの両方の関数で
あると考えられる。
【0054】この手順は、props アレイを通して繰り返
す for ループを用いて続けられ、それぞれの特性をデ
シリアル化する。その特性自身が XSerializable と名
付けられていれば、このオブジェクトをデシリアル化す
るため再帰呼び出しが手順 deserializeObject に対し
て行われる。その特性がXSerializable と名付けられた
要素からなるアレイの場合は、そのアレイの長さがシリ
アル・ストリーム inから読み込まれ、アレイ data が構
築され、各特性をデシリアル化しアレイ data のそれぞ
れの要素にするため、再帰呼び出しが deserializeObje
ct に対して行われる。特性がバイト・アレイまたは整数
アレイの場合、アレイの長さがシリアル・ストリーム in
から読み込まれ、アレイ data が構築され、各特性が
シリアル・ストリームから読み込まれアレイ data のそ
れぞれの要素中に配置される。今まで説明してきた特性
の型各々に対し、シリアル・ストリーム in から得られ
る特性の表現は propVal と名付けられたオブジェクト
に配置される。特性の型が前述したものに当てはまらな
い場合は、特性の値がシリアル・ストリーム out から読
み込まれ、直接変数 propVal に配置される。次ぎに、
デシリアル化されているプログラム・オブジェクトに対
して適切なメソッドが起動され、propValで得られる表
現を基にしてプログラム・オブジェクト特性が確立され
る。
す for ループを用いて続けられ、それぞれの特性をデ
シリアル化する。その特性自身が XSerializable と名
付けられていれば、このオブジェクトをデシリアル化す
るため再帰呼び出しが手順 deserializeObject に対し
て行われる。その特性がXSerializable と名付けられた
要素からなるアレイの場合は、そのアレイの長さがシリ
アル・ストリーム inから読み込まれ、アレイ data が構
築され、各特性をデシリアル化しアレイ data のそれぞ
れの要素にするため、再帰呼び出しが deserializeObje
ct に対して行われる。特性がバイト・アレイまたは整数
アレイの場合、アレイの長さがシリアル・ストリーム in
から読み込まれ、アレイ data が構築され、各特性が
シリアル・ストリームから読み込まれアレイ data のそ
れぞれの要素中に配置される。今まで説明してきた特性
の型各々に対し、シリアル・ストリーム in から得られ
る特性の表現は propVal と名付けられたオブジェクト
に配置される。特性の型が前述したものに当てはまらな
い場合は、特性の値がシリアル・ストリーム out から読
み込まれ、直接変数 propVal に配置される。次ぎに、
デシリアル化されているプログラム・オブジェクトに対
して適切なメソッドが起動され、propValで得られる表
現を基にしてプログラム・オブジェクト特性が確立され
る。
【0055】3.他の考慮すべき点 a)Xserializable のテスト 以下のプログラム断片は、特定のクラスが XSerializab
le と見なされるかどうかを判定するため、上述したプ
ログラム断片が用いる手順 isXSerializableをインプリ
メントしたものである。 private boolean isXSerializable(Class c) { Class [] interfaces = c.getInterfaces(); for (int i = 0; i < interfaces.length; i++) { if (interfaces[i].getName() == "XSerializable") return true; } Class superClass = c; while ((superClass = superClass.getSuperclass()) != null) { interfaces = superClass.getInterfaces(); for (int i = 0; i < interfaces.length; i++) { if (interfaces[i].getName() == "XSerializable" ) return true; } } return false; } このインプリメンテーションでは、手順 isXSerializab
le はクラス c を入力し、そのクラスの具体化であるオ
ブジェクトが XSerializable であるかどうかを判定す
る。クラス c 自身がそこに示すような特定の名称を持
つインタフェースをインプリメントする場合、そのクラ
スは XSerializable と見なされる。そうでない場合、
クラス c が導かれる元のベース・クラスの各々につい
て、その内のどのベース・クラスもこの同じインタフェ
ースをインプリメントしているかどうかを調べる。どの
ベース・クラスもこのインタフェースをインプリメント
している場合、クラス cは XSerializable と見なされ
る。そうでない場合、クラスcは XSerializable と見な
されない。
le と見なされるかどうかを判定するため、上述したプ
ログラム断片が用いる手順 isXSerializableをインプリ
メントしたものである。 private boolean isXSerializable(Class c) { Class [] interfaces = c.getInterfaces(); for (int i = 0; i < interfaces.length; i++) { if (interfaces[i].getName() == "XSerializable") return true; } Class superClass = c; while ((superClass = superClass.getSuperclass()) != null) { interfaces = superClass.getInterfaces(); for (int i = 0; i < interfaces.length; i++) { if (interfaces[i].getName() == "XSerializable" ) return true; } } return false; } このインプリメンテーションでは、手順 isXSerializab
le はクラス c を入力し、そのクラスの具体化であるオ
ブジェクトが XSerializable であるかどうかを判定す
る。クラス c 自身がそこに示すような特定の名称を持
つインタフェースをインプリメントする場合、そのクラ
スは XSerializable と見なされる。そうでない場合、
クラス c が導かれる元のベース・クラスの各々につい
て、その内のどのベース・クラスもこの同じインタフェ
ースをインプリメントしているかどうかを調べる。どの
ベース・クラスもこのインタフェースをインプリメント
している場合、クラス cは XSerializable と見なされ
る。そうでない場合、クラスcは XSerializable と見な
されない。
【0056】b)シリアライゼーション・キット 上述した断片プログラムおよび必要とするすべての特性
は、ここでキットと呼ばれる特殊なクラスの方法として
インプリメントすることもできる。以下の断片プログラ
ムでこれを行う方法を示す。 public class XSerializationKit { // Class that (de)serializes serializable objects public XSerializationKit() { } // Properties and methods of the kit ... } c)シリアル化可能なプログラム・オブジェクト・クラス 以下の断片プログラムは、上述したインプリメンテーシ
ョンに従って XSerializable クラスを定義する方法を
示している。第1の例はバージョン 1.0 によるクラスの
定義である。 public class Widget implements XSerializable { private static Float _ver = 1.0f; private String _name = ""; public Float getXClassVersion() { return _ver; } public void setName(String name) { _name = name; } } 次の例はバージョン 1.1 によるクラスの定義である。 public class Widget implements XSerializable { private static Float _ver = 1.1f; private String _name = ""; private Color _color = ""; public Float getXClassVersion() { return _ver; } public void setName(String name) { _name = name; } public void setColor(Color color) { _color = color; } } これらのインプリメンテーションにおいて、特性 _name
および _color、ならびにメソッド setName および se
tColor は任意である。これらのメソッドは以下に説明
する例で用いられる。
は、ここでキットと呼ばれる特殊なクラスの方法として
インプリメントすることもできる。以下の断片プログラ
ムでこれを行う方法を示す。 public class XSerializationKit { // Class that (de)serializes serializable objects public XSerializationKit() { } // Properties and methods of the kit ... } c)シリアル化可能なプログラム・オブジェクト・クラス 以下の断片プログラムは、上述したインプリメンテーシ
ョンに従って XSerializable クラスを定義する方法を
示している。第1の例はバージョン 1.0 によるクラスの
定義である。 public class Widget implements XSerializable { private static Float _ver = 1.0f; private String _name = ""; public Float getXClassVersion() { return _ver; } public void setName(String name) { _name = name; } } 次の例はバージョン 1.1 によるクラスの定義である。 public class Widget implements XSerializable { private static Float _ver = 1.1f; private String _name = ""; private Color _color = ""; public Float getXClassVersion() { return _ver; } public void setName(String name) { _name = name; } public void setColor(Color color) { _color = color; } } これらのインプリメンテーションにおいて、特性 _name
および _color、ならびにメソッド setName および se
tColor は任意である。これらのメソッドは以下に説明
する例で用いられる。
【0057】XSerializable クラスは他の XSerializab
le ベース・クラスを拡張する場合もある。それはまた X
Serializable クラスのインスタンスに関係する特性を
含むすなわち内蔵する場合もある。
le ベース・クラスを拡張する場合もある。それはまた X
Serializable クラスのインスタンスに関係する特性を
含むすなわち内蔵する場合もある。
【0058】"Byte" および "Integer" といった基本的
な型の変数アレイは種々の方法で XSerializable 構造
としてインプリメントすることができる。上述したイン
プリメンテーションと整合を持つインプリメンテーショ
ンの例を以下の断片プログラムで示す。この断片はバイ
トと整数に対して 2 つのラッパーを定義している。 public class ArrayWrapper implements XSerializable { private static Float _ver = 1.0f; Byte byteArray; Int [] intArray; public ArrayWrapper { } public Float getXClassVersion() { return _ver; } public void setByteArray(ByteArrayWrapper wrapper) { byteArray = wrapper.getBytes(); } public ByteArrayWrapper getByteArray() { return new ByteArrayWrapper(byteArray); } public void setIntArray(IntArrayWrapper wrapper) { intArray = wrapper.getInts(); } public IntArrayWrapper getIntArray() { return new IntArrayWrapper(intArray); } } d)オブジェクト‐ディスクリプタ・クラス 以下の断片プログラムは、上述したインプリメンテーシ
ョンに従ってオブジェクト‐ディスクリプタ・クラスを
定義する方法を示している。 public class WidgetDescriptor implements ObjectDescriptor { private String targetClass = "X.Widget"; public WidgetDescriptor () { } public String getClassName() { return targetClass; } public PropertyDescriptor [] getProperties(Float version) { PropertyDescriptor [] array = null; if (version == 1.0f) { array = new PropertyDescriptor[1]; array[0] = new PropertyDescriptor("name", java .lang.String.TYPE); } elseif (version == 1.1f) } array = new PropertyDescriptor[2]; array[0] = new PropertyDescriptor("name", java .lang.String.TYPE); array[1] = new PropertyDescriptor("color", jav a.awt.Color.class); } return array; } 以下の断片プログラムは、上述した ArrayWrapper クラ
スに対しオブジェクト‐ディスクリプタ・クラスを定義
する方法を示している。 public class ArrayWrapperDescriptor implements ObjectDescriptor { private String targetClass = "ArrayWrapper"; public ArrayWrapperDescriptor () { } public String getClassName() { return targetClass; } public PropertyDescriptor [] getProperties(Float version) { PropertyDescriptor [] array = null; if (version == 1.0f) { array = new PropertyDescriptor[2]; array[0] = new PropertyDescriptor("ByteArray", Class.forName("ByteArrayWrapper")); array[1] = new PropertyDescriptor("IntArray", Class.forName("IntArrayWrapper")); } return array; } e)アプリケーション例 以下の断片プログラムで、アプリケーション・プログラ
ムが上述したシリアライゼーション・キットを用い1つ以
上のプログラム・オブジェクトをどのようにしてシリア
ル化するかを示す。この例では、Widget クラスのバー
ジョン 1.0 の2つのプログラム・オブジェクト・インスタ
ンスが test.ser ファイルにシリアル化される。 public class Example1 { public static void main(String [] args) { Widget widObj1 = new Widget(); Widget widObj2 = new Widget(); widObj1.setName("test1"); widObj2.setName("test2"); Vector vecObj = new Vector(); vecObj.addElement(widObj1); vecObj.addElement(widObj2); XSerializationKit kit = new XSerializationKit(); ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("t est.ser"); kit.serializeObjects(out, vecObj); // S erialize the objects out.close(); } } 以下の断片プログラムで、アプリケーション・プログラ
ムが上述したシリアライゼーション・キットを用い1つ以
上のプログラム・オブジェクトをどのようにしてデシリ
アル化するかを示す。この例では、Widget クラスの2つ
のインスタンスが上述した Example1 アプリケーション
で作られた test.ser ファイルからデシリアル化され
る。この Example2 アプリケーションは Widget クラス
のバージョン 1.1 に準拠するプログラム・オブジェクト
を形成するが、これはこの断片プログラムの最後にあ
り、setColorメソッドを起動しプログラム・オブジェク
ト widObj1 のカラー特性を設定する行によって示され
ている。上述のように、この特性は Widget クラスの定
義、バージョン 1.1 に追加されたものである。 public class Example2 { public static void main(String [] args) { XSerializationKit kit = new XSerializationKit(); ObjectInputStream in = new ObjectInputStream(new FileInputStream("tes t.ser"); Vector vecObj = (Vector)kit.deserializeObjects(in) ; in.close(); Widget widObj1 = (Widget)vecObj[0]; Widget widObj2 = (Widget)vecObj[1]; widObj1.setColor(Color.red); } }
な型の変数アレイは種々の方法で XSerializable 構造
としてインプリメントすることができる。上述したイン
プリメンテーションと整合を持つインプリメンテーショ
ンの例を以下の断片プログラムで示す。この断片はバイ
トと整数に対して 2 つのラッパーを定義している。 public class ArrayWrapper implements XSerializable { private static Float _ver = 1.0f; Byte byteArray; Int [] intArray; public ArrayWrapper { } public Float getXClassVersion() { return _ver; } public void setByteArray(ByteArrayWrapper wrapper) { byteArray = wrapper.getBytes(); } public ByteArrayWrapper getByteArray() { return new ByteArrayWrapper(byteArray); } public void setIntArray(IntArrayWrapper wrapper) { intArray = wrapper.getInts(); } public IntArrayWrapper getIntArray() { return new IntArrayWrapper(intArray); } } d)オブジェクト‐ディスクリプタ・クラス 以下の断片プログラムは、上述したインプリメンテーシ
ョンに従ってオブジェクト‐ディスクリプタ・クラスを
定義する方法を示している。 public class WidgetDescriptor implements ObjectDescriptor { private String targetClass = "X.Widget"; public WidgetDescriptor () { } public String getClassName() { return targetClass; } public PropertyDescriptor [] getProperties(Float version) { PropertyDescriptor [] array = null; if (version == 1.0f) { array = new PropertyDescriptor[1]; array[0] = new PropertyDescriptor("name", java .lang.String.TYPE); } elseif (version == 1.1f) } array = new PropertyDescriptor[2]; array[0] = new PropertyDescriptor("name", java .lang.String.TYPE); array[1] = new PropertyDescriptor("color", jav a.awt.Color.class); } return array; } 以下の断片プログラムは、上述した ArrayWrapper クラ
スに対しオブジェクト‐ディスクリプタ・クラスを定義
する方法を示している。 public class ArrayWrapperDescriptor implements ObjectDescriptor { private String targetClass = "ArrayWrapper"; public ArrayWrapperDescriptor () { } public String getClassName() { return targetClass; } public PropertyDescriptor [] getProperties(Float version) { PropertyDescriptor [] array = null; if (version == 1.0f) { array = new PropertyDescriptor[2]; array[0] = new PropertyDescriptor("ByteArray", Class.forName("ByteArrayWrapper")); array[1] = new PropertyDescriptor("IntArray", Class.forName("IntArrayWrapper")); } return array; } e)アプリケーション例 以下の断片プログラムで、アプリケーション・プログラ
ムが上述したシリアライゼーション・キットを用い1つ以
上のプログラム・オブジェクトをどのようにしてシリア
ル化するかを示す。この例では、Widget クラスのバー
ジョン 1.0 の2つのプログラム・オブジェクト・インスタ
ンスが test.ser ファイルにシリアル化される。 public class Example1 { public static void main(String [] args) { Widget widObj1 = new Widget(); Widget widObj2 = new Widget(); widObj1.setName("test1"); widObj2.setName("test2"); Vector vecObj = new Vector(); vecObj.addElement(widObj1); vecObj.addElement(widObj2); XSerializationKit kit = new XSerializationKit(); ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("t est.ser"); kit.serializeObjects(out, vecObj); // S erialize the objects out.close(); } } 以下の断片プログラムで、アプリケーション・プログラ
ムが上述したシリアライゼーション・キットを用い1つ以
上のプログラム・オブジェクトをどのようにしてデシリ
アル化するかを示す。この例では、Widget クラスの2つ
のインスタンスが上述した Example1 アプリケーション
で作られた test.ser ファイルからデシリアル化され
る。この Example2 アプリケーションは Widget クラス
のバージョン 1.1 に準拠するプログラム・オブジェクト
を形成するが、これはこの断片プログラムの最後にあ
り、setColorメソッドを起動しプログラム・オブジェク
ト widObj1 のカラー特性を設定する行によって示され
ている。上述のように、この特性は Widget クラスの定
義、バージョン 1.1 に追加されたものである。 public class Example2 { public static void main(String [] args) { XSerializationKit kit = new XSerializationKit(); ObjectInputStream in = new ObjectInputStream(new FileInputStream("tes t.ser"); Vector vecObj = (Vector)kit.deserializeObjects(in) ; in.close(); Widget widObj1 = (Widget)vecObj[0]; Widget widObj2 = (Widget)vecObj[1]; widObj1.setColor(Color.red); } }
【図1】 図1は、本発明の種々の側面を実行するのに用
いることのできるコンピュータ・システムのブロック図
である。
いることのできるコンピュータ・システムのブロック図
である。
【図2】 図2は、いくつかのコンピュータ・システムが
ネットワークのような通信施設により接続された状態を
示すブロック図である。
ネットワークのような通信施設により接続された状態を
示すブロック図である。
【図3】 図3は、プログラム・オブジェクトのバージョ
ンに従ってシリアル情報を生成する基本プロセスのフロ
ーチャートを示す。
ンに従ってシリアル情報を生成する基本プロセスのフロ
ーチャートを示す。
【図4】 図4は、図3に示された基本プロセスの1つの
インプリメンテーションのフローチャートを示す。
インプリメンテーションのフローチャートを示す。
【図5】 図5は、プログラム・オブジェクトのバージョ
ンに従ってシリアル情報からプログラム・オブジェクト
を生成する基本プロセスのフローチャートを示す。
ンに従ってシリアル情報からプログラム・オブジェクト
を生成する基本プロセスのフローチャートを示す。
【図6】 図6は、図5に示された基本プロセスの1つ
のインプリメンテーションのフローチャートを示す。
のインプリメンテーションのフローチャートを示す。
【図7】 図7は、1つ以上のプログラム・オブジェクト
を表現するシリアル情報を生成するのに用いる1つのプ
ロセスのブロック図である。
を表現するシリアル情報を生成するのに用いる1つのプ
ロセスのブロック図である。
【図8】 図8は、1つ以上のプログラム・オブジェク
トを表現するシリアル情報を読み込み、処理するのに用
いる1つのプロセスのフローチャートである。
トを表現するシリアル情報を読み込み、処理するのに用
いる1つのプロセスのフローチャートである。
【図9】 図9は、プログラム・オブジェクト・クラスが
シリアル化可能と見なされる1つ以上のベース・クラスか
ら導かれるかどうかを判定するのに用いるプロセスのフ
ローチャートを示す。
シリアル化可能と見なされる1つ以上のベース・クラスか
ら導かれるかどうかを判定するのに用いるプロセスのフ
ローチャートを示す。
【図10】 図10は、本発明のシリアライゼーション・プ
ロセスにより生成することができるシリアル情報ストリ
ームの内容を示す模式図である。
ロセスにより生成することができるシリアル情報ストリ
ームの内容を示す模式図である。
【図11】 図11は、本発明の1つの実施例による、導か
れたプログラム・オブジェクト・クラスのハイエラキとそ
れに関連したオブジェクト‐ディスクリプタ・クラスの
ハイエラキとの間の関係を示す図である。
れたプログラム・オブジェクト・クラスのハイエラキとそ
れに関連したオブジェクト‐ディスクリプタ・クラスの
ハイエラキとの間の関係を示す図である。
Claims (54)
- 【請求項1】 オブジェクト・クラスの具体化であるプ
ログラム・オブジェクトのシリアライゼーション方法に
おいて、 前記プログラム・オブジェクトのバージョン ID を求め
るステップと、および前記オブジェクト・クラスと前記
バージョン ID の関数として決定されるプログラム・オ
ブジェクトの表現を伝えるシリアル化情報を生成するス
テップと、 を有することを特徴とするプログラム・オブジェクトの
シリアライゼーション方法。 - 【請求項2】 前記プログラム・オブジェクトの表現
は、 シリアル化しようとするプログラム・オブジェクトの1つ
以上の特性を特定するステップと、ここでこの特性は前
記オブジェクト・クラスと前記プログラム・オブジェクト
のバージョン ID によって特定されるものであり、 シリアル化しようとするプログラム・オブジェクトの各
々の特性の値を確認するステップと、および、 前記オブジェクト・クラスの名称、前記プログラム・オブ
ジェクトのバージョンID、およびシリアル化しようとす
るそれぞれの特性の値を含むように前記オブジェクトの
表現を生成するステップと、 によって決定されることを特徴とする請求項1に記載の
プログラム・オブジェクトのシリアライゼーション方
法。 - 【請求項3】 シリアル化しようとするプログラム・オ
ブジェクトの1つ以上の特性は、前記オブジェクト・クラ
スの具体化をどのようにしてシリアル化するかを記述す
るオブジェクト‐ディスクリプタ・インタフェース内の
手順を起動することによって特定されるものであり、こ
こでその手順は前記プログラム・オブジェクトのバージ
ョン ID に依存するものであることを特徴とする請求項
2に記載のプログラム・オブジェクトのシリアライゼー
ション方法。 - 【請求項4】 前記オブジェクト‐ディスクリプタ・イ
ンタフェースは、前記オブジェクト・クラスの名称から
導かれる名称を有することを特徴とする請求項3に記載
のプログラム・オブジェクトのシリアライゼーション方
法。 - 【請求項5】 前記プログラム・オブジェクトおよび前
記オブジェクト・クラスは、Java プログラミング言語の
JavaBean 仕様に準拠するものであることを特徴とする
請求項3に記載のプログラム・オブジェクトのシリアラ
イゼーション方法。 - 【請求項6】 シリアル化しようとするプログラム・オ
ブジェクトの1つ以上の特性は、前記オブジェクト・クラ
スと前記バージョン ID に従って変化する特性名のリス
トを返す手順を起動することによって特定されるもので
あることを特徴とする請求項2に記載のプログラム・オ
ブジェクトのシリアライゼーション方法。 - 【請求項7】 前記手順はプログラム・オブジェクトの
メソッドであり、前記オブジェクトは、シリアル化しよ
うとするプログラム・オブジェクトのシリアル化可能性
を定義するオブジェクト‐ディスクリプタ・クラスのイ
ンスタンスであることを特徴とする請求項6に記載のプ
ログラム・オブジェクトのシリアライゼーション方法。 - 【請求項8】 前記バージョン ID は、前記プログラム
・オブジェクトのメソッドを起動することによって求め
られるものであり、 シリアル化しようとするプログラム・オブジェクトの1つ
以上の特性は、前記オブジェクト・クラスと前記プログ
ラム・オブジェクトのバージョン ID の関数であるオブ
ジェクト‐ディスクリプタ・オブジェクトのメソッドを
起動することにより特定されるものであり、 前記シリアル情報は、アウトプット・ストリーム・オブジ
ェクトのメソッドを起動することにより生成されるもの
である、ことを特徴とする請求項2に記載のプログラム
・オブジェクトのシリアライゼーション方法。 - 【請求項9】 オブジェクト・クラスの具体化であるプ
ログラム・オブジェクトのシリアライゼーション装置に
おいて、 ランダム・アクセス・メモリと、および前記ランダム・ア
クセス・メモリに保存されているプログラム・オブジェク
トのバージョン ID を求め、前記オブジェクト・クラス
と前記バージョン ID の関数として決定されるプログラ
ム・オブジェクトの表現を伝えるシリアル化情報を生成
するための、前記ランダム・アクセス・メモリに接続され
た処理回路と、を備えることを特徴とするプログラム・
オブジェクトのシリアライゼーション装置。 - 【請求項10】 前記オブジェクトの表現は、 シリアル化しようとするプログラム・オブジェクトの1つ
以上の特性を特定するステップと、ここでこの特性は前
記オブジェクト・クラスと前記プログラム・オブジェクト
のバージョン ID によって特定されるものであり、 シリアル化しようとするプログラム・オブジェクトの各
々の特性の値を確認するステップと、および、 前記オブジェクト・クラスの名称、前記プログラム・オブ
ジェクトのバージョンID、およびシリアル化しようとす
るそれぞれの特性の値を含むように前記オブジェクトの
表現を生成するステップと、によって決定されるもので
あることを特徴とする請求項9に記載のプログラム・オ
ブジェクトのシリアライゼーション装置。 - 【請求項11】 シリアル化しようとするプログラム・
オブジェクトの1つ以上の特性は、前記オブジェクト・ク
ラスの具体化をどのようにしてシリアル化するかを記述
するオブジェクト‐ディスクリプタ・インタフェース内
の手順を起動することによって特定されるものであり、
ここでこの手順は前記プログラム・オブジェクトのバー
ジョン ID に依存するものであることを特徴とする請求
項10に記載のプログラム・オブジェクトのシリアライ
ゼーション装置。 - 【請求項12】 前記オブジェクト‐ディスクリプタ・
インタフェースは、前記オブジェクト・クラスの名称か
ら導かれる名称を有するものであることを特徴とする請
求項11に記載のプログラム・オブジェクトのシリアラ
イゼーション装置。 - 【請求項13】 前記プログラム・オブジェクトおよび
前記オブジェクト・クラスは、Java プログラミング言語
の JavaBean 仕様に準拠するものであることを特徴とす
る請求項11に記載のプログラム・オブジェクトのシリ
アライゼーション装置。 - 【請求項14】 シリアル化しようとするプログラム・
オブジェクトの1つ以上の特性は、前記オブジェクト・ク
ラスと前記バージョン ID に従って変化する特性名のリ
ストを返す手順を起動することによって特定されるもの
であることを特徴とする請求項10に記載のプログラム
・オブジェクトのシリアライゼーション装置。 - 【請求項15】 前記手順は、オブジェクトのメソッド
であり、前記オブジェクトは、シリアル化しようとする
プログラム・オブジェクトのシリアル化可能性を定義す
るオブジェクト-ディスクリプタ・クラスのインスタンス
であることを特徴とする請求項14に記載のプログラム
・オブジェクトのシリアライゼーション装置。 - 【請求項16】 前記バージョン ID は前記プログラム
・オブジェクトのメソッドを起動することによって求め
られるものであり、 シリアル化しようとするプログラム・オブジェクトの1つ
以上の特性は、前記オブジェクト・クラスと前記プログ
ラム・オブジェクトのバージョン ID の関数であるオブ
ジェクト‐ディスクリプタ・オブジェクトのメソッドを
起動することにより特定されるものであり、 前記シリアル情報は、アウトプット・ストリーム・オブジ
ェクトのメソッドを起動することにより生成されるもの
である、ことを特徴とする請求項10に記載のプログラ
ム・オブジェクトのシリアライゼーション装置。 - 【請求項17】 装置による読み込みが可能で、かつオ
ブジェクト・クラスの具体化であるプログラム・オブジェ
クトをシリアル化するメソッドを前記装置が実行するた
めの命令プログラムを伝える記録媒体であって、ここで
前記命令プログラムは、 前記プログラム・オブジェクトのバージョン ID を求め
るための命令プログラムと、および前記オブジェクト・
クラスと前記バージョン ID の関数として決定されるプ
ログラム・オブジェクトの表現を伝えるシリアル化情報
を生成する命令プログラムと、を有することを特徴とす
る記録媒体。 - 【請求項18】 前記オブジェクトの表現は、シリアル
化しようとするプログラム・オブジェクトの1つ以上の特
性を特定する命令プログラムと、ここでこの特性は、前
記オブジェクト・クラスと前記プログラム・オブジェクト
のバージョン ID によって特定されるものであり、 シリアル化しようとするプログラム・オブジェクトの各
々の特性の値を確認する命令プログラムと、および、 前記オブジェクト・クラスの名称、前記プログラム・オブ
ジェクトのバージョンID、およびシリアル化しようとす
るそれぞれの特性の値を含むように前記オブジェクトの
表現を生成する命令プログラムと、によって決定される
ことを特徴とする請求項17に記載の記録媒体。 - 【請求項19】 シリアル化しようとするプログラム・
オブジェクトの1つ以上の特性は、前記オブジェクト・ク
ラスの具体化をどのようにしてシリアル化するかを記述
するオブジェクト‐ディスクリプタ・インタフェース内
の手順を起動することによって特定されるものであり、
ここでこの手順は前記プログラム・オブジェクトのバー
ジョン ID に依存するものであることを特徴とする請求
項18に記載の記録媒体。 - 【請求項20】 前記オブジェクト‐ディスクリプタ・
インタフェースは、前記オブジェクト・クラスの名称か
ら導かれる名称を有することを特徴とする請求項19に
記載の記録媒体。 - 【請求項21】 前記プログラム・オブジェクトおよび
前記オブジェクト・クラスは、Java プログラミング言語
の JavaBean 仕様に準拠するものであることを特徴とす
る請求項19に記載の記録媒体。 - 【請求項22】 シリアル化しようとするプログラム・
オブジェクトの1つ以上の特性は、前記オブジェクト・ク
ラスと前記バージョン ID に従って変化する特性名のリ
ストを返す手順を起動することによって特定されるもの
であることを特徴とする請求項18に記載の記録媒体。 - 【請求項23】 前記手順はオブジェクトのメソッドで
あり、前記オブジェクトは、シリアル化しようとするプ
ログラム・オブジェクトのシリアル化可能性を定義する
オブジェクト‐ディスクリプタ・クラスのインスタンス
であることを特徴とする請求項22に記載の記録媒体。 - 【請求項24】 前記バージョン ID は前記プログラム
・オブジェクトのメソッドを起動することによって求め
られるものであり、 シリアル化しようとするプログラム・オブジェクトの1つ
以上の特性は、前記オブジェクト・クラスと前記プログ
ラム・オブジェクトのバージョン ID の関数であるオブ
ジェクト‐ディスクリプタ・オブジェクトのメソッドを
起動することにより特定されるものであり、 前記シリアル情報はアウトプット・ストリーム・オブジェ
クトのメソッドを起動することにより生成されるもので
ある、ことを特徴とする請求項18に記載の記録媒体。 - 【請求項25】 オブジェクト・クラスの具体化である
プログラム・オブジェクトの表現を伝えるシリアル化情
報をデシリアル化するプログラム・オブジェクトのデシ
リアライゼーション方法において、 前記オブジェクト・クラスおよび前記プログラム・オブジ
ェクトのバージョン ID を前記シリアル化情報から求め
るステップと、および前記シリアル化情報から前記オブ
ジェクトの1つ以上の特性に対する値を確立するステッ
プと、ここで前記1つ以上の特性に対する値は前記オブ
ジェクト・クラスと前記バージョン ID の関数として確
立されるものである、を有することを特徴とするプログ
ラム・オブジェクトのデシリアライゼーション方法。 - 【請求項26】 前記1つ以上の特性に対する値は、 デシリアル化しようとするプログラム・オブジェクトの1
つ以上の特性を特定するステップと、ここでこの特性は
前記オブジェクト・クラスおよび前記プログラム・オブジ
ェクトのバージョン ID に従って特定されるものであ
り、 デシリアル化しようとするプログラム・オブジェクトの1
つ以上のそれぞれの特性に対する値を前記シリアル化情
報から求めるステップと、および前記プログラム・オブ
ジェクトの1つ以上の特性に対する値を前記シリアル化
情報から求めた値に対応して確立するステップと、によ
り確立されることを特徴とする請求項25に記載のプロ
グラム・オブジェクトのデシリアライゼーション方法。 - 【請求項27】 デシリアル化しようとする1つ以上の
特性は、前記オブジェクト・クラスの具体化をどのよう
にしてデシリアル化するかを記述するオブジェクト‐デ
ィスクリプタ・インタフェース内の手順を起動すること
によって特定されるものであり、ここでこの手順は前記
プログラム・オブジェクトのバージョン ID に依存する
ものであることを特徴とする請求項26に記載のプログ
ラム・オブジェクトのデシリアライゼーション方法。 - 【請求項28】 前記オブジェクト‐ディスクリプタ・
インタフェースは、前記オブジェクト・クラスの名称か
ら導かれる名称を有するものであることを特徴とする請
求項26に記載のプログラム・オブジェクトのデシリア
ライゼーション方法。 - 【請求項29】 前記プログラム・オブジェクトおよび
前記オブジェクト・クラスは、Java プログラミング言語
の JavaBean 仕様に準拠するものであることを特徴とす
る請求項27に記載のプログラム・オブジェクトのデシ
リアライゼーション方法。 - 【請求項30】 デシリアル化しようとするプログラム
・オブジェクトの1つ以上の特性は、前記オブジェクト・
クラスと前記バージョン ID に従って変化する特性名の
リストを返す手順を起動することによって特定されるも
のであることを特徴とする請求項26に記載のプログラ
ム・オブジェクトのデシリアライゼーション方法。 - 【請求項31】 前記手順はオブジェクトのメソッドで
あり、前記オブジェクトは、デシリアル化しようとする
プログラム・オブジェクトのデシリアル化可能性を定義
するオブジェクト‐ディスクリプタ・クラスのインスタ
ンスであることを特徴とする請求項30に記載のプログ
ラム・オブジェクトのデシリアライゼーション方法。 - 【請求項32】 前記オブジェクト・クラスおよび前記
バージョン ID はインプット‐ストリーム・オブジェク
トのメソッドを起動することによって求められるもので
あり、 デシリアル化しようとするプログラム・オブジェクトの1
つ以上の特性は、前記オブジェクト・クラスと前記プロ
グラム・オブジェクトのバージョン ID の関数であるオ
ブジェクト‐ディスクリプタ・オブジェクトのメソッド
を起動することにより特定されるものである、ことを特
徴とする請求項26に記載のプログラム・オブジェクト
のデシリアライゼーション方法。 - 【請求項33】 オブジェクト・クラスの具体化である
プログラム・オブジェクトの表現を伝えるシリアル化情
報をデシリアル化するプログラム・オブジェクトのデシ
リアライゼーション装置において、 ランダム・アクセス・メモリと、および前記オブジェクト
・クラスおよび前記プログラム・オブジェクトのバージョ
ン ID を前記シリアル化情報から求め、前記オブジェク
トの1つ以上の特性に対する値を前記シリアル化情報か
ら求め前記ランダム・アクセス・メモリに確立するため
の、前記ランダム・アクセス・メモリに接続された処理回
路と、ここで前記1つ以上の特性に対する値は前記オブ
ジェクト・クラスと前記バージョン ID の関数として確
立されるものである、を備えることを特徴とするプログ
ラム・オブジェクトのデシリアライゼーション装置。 - 【請求項34】 前記1つ以上の特性に対する値は、 デシリアル化しようとするプログラム・オブジェクトの1
つ以上の特性を特定するステップと、ここでこの特性は
前記オブジェクト・クラスおよび前記プログラム・オブジ
ェクトのバージョン ID に従って特定されるものであ
り、 デシリアル化しようとするプログラム・オブジェクトの1
つ以上のそれぞれの特性に対する値を前記シリアル化情
報から求めるステップと、および前記プログラム・オブ
ジェクトの1つ以上の特性に対する値を前記シリアル化
情報から求めた値に対応して確立するステップと、によ
り確立されることを特徴とする請求項33に記載のプロ
グラム・オブジェクトのデシリアライゼーション装置。 - 【請求項35】 デシリアル化しようとする1つ以上の
特性は、前記オブジェクト・クラスの具体化をどのよう
にしてデシリアル化するかを記述するオブジェクト‐デ
ィスクリプタ・インタフェース内の手順を起動すること
によって特定されるものであり、ここでこの手順は前記
プログラム・オブジェクトのバージョン ID に依存する
ものであることを特徴とする請求項34に記載のプログ
ラム・オブジェクトのデシリアライゼーション装置。 - 【請求項36】 前記オブジェクト‐ディスクリプタ・
インタフェースは、前記オブジェクト・クラスの名称か
ら導かれる名称を有するものであることを特徴とする請
求項34に記載のプログラム・オブジェクトのデシリア
ライゼーション装置。 - 【請求項37】 前記プログラム・オブジェクトおよび
前記オブジェクト・クラスは、Java プログラミング言語
の JavaBean 仕様に準拠することを特徴とする請求項3
5に記載のプログラム・オブジェクトのデシリアライゼ
ーション装置。 - 【請求項38】 デシリアル化しようとするプログラム
・オブジェクトの1つ以上の特性は、前記オブジェクト・
クラスと前記バージョン ID に従って変化する特性名の
リストを返す手順を起動することによって特定されるも
のであることを特徴とする請求項34に記載のプログラ
ム・オブジェクトのデシリアライゼーション装置。 - 【請求項39】 前記手順はオブジェクトのメソッドで
あり、前記オブジェクトは、デシリアル化しようとする
プログラム・オブジェクトのデシリアル化可能性を定義
するオブジェクト‐ディスクリプタ・クラスのインスタ
ンスであることを特徴とする請求項38に記載のプログ
ラム・オブジェクトのデシリアライゼーション装置。 - 【請求項40】 前記オブジェクト・クラスおよび前記
バージョン ID はインプット‐ストリーム・オブジェク
トのメソッドを起動することによって求められるもので
あり、 デシリアル化しようとするプログラム・オブジェクトの1
つ以上の特性は、前記オブジェクト・クラスと前記プロ
グラム・オブジェクトのバージョン ID の関数であるオ
ブジェクト‐ディスクリプタ・オブジェクトのメソッド
を起動することにより特定されるものである、ことを特
徴とする請求項34に記載のプログラム・オブジェクト
のデシリアライゼーション装置。 - 【請求項41】 装置による読み込みが可能で、かつオ
ブジェクト・クラスの具体化であるプログラム・オブジェ
クトの表現を伝えるシリアル化情報をデシリアル化する
メソッドを前記装置が実行するための命令プログラムを
伝える記録媒体であって、ここで前記命令プログラム
は、 前記オブジェクト・クラスおよび前記プログラム・オブジ
ェクトのバージョン ID を前記シリアル化情報から求め
る命令プログラムと、および前記シリアル化情報から前
記オブジェクトの1つ以上の特性に対する値を確立する
命令プログラムと、ここで前記1つ以上の特性に対する
値は前記オブジェクト・クラスと前記バージョン ID の
関数として確立されるものである、を有することを特徴
とする記録媒体。 - 【請求項42】 前記1つ以上の特性に対する値は、 デシリアル化しようとするプログラム・オブジェクトの1
つ以上の特性を特定する命令プログラムと、ここでこの
特性は前記オブジェクト・クラスおよび前記プログラム・
オブジェクトのバージョン ID に従って特定されもので
あり、 デシリアル化しようとするプログラム・オブジェクトの1
つ以上のそれぞれの特性に対する値を前記シリアル化情
報から求める命令プログラムと、および前記プログラム
・オブジェクトの1つ以上の特性に対する値を前記シリア
ル化情報から求めた値に対応して確立する命令プログラ
ムと、により確立されることを特徴とする請求項41に
記載の記録媒体。 - 【請求項43】 デシリアル化しようとする1つ以上の
特性は、前記オブジェクト・クラスの具体化をどのよう
にしてデシリアル化するかを記述するオブジェクト‐デ
ィスクリプタ・インタフェース内の手順を起動すること
によって特定されるものであり、ここでこの手順は前記
プログラム・オブジェクトのバージョン ID に依存する
ものであることを特徴とする請求項42に記載の記録媒
体。 - 【請求項44】 前記オブジェクト‐ディスクリプタ・
インタフェースは、前記オブジェクト・クラスの名称か
ら導かれる名称を有するものであることを特徴とする請
求項42記載の記録媒体。 - 【請求項45】 前記プログラム・オブジェクトおよび
前記オブジェクト・クラスは、Java プログラミング言語
の JavaBean 仕様に準拠するものであることを特徴とす
る請求項43記載の記録媒体。 - 【請求項46】 デシリアル化しようとするプログラム
・オブジェクトの1つ以上の特性は、前記オブジェクト・
クラスと前記バージョン ID に従って変化する特性名の
リストを返す手順を起動することによって特定されるも
のであることを特徴とする請求項42に記載の記録媒
体。 - 【請求項47】 前記手順はオブジェクトのメソッドで
あり、前記オブジェクトは、デシリアル化しようとする
プログラム・オブジェクトのデシリアル化可能性を定義
するオブジェクト‐ディスクリプタ・クラスのインスタ
ンスであることを特徴とする請求項46に記載の記録媒
体。 - 【請求項48】 前記オブジェクト・クラスおよび前記
バージョン ID はインプット‐ストリーム・オブジェク
トのメソッドを起動することによって求められるもので
あり、 デシリアル化しようとするプログラム・オブジェクトの1
つ以上の特性は、前記オブジェクト・クラスと前記プロ
グラム・オブジェクトのバージョン ID の関数であるオ
ブジェクト‐ディスクリプタ・オブジェクトのメソッド
を起動することにより特定されるものである、ことを特
徴とする請求項42に記載の記録媒体。 - 【請求項49】 装置による読み込みが可能で、オブジ
ェクト・クラスの具体化である1つ以上のプログラム・オ
ブジェクトを表現するシリアル化情報を伝える記録媒体
であって、ここでシリアル化情報は、 そのシリアル化情報により表現されるプログラム・オブ
ジェクトの数と、 オブジェクト・クラス名と、および前記シリアル化情報
により表現されるそれぞれのプログラム・オブジェクト
に対し、それぞれの前記プログラム・オブジェクトのバ
ージョン ID およびそれぞれのプログラム・オブジェク
トの1つ以上の特性に対する値と、を含むことを特徴と
する記録媒体。 - 【請求項50】 前記オブジェクト・クラスのスーパー
クラスの具体化である1つ以上の第2のプログラム・オブ
ジェクトを表現するシリアル化情報を伝えるものであ
り、ここで前記シリアル化情報はそれぞれの第2のプロ
グラム・オブジェクトに対しそれぞれの第2のプログラム
・オブジェクトのバージョン ID 、およびそれぞれの第2
のプログラム・オブジェクトの1つ以上の特性に対する値
を含むことを特徴とする請求項49に記載の記録媒体。 - 【請求項51】 装置による読み込みが可能で、かつプ
ログラム・クラスの具体化であるプログラム・オブジェク
トをシリアル化またはデシリアル化するメソッドを前記
装置が実行するための1つ以上の命令プログラムを伝え
る記録媒体であって、ここで1つ以上の前記命令プログ
ラムは、 それぞれのプログラム・オブジェクトのバージョン ID
を求めるためのメソッドを含むオブジェクト・クラスの
定義と、およびシリアル化またはデシリアル化しようと
する各プログラム・オブジェクトの1つ以上の特性を特定
するためのメソッドを含むオブジェクト‐ディスクリプ
タ・クラスの定義と、を有することを特徴とする記録媒
体。 - 【請求項52】 前記オブジェクト‐ディスクリプタ・
クラスの定義に、シリアル化またはデシリアル化しよう
とする各プログラム・オブジェクトの1つ以上の特性の名
称を返すメソッドが含まれることを特徴とする請求項5
1に記載の記録媒体。 - 【請求項53】 前記オブジェクト‐ディスクリプタ・
クラスの定義に、前記オブジェクト・クラスに対する名
称を返すメソッドが含まれることを特徴とする請求項5
1に記載の記録媒体。 - 【請求項54】 前記1つ以上の前記命令プログラム
は、シリアル化またはデシリアル化しようとする各プロ
グラム・オブジェクトの1つ以上の特性に対する特性型を
求めるメソッドを含む特性‐ディスクリプタ・クラスの
定義を有することを特徴とする請求項51に記載の記録
媒体。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/410363 | 1999-09-30 | ||
US09/410,363 US6477701B1 (en) | 1999-09-30 | 1999-09-30 | Version-adaptive serialization and deserialization of program objects in an object-oriented environment |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2001125787A true JP2001125787A (ja) | 2001-05-11 |
Family
ID=23624399
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000302722A Pending JP2001125787A (ja) | 1999-09-30 | 2000-10-02 | プログラム・オブジェクトのシリアライゼーション方法、およびプログラム・オブジェクトのデシリアライゼーション方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US6477701B1 (ja) |
EP (1) | EP1100005A3 (ja) |
JP (1) | JP2001125787A (ja) |
KR (1) | KR100639167B1 (ja) |
CN (1) | CN1242326C (ja) |
HK (1) | HK1037250A1 (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005011362A (ja) * | 2003-06-19 | 2005-01-13 | Microsoft Corp | モジュラオブジェクトシリアライゼーションアーキテクチャ |
JP2009289272A (ja) * | 2002-02-28 | 2009-12-10 | Axalto Sa | 構造化ソフトウェアオブジェクトについての反復式シリアライゼーションプロシージャ |
Families Citing this family (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7120863B1 (en) * | 1999-11-15 | 2006-10-10 | International Business Machines Corporation | Method, system, and program for interfacing with elements in a document |
US6629227B1 (en) * | 2000-05-04 | 2003-09-30 | Scientific-Atlanta, Inc. | System and method for a communication terminal to manage memory and maintain a current application version for multiple applications |
GB2363866B (en) * | 2000-05-31 | 2002-11-06 | Intamission Ltd | Data processing apparatus, method and system |
US6877162B1 (en) * | 2000-07-31 | 2005-04-05 | Hewlett-Packard Company | Method and system for extendable class-based shared data-types |
US7191196B2 (en) * | 2001-06-28 | 2007-03-13 | International Business Machines Corporation | Method and system for maintaining forward and backward compatibility in flattened object streams |
US6983448B2 (en) * | 2001-07-12 | 2006-01-03 | International Business Machines Corporation | Open framework for the definition of metadata |
US7150004B2 (en) * | 2002-08-21 | 2006-12-12 | International Business Machines Corporation | Programmatically serializing complex objects using self-healing techniques |
CA2419904A1 (en) * | 2003-02-26 | 2004-08-26 | Ibm Canada Limited - Ibm Canada Limitee | Version-insensitive serialization and deserialization of program objects |
US7404186B2 (en) * | 2003-05-28 | 2008-07-22 | Microsoft Corporation | Signature serialization |
US7386836B2 (en) * | 2003-06-09 | 2008-06-10 | International Business Machines Corporation | Maintaining multiple valid concurrent serialized object versions |
US7293253B1 (en) * | 2003-09-12 | 2007-11-06 | Nortel Networks Limited | Transparent interface migration using a computer-readable mapping between a first interface and a second interface to auto-generate an interface wrapper |
US7207002B2 (en) * | 2003-11-13 | 2007-04-17 | International Business Machines Corporation | Serialization and preservation of objects |
US7698359B2 (en) * | 2004-01-16 | 2010-04-13 | Microsoft Corporation | Remote system administration using command line environment |
US7770181B2 (en) * | 2004-01-16 | 2010-08-03 | Microsoft Corporation | System and method for transferring computer-readable objects across a remote boundary |
US7730041B2 (en) * | 2004-08-25 | 2010-06-01 | Microsoft Corporation | Data abstraction based serialization |
US7464082B2 (en) * | 2004-11-29 | 2008-12-09 | International Business Machines Corporation | Methods for de-serializing data objects on demand |
US7543002B2 (en) * | 2004-12-02 | 2009-06-02 | Bea Systems, Inc. | Mechanism to load first version classes into a runtime environment running a second version of the class |
US20060218538A1 (en) * | 2005-03-22 | 2006-09-28 | Van Kesteren Tom A | System, method and computer program product for converting a serialized object between different software versions |
US7954088B2 (en) * | 2005-03-23 | 2011-05-31 | Microsoft Corporation | Method and apparatus for executing unit tests in application host environment |
US20070299863A1 (en) * | 2006-04-27 | 2007-12-27 | Qualcomm Incorporated | Portable object serialization |
US20080046874A1 (en) * | 2006-08-21 | 2008-02-21 | International Business Machines Corporation | Data reporting application programming interfaces in an xml parser generator for xml validation and deserialization |
KR100866603B1 (ko) * | 2007-01-03 | 2008-11-03 | 삼성전자주식회사 | 디시리얼라이징과 시리얼라이징을 수행하는 데이터 처리 방법 및 데이터 처리 장치 |
CN100456238C (zh) * | 2007-03-12 | 2009-01-28 | 华为技术有限公司 | 实现分布式对象持久化的方法、装置及编译单元 |
US8006253B2 (en) * | 2007-08-30 | 2011-08-23 | Ixia | Version-adaptive serialization and deserialization |
US8626720B2 (en) | 2008-02-11 | 2014-01-07 | International Business Machines Corporation | System and method of reconstructing complex custom objects |
US8055619B2 (en) | 2008-06-05 | 2011-11-08 | Novell, Inc. | Mechanisms to support object-oriented version control operations |
US8495659B1 (en) | 2012-05-01 | 2013-07-23 | International Business Machines Corporation | Eliminating redundancy in instance data of different versioned classes in communication between object request brokers using a common class definition |
US10025702B1 (en) * | 2014-12-10 | 2018-07-17 | Amazon Technologies, Inc. | Browser capable of saving and restoring content item state |
KR101707649B1 (ko) * | 2015-09-24 | 2017-02-20 | (주)에스아이티 | 중앙 집중식 데이터 송수신 장치 및 그 방법 |
US10467321B2 (en) | 2017-09-07 | 2019-11-05 | Mastercard International Incorporated | Systems and methods for dynamic C# serialization |
US10922024B1 (en) * | 2019-06-28 | 2021-02-16 | Amazon Technologies, Inc. | Self-protection against serialization incompatibilities |
US11599551B2 (en) * | 2020-03-30 | 2023-03-07 | Oracle International Corporation | Deserialization of stream objects using multiple deserialization algorithms |
US11477258B2 (en) * | 2020-03-30 | 2022-10-18 | Oracle International Corporation | Serialization of objects using multiple serialization algorithms |
US11288045B1 (en) | 2021-02-09 | 2022-03-29 | Oracle International Corporation | Object creation from structured data using indirect constructor invocation |
US11256480B1 (en) | 2021-02-09 | 2022-02-22 | Oracle International Corporation | Deserialization of stream objects using constant-foldable method handles |
CN113191124B (zh) * | 2021-05-20 | 2023-03-21 | 上海曼恒数字技术股份有限公司 | 一种基于3d引擎的运行时编辑方法及系统 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5867708A (en) * | 1995-11-20 | 1999-02-02 | International Business Machines Corporation | System, method, and article of manufacture for adding concurrency to a binary class in an object oriented system |
US6212673B1 (en) * | 1997-03-31 | 2001-04-03 | International Business Machines Corporation | Component-neutral builder interface |
US6256771B1 (en) * | 1997-10-16 | 2001-07-03 | At&T Corp. | Method and apparatus for providing a dynamic service composition software architecture |
US6151700A (en) * | 1997-10-20 | 2000-11-21 | International Business Machines Corporation | Object oriented distributed programming system for computer controlled networks with selective capture of program property data identifying a particular program version |
US6272521B1 (en) * | 1997-12-08 | 2001-08-07 | Object Technology Licensing Corporation | Apparatus and method for allowing object-oriented programs created with different framework versions to communicate |
US6032152A (en) * | 1997-12-31 | 2000-02-29 | Intel Corporation | Object factory template |
US6085198A (en) * | 1998-06-05 | 2000-07-04 | Sun Microsystems, Inc. | Integrated three-tier application framework with automated class and table generation |
US6272677B1 (en) * | 1998-08-28 | 2001-08-07 | International Business Machines Corporation | Method and system for automatic detection and distribution of code version updates |
US6298353B1 (en) * | 1998-11-19 | 2001-10-02 | International Business Machines Corporation | Checking serialization compatibility between versions of java classes |
US6298478B1 (en) * | 1998-12-31 | 2001-10-02 | International Business Machines Corporation | Technique for managing enterprise JavaBeans (™) which are the target of multiple concurrent and/or nested transactions |
US6385769B1 (en) * | 1999-02-03 | 2002-05-07 | International Business Machines Corporation | Text based object oriented program code with a visual program builder and parser support for predetermined and not predetermined formats |
US6301585B1 (en) * | 1999-03-17 | 2001-10-09 | Sun Microsystems, Inc. | Redundancy elimination in the persistence of object graphs |
US6031747A (en) * | 1999-08-02 | 2000-02-29 | Lockheed Martin Missiles & Space Company | Interleaved synchronous flyback converter with high efficiency over a wide operating load range |
-
1999
- 1999-09-30 US US09/410,363 patent/US6477701B1/en not_active Expired - Lifetime
-
2000
- 2000-08-03 EP EP00116794A patent/EP1100005A3/en not_active Withdrawn
- 2000-09-08 KR KR1020000053559A patent/KR100639167B1/ko not_active IP Right Cessation
- 2000-09-30 CN CNB001305557A patent/CN1242326C/zh not_active Expired - Fee Related
- 2000-10-02 JP JP2000302722A patent/JP2001125787A/ja active Pending
-
2001
- 2001-10-11 HK HK01107149A patent/HK1037250A1/xx not_active IP Right Cessation
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009289272A (ja) * | 2002-02-28 | 2009-12-10 | Axalto Sa | 構造化ソフトウェアオブジェクトについての反復式シリアライゼーションプロシージャ |
JP2005011362A (ja) * | 2003-06-19 | 2005-01-13 | Microsoft Corp | モジュラオブジェクトシリアライゼーションアーキテクチャ |
KR101159310B1 (ko) | 2003-06-19 | 2012-06-22 | 마이크로소프트 코포레이션 | 직렬화 방법 및 이 방법을 구현하는 컴퓨터 실행가능 명령어가 저장된 하나 이상의 컴퓨터 판독가능 저장 매체 |
Also Published As
Publication number | Publication date |
---|---|
CN1242326C (zh) | 2006-02-15 |
US6477701B1 (en) | 2002-11-05 |
EP1100005A2 (en) | 2001-05-16 |
KR20010050408A (ko) | 2001-06-15 |
KR100639167B1 (ko) | 2006-10-27 |
CN1290889A (zh) | 2001-04-11 |
HK1037250A1 (en) | 2002-02-01 |
EP1100005A3 (en) | 2004-06-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100639167B1 (ko) | 프로그램 객체들의 버전-적응가능한 직렬화 및 탈직렬화 | |
US6078743A (en) | Generic IDE interface support for scripting | |
JP3072709B2 (ja) | 要求伝達方法 | |
US4953080A (en) | Object management facility for maintaining data in a computer system | |
US6415435B1 (en) | Method and apparatus for determining compatibility of parent classes in an object oriented environment using versioning | |
US6263498B1 (en) | Method and apparatus for enabling server side distributed object modification | |
US6064382A (en) | Object oriented apparatus and method for providing a graphical user interface for host-based software applications | |
US5581760A (en) | Method and system for referring to and binding to objects using identifier objects | |
US5864864A (en) | Method and apparatus for providing transparent persistent data support to foreign data types | |
US6289395B1 (en) | Generic Java-based event processor for scripting Java beans | |
US6008806A (en) | Shell extensions for an operating system | |
EP1586994B1 (en) | System and method for dynamic binding of user interface controls and commands | |
US7617222B2 (en) | Transferring data and storing metadata across a network | |
US6298353B1 (en) | Checking serialization compatibility between versions of java classes | |
US6256772B1 (en) | Multilingual hierarchial scripting environment | |
US7490332B2 (en) | System and method for accessing ActiveX objects in a platform dependent environment from objects in a platform independent environment | |
US20040073828A1 (en) | Transparent variable state mirroring | |
US20040103114A1 (en) | System and method for accessing objects in a platform dependent environment from a platform independent environment | |
US6330711B1 (en) | Method and apparatus for dynamic application and maintenance of programs | |
US6779172B1 (en) | Bean scripting framework | |
WO2005085995A1 (en) | Method, system, and program for invoking methods between computer languages | |
US6405363B1 (en) | Class casting support for run-time extensible items in an object oriented framework | |
US20040233237A1 (en) | Development environment for DSP | |
US8032504B2 (en) | Mechanism for enabling new task types to be added to a system for managing distributed nodes | |
US20020133478A1 (en) | Data definition language |