(57)【要約】【課題】命令を実行するステートレスオブジェクト方法を提供する。【解決手段】この方法は、識別子に対してメモリ内のステートロケーションを相互参照するステートの中央リポジトリを確立するステップと、第１メソッドを呼び出すステップと、第１メソッドに応答して、識別子及び第２メソッドを含むステートレスオブジェクトにアクセスするステップと、識別子を読み取るステップと、識別子を用いてリポジトリ内のステートレスオブジェクトのステートロケーションを相互参照するステップと、位置付けしたステートにアクセスするステップと、ステートへのアクセスに応答して第２メソッドのインスタンスを生成するステップとを含む。ステートの中央リポジトリは第１識別子に対して第１ステートを相互参照することができ、ステートレスオブジェクトにアクセスするステップは、第１メソッドに応答して、それぞれが第１識別子を各々含む複数のステートレスオブジェクトにアクセスすることを含む。【選択図】図１
2007207222.tif 000002
【特許請求の範囲】
【請求項１】
デジタル処理装置により実行可能である機械可読命令のプログラムを確実に実施する信号担持媒体における、命令を実行するステートレスオブジェクト方法であって、
第１メソッドをアプリケーションから呼び出すことと、
前記第１メソッドに応答してステートレスオブジェクトのインスタンスを生成し、前記ステートレスオブジェクトが識別子及び第２メソッドを含むことと、
前記識別子を読み取ることと、
前記識別子を用いて前記ステートレスオブジェクトのステートを位置付けることと、
前記位置付けしたステートにアクセスすることと、
前記ステートへのアクセスに応答して前記第２メソッドを呼び出すことと
を含む方法。
【請求項２】
前記方法は、識別子に対してメモリ内のステートロケーションを相互参照するステートの中央リポジトリを確立することを更に含み、
前記ステートレスオブジェクトの前記ステートを位置付けることは、前記識別子を用いて前記リポジトリ内の前記ステートレスオブジェクトのステートロケーションを相互参照することを含む、請求項１に記載の方法。
【請求項３】
ステートの前記中央リポジトリを確立することは第１識別子に対して第１ステートを相互参照することを含み、
前記ステートレスオブジェクトのインスタンスを生成することは、前記第１メソッドに応答して第１複数ステートレスオブジェクトのインスタンスを生成することを含み、前記ステートレスオブジェクトの各々が前記第１識別子を含み、
前記識別子を用いて前記ステートレスオブジェクトの前記ステートを位置付けることは、前記第１識別子を用いて前記第１複数ステートレスオブジェクトの各々に対して前記第１ステートを位置付けることを含む、請求項２に記載の方法。
【請求項４】
前記ステートレスオブジェクトのインスタンスを生成することは、可変ステートを欠いているステートレスオブジェクトのインスタンスを生成することを含む、請求項１に記載の方法。
【請求項５】
前記ステートレスオブジェクトのインスタンスを生成することは、不変の識別子を有するステートレスオブジェクトのインスタンスを生成することを含む、請求項４に記載の方法。
【請求項６】
前記第１メソッドを前記アプリケーションから呼び出すことは、ネットワークに接続されたデバイスディスカバリアプリケーションから前記第１メソッドを呼び出すことを含み、
前記ステートレスオブジェクトのインスタンスを生成することは、ネットワークに接続されたデバイスと関連するステートレスレスオブジェクトのインスタンスを生成することを含む、請求項１に記載の方法。
【請求項７】
前記ステートレスオブジェクトのインスタンスを生成することは、通し番号、型式番号、バージョン番号、製造元、ネットワークカードアドレス（ＭＡＣアドレス）及びＩＰアドレスを含む群から選択された識別子を含むステートレスオブジェクトのインスタンスを生成することを含み、
前記ネットワークに接続されたデバイスの前記位置付けしたステートにアクセスすることは、ネットワーク構成パラメータ、ＤＮＳ構成、ＤＮＳ名、ＤＮＳサーバアドレス及びＤＨＣＰプロトコル（リース時間、ＤＨＣＰサーバアドレス）を含む群から選択されたステートにアクセスすることを含む、請求項６に記載の方法。
【請求項８】
前記ネットワークに接続されたデバイスのディスカバリアプリケーションから前記第１メソッドを呼び出すことは、前記第１メソッドをネットワークプリンタディスカバリアプリケーションから呼び出すことを含み、
前記位置付けしたステートにアクセスすることは、用紙サイズ、用紙方向、解像度、色、オン／オフ状態、ジョブ状態及びジョブ優先順位を含む群から選択されたプリンタ属性にアクセスすることを含む、請求項７に記載の方法。
【請求項９】
前記方法は、ステートポインタを永続的にストアすることを更に含み、
前記ステートレスオブジェクトのインスタンスを生成することは、前記ステートポインタに向けられるキーを有するステートレスオブジェクトのインスタンスを生成することを含む、請求項１に記載の方法。
【請求項１０】
前記ステートポインタを永続的にストアすることは複数のステートポインタをストアすることを含み、
前記ステートレスオブジェクトのインスタンスを生成することは、特定の順序で前記複数のステートポインタに向けられる複数の連続したキーを有するステートレスオブジェクトのインスタンスを生成することを含む、請求項９に記載の方法。
【請求項１１】
前記方法は、前記アプリケーションを初期化することと、
固定メモリにストアされている情報を有するルートオブジェクトのインスタンスを生成することを更に含み、
前記第１メソッドを前記アプリケーションから呼び出すことは、前記ルートオブジェクトから前記第１メソッドを呼び出すことを含み、
ステートの前記中央リポジトリを確立することは、固定メモリ内のステートレスオブジェクトの識別子及びステート間にリンケージを生成することを含む、請求項２に記載の方法。
【請求項１２】
前記方法は、ステートの前記中央リポジトリを固定メモリに保存することによりシステム「スナップショット」を作成することを更に含む、請求項１１に記載の方法。
【請求項１３】
前記方法は、ステートを変更して前記第２メソッドを代わりのメソッドと置き換えることを更に含み、
前記位置付けしたステートにアクセスすることは、前記変更したステートにアクセスすることを含み、
前記ステートへのアクセスに応答して前記第２メソッドを呼び出すことは、変更した前記ステートに応答して前記代わりのメソッドを呼び出すことを含む、請求項１に記載の方法。
【請求項１４】
ステートの前記中央リポジトリを確立することは、第１識別子に対して第１ステートロケーションを相互参照し、第２識別子に対して第２ステートロケーションを相互参照することを含み、
前記ステートレスオブジェクトのインスタンスを生成することは、前記第１メソッドに応答して、前記第１識別子を有する第１ステートレスオブジェクトのインスタンスを生成することを含み、
前記第２メソッドを呼び出すことは、前記第２識別子を含む第２ステートレスオブジェクトのインスタンスを生成することを含む、請求項２に記載の方法。
【請求項１５】
デジタル処理装置により実行可能である機械可読命令のプログラムを確実に実施する信号担持媒体において、プリンタディスカバリ命令を実行するステートレスオブジェクトの方法であって、
識別子に対してメモリ内のステートロケーションを相互参照するステートの中央リポジトリを確立することと、
ネットワークプリンタディスカバリアプリケーションから、前記識別子及びメソッドを含むステートレスオブジェクトのインスタンスを生成することと、
前記識別子を読み取ることと、
前記識別子を用いて前記ステートを位置付けることと、
前記位置付けしたステートにアクセスすることと、
前記ステートへのアクセスに応答して前記メソッドを呼び出すことと
を含む方法。
【請求項１６】
前記位置付けしたステートにアクセスすることは、用紙サイズ、用紙方向、解像度、色、オン／オフ状態、ジョブ状態及びジョブ優先順位を含む群から選択されたプリンタ属性にアクセスすることを含む、請求項１５に記載の方法。
【請求項１７】
デジタル処理装置により実行可能である機械可読命令のプログラムを確実に実施する信号担持媒体において、命令を実行するステートレスオブジェクトの方法であって、
識別子及びメソッドを含むステートレスオブジェクトのインスタンスを生成することと、
前記識別子を読み取ることと、
前記識別子を用いて前記ステートレスオブジェクトのステートを位置付けることと、
前記位置付けしたステートにアクセスすることと、
前記ステートへのアクセスに応答して前記メソッドを呼び出すことと
を含む方法。
【請求項１８】
前記方法は、前記識別子に対してメモリ内の前記ステートロケーションを相互参照するステートの中央リポジトリを確立することを更に含み、
前記ステートレスオブジェクトの前記ステートを位置付けることは、前記識別子を用いて前記リポジトリにおける前記ステートレスオブジェクトのステートロケーションを相互参照することを含む、請求項１７に記載の方法。
【請求項１９】
ステートレスオブジェクト命令を実行するデジタル処理装置であって、
プロセッサと、
前記プロセッサによりアクセス可能であるメモリと、
第１メソッドを呼び出し、
前記第１メソッドに応答して、識別子及び第２メソッドを含むステートレスオブジェクトのインスタンスを生成し、
前記識別子を読み取り、
前記識別子を用いて前記ステートレスオブジェクトのステートを位置付けし、
前記位置付けしたステートにアクセスし、
前記ステートへのアクセスに応答して前記第２メソッドを呼び出すため、
メモリ内にストアされているプロセッサ実行可能命令を含むアプリケーションと
を含むデジタル処理装置。
【請求項２０】
前記メモリは、識別子に対してメモリ内のステートロケーションを相互参照するステートの中央リポジトリを含み、
前記アプリケーションは、前記リポジトリの前記ステートレスオブジェクトのステートロケーションを相互参照するために前記識別子を用いることにより前記ステートレスオブジェクトの前記ステートを位置付ける、請求項１９に記載のデジタル処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、オブジェクト指向ソフトウェア環境に関し、特に、プログラマブル命令を実行するステートレスオブジェクト方法に関する。
【背景技術】
【０００２】
プログラミングへのオブジェクト指向アプローチは、従来のプロシージャー型プログラミングアプローチよりも優れた利点を備える（例えば、特許文献１参照）。例えば、オブジェクト指向アプローチは継承によりコード再使用を可能にし、カプセル化によりモジュール性を可能にする。どんな概念がオブジェクト指向プログラミングを定義するかに関して多くの見解があり、これら概念を定義する多くの用語及び定義がある。一般に、オブジェクトは、メソッドまたは操作とも称する手続きと、属性またはプロパティとも称するデータと一体を成す。オブジェクトには、クラスまたはタイプとして既知である構造からインスタンスが生成され、オブジェクトはこれら構造により記述される。クラスは一般的な抽象仕様であり、クラスからインスタンスが生成されたオブジェクトはクラスの固有の具体的インスタンスである。
【０００３】
クラスはインターフェース及びインプリメンテーションから成る。インターフェースは変数及び関数宣言を含み、変数はタイプの属性を表し、関数宣言は、これら属性を操作する他にもその他の操作を実行するメソッドを指定する。宣言は、総括的にシグニチャとして知られている名前、戻りの型及び引数を指定する。インプリメンテーションは、インターフェースで指定されたメソッドを実現する実コードを意味する。
【０００４】
Ｃ＋＋言語のようなオブジェクト指向言語は継承を介して特殊クラスの作成を可能にする。一般に、継承は、属性及びメソッドを親または基本クラスから１つ以上の子または派生クラスに受け渡すメカニズムである。継承はコード再使用を可能にする。その理由は、子クラスでインターフェース及びインプリメンテーションを重複する必要がないためである。その代わりに、親または基本クラスの参照によりインターフェース及びインプリメンテーションをいかなる子クラスにも組み入れることができる。
【０００５】
一般に、オブジェクトは、メッセージを受け渡すメカニズムを介して通信する。クライアントオブジェクトとして既知であるオブジェクトは、別のオブジェクトのメソッドを呼び出すことができる。クライアントオブジェクトは、定義されているインターフェースを介してオブジェクトにアクセスすることにより別のオブジェクトのメソッドを呼び出す。従って、オブジェクトのメソッドを呼び出すため、または、オブジェクトにクエリーを行うため、クライアントオブジェクトは、ターゲットオブジェクトのインターフェースにあるメソッドのシグニチャの知識を必要とする。クライアントオブジェクトはメソッドを呼び出し、適切なパラメータを受け渡す。例えば、オブジェクトの属性の値を得るため、クライアントオブジェクトはインターフェースを介してメソッドを呼び出して属性の値を獲得する。
【０００６】
データストアにアクセスするための頻繁なアプローチは、アクセスを必要とするオブジェクトアプリケーション内にカスタムアクセスコードを書き込み埋め込むことを含む（例えば、特許文献２参照）。このアプローチは、リレーショナルデータベース内の単一リレーショナル表のみに、またはその他のデータストア内の類似の構造体のみにカスタムコードをアクセスさせるように一般に制限されている。開発者が始めからデータストアの設計及び生成を管理する環境下では、有意情報を設計し、単一表にストアすることは可能である。しかし、このような設計の機会は通常まれである。
【０００７】
一般に、データオブジェクト、複合データオブジェクトまたはデータストアのためにパーシスタンスを生成するメソッドは、オブジェクトモデルがパーシスタンスオブジェクトまたはパーシスタンスバイトコードを含まない純粋なオブジェクトアプリケーションモデルを作成する目標と競合する。オブジェクトアプリケーションモデルが、データストア構成またはオブジェクト定義から独立している場合があるコンピュータのメモリ、アプリケーションデータストア及びアプリケーション情報ストレージリポジトリの１つ以上に存在するおそれがあるので、特定の困難が分散環境に存在する。
【０００８】
データストアを用いるオブジェクトアプリケーションモデルの作成、アクセス、変更または削除と共にパーシスタンスの問題が発生する。オブジェクトアプリケーションモデルを複数の物理的なコンピュータマシンロケーションにわたって分散するか、あるいは、データストアから独立している場合がある複数のインターネットウェブサイトロケーションにわたって分散する場合がある。オブジェクトアプリケーションモデルは、１つ以上のそのデータソースの異なるセットよりも異なるデータオブジェクトセットまたは、データオブジェクト間の関係に関する異なる定義セットを使用する場合が多い。多くの場合、データソース及びオブジェクトアプリケーションモデルのそれぞれの構造は、２つ以上のデータオブジェクト間、またはデータオブジェクト内のエレメント間の関係を関連づける定義と同様にアプリケーションデータオブジェクトの全スキーマのマッピング、アクセスまたは変更を単純に、都合良く行うことができない。
【０００９】
１つのデータオブジェクトとオブジェクトアプリケーションモデル、またはデータソースのデータオブジェクト中に検出されたその他のデータオブジェクトの１つ以上との間に関係が存在する場合がある。１つのデータオブジェクトと別のデータオブジェクトまたはデータソースとの間の関係を、１対１（１‐１）、１対多（１‐Ｍ）または多対多（Ｍ‐Ｍ）から成る３つの関係タイプの群から選択されたメンバーとする。これら関係の複雑な組み合わせが、所定のデータオブジェクトに対するデータオブジェクト関係定義として存在する。
【００１０】
オブジェクトは論理的に複数のリレーショナル表または複数のオブジェクトデータベースにまたがる場合があり、複数の物理的に独立したコンピュータシステムあるいは、さらに複数のウェブサイトロケーションを含む論理コンピュータシステムにわたって分散される場合さえある。オブジェクトアプリケーションモデルを作成、アクセス、維持または更新するには、有用な作業を行いオブジェクトアプリケーションモデルの同期を保つために、複数の変換モジュールを共働させ、複数の個々のコンピュータシステムまたは複数のデータソースの面倒な反復更新をする必要がある。このようなアプローチは、コンピューティング及び開発リソースの点から見て高価であって扱いにくい。
【００１１】
オブジェクトアプリケーションモデルのデータオブジェクトは、別のコンピュータアプリケーションといっしょに用いるために、情報をデータソースから取得し、データをデータオブジェクト（例えば、ＪＡＶＡ（登録商標）クラス）として定義するオブジェクトプログラミングアプリケーションの特徴であることが多い。実際には、データオブジェクトまたはデータオブジェクトのモデルはコンピュータメモリシステムのランダムアクセスメモリ内のみに存在し、あるいはデータソースまたは他の何らかのタイプの取り出し可能な情報リポジトリのいずれかに保存される。オブジェクトデータアプリケーションのプログラマまたは管理者は、オブジェクトアプリケーションモデルまたはその幾つかの固有エレメントに対するデータオブジェクトの全モデルまたはダイアグラムに容易にアクセスまたは追跡することができない。残念なことに、データオブジェクト及び複合データオブジェクトグラフモデルの関連するデータオブジェクト関係にアクセスし、それを持続するツールは、オブジェクト言語プログラミングの分野では十分に実現されていない。
【００１２】
コンピュータアプリケーションは、データ、データオブジェクト及びデータオブジェクト定義から成る群から選択されたメンバーの１つ以上に関して以下の限定されないアクションの１つ以上を実行することができる。データへアクセスすること、データを変更すること、データを作成すること、少なくとも１つのデータオブジェクト関係定義を生成または変更することによって１つ以上のデータオブジェクト間の新たな関係を生成すること、少なくとも１つのデータオブジェクト関係定義を変更または削減することによって１つ以上のデータオブジェクト間の関係を変更しまたは削除すること、データオブジェクト関係定義へアクセスし、データソースまたはデータオブジェクトへアクセスするためにそのパラメータを使用すること、そして、新たなデータオブジェクトまたはデータオブジェクト関係を生成するために１つ以上のデータオブジェクト関係定義またはデータオブジェクトへアクセスすることができる。データ、データオブジェクト及びデータオブジェクト定義から成る群から選択された１つ以上のメンバーに対するいかなる変更をも保存するために、データ、データオブジェクトまたはデータオブジェクト定義から成る群から選択されたメンバーの１つ以上に関してコンピュータアプリケーションにより実行された何らかの変更を適切に維持（永続的にストアして）する必要がある。
【００１３】
本明細書で記述した「インスタンス」は、「クラス」、「オブジェクト」、「データオブジェクト」などのようなコンピュータシステムのメモリ内のソフトウェア論理エレメントの単一のオカレンス（Occurrence）である。これは、一般的にデータの行（row）を表す論理メモリユニットのオカレンスに類似するものである。本明細書で記述した「クラス」は、アプリケーションまたはプログラムがオブジェクト指向プログラミング言語（例えば、ＪＡＶＡ（登録商標））に基づくコンピュータアプリケーションまたはコンピュータソフトウェアプログラムにおける論理ユニットである。実際には、クラスは、オブジェクトの新たなインスタンスを割り当てるオブジェクト指向言語の論理テンプレートとして用いられる論理ユニットである。本明細書で用いる「オブジェクト」は、アプリケーションまたはプログラムがオブジェクト指向プログラミング言語（例えば、ＪＡＶＡ（登録商標））に基づくコンピュータアプリケーションまたはコンピュータソフトウェアプログラムにおける論理ユニットを意味する一般用語である。文脈によっては、テンプレートまたはインスタンスとして「オブジェクト」なる用語は、通常「クラス」なる用語と互換的に使用される。本明細書で用いるように、「データオブジェクト」は、特定のコンピュータアプリケーションドメイン内にデータを保持し、大概の場合、コンピュータシステムの永続データソース（例えば、データベースサーバ、バイナリファイル、テキストファイルまたは、コンピュータシステムのこのような永続データソースの２つ以上の組み合わせ）にそのコンテンツをストアしていることが多いオブジェクトのオカレンスの概念を表す。データオブジェクトは、その他のあらゆるデータオブジェクトといかなる関係もなく独立データオブジェクトとして存在することができる。または、データオブジェクトは、それ自体と、または、１つ以上のその他のデータオブジェクトと１つ以上の関係を有することができる。「ナビゲーション」、「ナビゲートすること」または「ナビゲートされた」なる表現は、オブジェクトまたはオブジェクト関係の１つの作成、アクセス、挿入、変更及び削除のようなある一定の目的のために一組の関連オブジェクトと影響し合うように少なくとも１つのオブジェクトをインプリメントするアクションを意味する。
【特許文献１】米国特許第６１３４５５９号
【特許文献２】米国特許出願第２００４／０１７７０９３号
【発明の開示】
【発明が解決しようとする課題】
【００１４】
上述したように、多くのソフトウェアシステムは、オブジェクトが問題ドメインにおいて現実のオブジェクトを表すオブジェクト指向方法を用いてモデル化される。これらモデル化されたオブジェクトは、「ステート」と称するオブジェクトに関する情報及びメソッドを有する。ステートデータを、例えば、オブジェクトの名前、色またはロケーションとすることができる。実際のステート情報はオブジェクト自体にストアされている。それ故、システムのユーザが２つのオブジェクトを作成し、双方が同じ物理的オブジェクトを表す場合、他方のオブジェクトのステートを不変のままにして、１方のオブジェクトのステートを変更することが可能である。この結果、複数のモデル化されたオブジェクトのステート情報間に不一致が生じるという問題が発生する。このことは、ユーザが同じ既存のオブジェクト従って同じステートに対しては１つの参照を確実に得るようにオブジェクト間の複雑な関係を維持することにより一般に対処されている。オブジェクトの存続時間がこれら外部参照に依存するシステムでは、正確に存続時間を管理すること、循環参照を回避すること、システム状態を維持すること、あるいはアプリケーションの作業セットを最小限に抑えることはかなり困難になる。
【００１５】
各オブジェクトはそのステートを保存しなければならず、その上、オブジェクト間の複雑な関係を維持しなければならないので、システム持続性は困難になる。この問題は通常、各オブジェクトに固有の識別子を与え、オブジェクトの識別子として同じオブジェクトの参照を維持することにより対処されている。しかし、ユーザにとって可能な限り分りやすくこのことをサポートするためにフレームワークが適切になされなければならない。この問題はリモートオブジェクトにもあてはまる。何故なら、全ての従属オブジェクトは同様に遠く離れていなければならないからである。しかも、システムの存続時間の間に最終的にはオブジェクトのグラフ全体にインスタンスが生成されるので、メモリ内の作業セットがかなり大きくなるおそれがある。
【００１６】
プログラマブル命令がオブジェクト自体は別として、オブジェクトのステートを識別し、操作することができれば好都合である。
【課題を解決するための手段】
【００１７】
本発明はステートを表すデータを中央データリポジトリに記憶する「ステートレス」オブジェクトを作成することである。各オブジェクトは、そのステートを共有のステートリポジトリに配置するのに用いられる固有の識別子を有する。同じステートを共有するように、同じ識別子を有する複数のオブジェクトを作成することができる。ステートが共有されるので、１つのオブジェクトを通じて行われる変更は、その他のオブジェクトのインスタンスすべてによって反映される。ステートがオブジェクト自体の外部で（例えば、中央ステートデータリポジトリ）定義され、ストアされるので、オブジェクトは「ステートレス」と称される。
【００１８】
オブジェクトは互いに独立しているので、いかなるオブジェクト参照を維持する必要はない。オブジェクトはユーザにより随意に作成され、もはや必要としない場合に破棄される。このことはオブジェクトの存続時間の管理を非常に単純化し、しかも、共有リポジトリのみとして作業セットを減少させ、ユーザにより依然として参照されるオブジェクトはメモリ内に記憶される。
【００１９】
システムのステートは、ステートデータリポジトリを保存することにより簡単に保存される。更に、ステートデータリポジトリをコピーすることにより、システムのステートの一時スナップショットを取り、ストアすることが可能である。こうすることによりシステムを前の状態に「ロールバック」することができる（例えば、無制限の「元に戻す」操作）。
【００２０】
システムのオブジェクトのサブセットに対してオブジェクト参照を共有することが可能である。例えば、幾つかのオブジェクトは、性能の点から見て中央リポジトリとの間でやり取りするのが困難であるあるいは過渡的なデータである大量のステートデータを持っていることがある。同様に、幾つかのオブジェクトは、システムのステートの特定変化をユーザに知らせるため、ある種のサブスクリプション機構をサポートすることができる。例えば、ある中央登録カタログに登録することによりこれらオブジェクトのインスタンスを共有することができる。本発明は、値ごとに、または参照ごとに中央ステートリポジトリを遠くに離すことによりオブジェクトを容易に遠くに離すことができる。
【００２１】
従って、命令を実行するためにステートレスオブジェクト方法が用意されている。この方法は、識別子に対してメモリ内のステートロケーションを相互参照するステートの中央リポジトリを確立するステップと、第１メソッドを呼び出すステップと、第１メソッドに応答して、識別子及び第２メソッドを含むステートレスオブジェクトのインスタンスを生成するステップと、識別子を読み取るステップと、識別子を用いてリポジトリ内のステートレスオブジェクトのステートロケーションを相互参照するステップと、位置付けしたステートにアクセスするステップと、ステートへのアクセスに応答して第２メソッドを呼び出すステップとを含む。
【００２２】
一態様では、ステートの中央リポジトリは第１識別子に対して第１ステートを相互参照することができ、ステートレスオブジェクトのインスタンスを生成するステップは、第１メソッドに応答して、それぞれが第１識別子を含む複数のステートレスオブジェクトのインスタンスを生成することを含む。次に、識別子を用いてステートレスオブジェクトのステートを位置付けるステップは、第１識別子を用いることにより複数のステートレスオブジェクトの各々に対して第１ステートを位置付けることを含む。
【００２３】
別の態様では、第１メソッドは、ネットワークに接続されたデバイス／ディスカバリアプリケーションから呼び出される。次に、ステートレスオブジェクトにアクセスするステップは、ネットワークに接続されたデバイスと関連するステートレスオブジェクトにアクセスすることを含む。例えば、ステートレスオブジェクトを通し番号または型式番号とすることができる。
【発明の効果】
【００２４】
本発明によるステートレスオブジェクト方法によれば、ステートがオブジェクト自体の外部で定義され、オブジェクトが互いに独立しているので、オブジェクト参照を維持する必要がなく、オブジェクトの存続時間の管理を非常に単純化することができる。
【発明を実施するための最良の形態】
【００２５】
図１は、命令を実行するステートレスオブジェクト方法を示すフローチャートである。この方法は、デジタル処理装置により実行可能である機械可読命令のプログラムを確実に実施する信号担持媒体との関連で作動する。明確にするためにこの方法を一連の番号付きステップとして示すが、明記されていない限り、順序を番号付けから推測してはならない。当然のことながら、これらステップの幾つかを抜かし、または同時に実行し、または、厳密に順序を守ることなしに実行することができる。この方法はステップ１００から開始する。
【００２６】
ステップ１０２はアプリケーションから第１メソッドを呼び出す。ステップ１０４は、第１メソッドに応答してステートレスオブジェクトのインスタンスを生成する（メモリにロードする）。ステートレスオブジェクトは識別子及び第２メソッドを含む。ステップ１０６は識別子を読み取る。ステップ１０８は、識別子を用いてステートレスオブジェクトのステートを位置付ける。ステップ１１０は、位置付けしたステートにアクセスする。ステップ１１２は、ステートへのアクセスに応答して第２メソッドを呼び出す。次に、第２メソッドは別のオブジェクトのインスタンスを生成することができる。その他の場合、ステップ１０４でインスタンスを生成したステートレスオブジェクトが最終オブジェクトであれば、第２メソッドは、オブジェクト固有の機能を実行することができる。
【００２７】
一態様では、ステップ１０１ａはステートの中央リポジトリを確立する。リポジトリは、識別子に対してメモリ内のステートロケーションを相互参照する。次に、ステップ１０８においてステートレスオブジェクトのステートを位置付けることは、識別子を用いてリポジトリにおけるステートレスオブジェクトのステートロケーションを相互参照することを含む。
【００２８】
例えば、ステップ１０１ａにおいてステートの中央リポジトリを確立することは、第１識別子に対して第１ステートロケーションを相互参照し、第２識別子に対して第２ステートロケーションを相互参照することを含む。ステップ１０４においてステートレスオブジェクトのインスタンスを生成することは、第１メソッドに応答して、第１識別子を有する第１ステートレスオブジェクトのインスタンスを生成することを含む。ステップ１１２において第２メソッドを呼び出すことは、第２識別子を含む第２ステートレスオブジェクトのインスタンスを生成することを含む。
【００２９】
別の態様では、ステップ１０１ａにおいてステートの中央リポジトリを確立することは、第１識別子に対して第１ステートを相互参照することを含む。ステップ１０４においてステートレスオブジェクトのインスタンスを生成することは、第１メソッドに応答して、各ステートレスオブジェクトが第１識別子を有する第１複数のステートレスオブジェクトのインスタンスを生成することを含む。すなわち、複数のステートレスオブジェクトには第１識別子を伴ってインスタンスが生成される。次に、ステップ１０８において識別子を用いてステートレスオブジェクトのステートを位置付けることは、第１識別子を用いて第１複数のステートレスオブジェクトの各々の第１ステートを位置付けることを含む。すなわち、第１識別子を有する各ステートレスオブジェクトは同じ（第１）ステートを有する。一態様では、ステップ１１４は、ステートの中央リポジトリを固定メモリに保存することにより「システムスナップショット」を作成する。このようにして、壊滅的なシステム障害の事態において、いかなる瞬間におけるオブジェクト及びそれぞれのステートをすべて回復することができる。
【００３０】
オブジェクトは別のオブジェクトのステートにアクセスすることができ、別のオブジェクトのステートを変更することができる。例えば、ステップ１１６は、ステートを変更して第２メソッドを代わりのメソッドと置き換えることができる。次に、ステップ１１０において位置付けしたステートにアクセスすることは、変更したステートにアクセスすることを含み、ステートへのアクセスに応答して第２メソッドを呼び出すこと（ステップ１１２）は、変更したステートに応答して代わりのメソッドを呼び出すことを含む。幾つかのシステムでは、ステートを変更するこの機能は、オブジェクト間の結合の度合も好ましくないものにする場合がある。従って、幾つかの態様では、ステップ１０４においてステートレスオブジェクトのインスタンスを生成することは、可変（変更可能な）ステートを欠いているステートレスオブジェクトのインスタンスを生成することを含む。ステートが可変であるか否かにかかわらず、識別子は典型的に不変である。すなわち、ステップ１０４は、不変の識別子を有するステートレスオブジェクトのインスタンスを生成することができる。
【００３１】
別の態様では、ステップ１０２は、ネットワークに接続されたデバイスディスカバリアプリケーションに第１メソッドを呼び出させる。次に、ステップ１０４においてステートレスオブジェクトのインスタンスを生成することは、ネットワークに接続された装置と関連するステートレスオブジェクトのインスタンスを生成することを含む。ステートレスオブジェクトの識別子を装置通し番号、型式番号、バージョン番号、製造元、ネットワークカードアドレス（ＭＡＣアドレス）またはＩＰアドレスとすることができる。次に、ステップ１１０において、ネットワークに接続された装置の位置付けされたステートにアクセスすることは、ネットワーク構成パラメータ、ＤＮＳ構成、ドメイン名システム（ＤＮＳ）名、ＤＮＳサーバアドレス及び動的ホスト構成プロトコル（ＤＨＣＰ）（例えば、リース時間、ＤＨＣＰサーバアドレス）のようなステートにアクセスすることを含む。
【００３２】
より明確には、ステップ１０２はネットワークプリンタディスカバリアプリケーションに第１メソッドを呼び出させることができる。次に、ステップ１１０において位置付けしたステートにアクセスすることは、数例を挙げれば、用紙サイズ、用紙方向、解像度、色、オン／オフ状態、ジョブ状態またはジョブ優先順位のようなプリンタ属性にアクセスすることを含む。
【００３３】
別の態様では、ステップ１０１ｂはステートポインタを永続的にストアする。すなわち、（初期）オブジェクトは、別のオブジェクトに対する参照（ポインタ）を保持することができる。ポインタを持続する代わりに、参照オブジェクトを保存することができる。あるいはまた、参照オブジェクト自体を固定メモリに保存することができる。どちらにしても、固定ロケーションはキーと呼ばれている。次に、ステップ１０４においてステートレスオブジェクトのインスタンスを生成することは、ステートポインタに向けられるキーを有するステートレスオブジェクトのインスタンスを生成することを含む。ステップ１０１ｂが複数のステートポインタをストアする場合、ステップ１０４は、特定の順序で複数のステートポインタに向けられる複数の連続したキーを有するステートレスオブジェクトのインスタンスを生成することができる。
【００３４】
異なった態様では、ステップ１０１ｃはアプリケーションを初期化する。ステップ１０１ｄは、固定メモリにストアされている情報を有するルートオブジェクトのインスタンスを生成する。次に、ステップ１０２においてアプリケーションから第１メソッドを呼び出すことはルートオブジェクトから第１メソッドを呼び出すことを含み、ステップ１０１ａにおいてステートの中央リポジトリを確立することは、固定メモリ内のステートレスオブジェクトの識別子及びステート間にリンケージを生成することを含む。
【００３５】
幾つかの態様では、ステップ１０４においてステートレスオブジェクトのインスタンスを生成することは、第１メソッドが呼び出される度に、第１識別子及び第２メソッドを含む新たなステートレスオブジェクトのインスタンスを生成することを含むことが望ましい。
【００３６】
本発明は、オブジェクトがステート及びメソッドを含む従来のオブジェクト指向システムのエレメントを組み入れることもできる。すなわち、このメソッドは、ステートレスオブジェクトまたは従来のステートオブジェクトあるいはその両方のインスタンスを生成することができる。この態様では、ステップ１１８は、属性及び第３メソッドを含むステートオブジェクトのインスタンスを生成し、ステップ１２０は第３メソッドを呼び出す。
【００３７】
図２は、プリンタディスカバリ命令を実行するステートレスオブジェクト方法を示すフローチャートである。この場合も、方法は、デジタル処理装置により実行可能である機械可読命令のプログラムを確実に実施する信号媒体の環境で解釈される。この方法はステップ２００から開始する。ステップ２０２は、識別子に対してメモリ内のステートロケーションを相互参照するステートの中央リポジトリを確立する。ステップ２０４は、メソッド及び識別子を含むステートレスオブジェクトのインスタンスをネットワークプリンタディスカバリアプリケーションから生成する。ステップ２０５は識別子を読み取る。ステップ２０６は識別子を用いてステートを位置付ける。ステップ２０８は、位置付けしたステートにアクセスする。例えば、ステップ２０８は、用紙サイズ、用紙方向、解像度、色、オン／オフ状態、ジョブ状態またはジョブ優先順位のようなプリンタ属性にアクセスすることができる。ステップ２１０は、ステートへのアクセスに応答してメソッドを呼び出す。
【００３８】
図３は、ステートレスオブジェクト方法の別の命令実行法を示すフローチャートである。この方法はステップ３００から開始する。ステップ３０２は、識別子及びメソッドを含むステートレスオブジェクトのインスタンスを生成する。ステップ３０４は識別子を読み取る。ステップ３０６は識別子を用いてステートレスオブジェクトのステートを位置付ける。ステップ３０８は、位置付けしたステートにアクセスする。ステップ３１０は、ステートへのアクセスに応答してメソッドを呼び出す。
【００３９】
一態様では、ステップ３０１は、識別子に対してメモリ内のステートロケーションを相互参照するステートの中央リポジトリを確立する。次に、ステップ３０６においてステートレスオブジェクトのステートを位置付けることは、識別子を用いてリポジトリにおけるステートレスオブジェクトのステートロケーションを相互参照することを含む。
【００４０】
図４は、ステートレスオブジェクト命令を実行するデジタル処理装置を示す図である。装置４００は、プロセッサ４０１と、プロセッサ４０１によりアクセスできるメモリ４０４とを含む。アプリケーション４０３は、第１メソッド（すなわち、ステートレスオブジェクト４０６ａのメソッド）を呼び出し、第１メソッドに応答してステートレスオブジェクト４０６（すなわち、４０６ｂ）のインスタンスを生成するためにメモリ４０４にストアされているプロセッサ実行可能命令を含む。ステートレスオブジェクト４０６ｂは識別子及び第２メソッド（図示せず）を含む。アプリケーション４０３は識別子を読み取り、識別子を用いてステートレスオブジェクト４０６ｂのステートを位置付ける。次に、アプリケーション４０３は、位置付けしたステートにアクセスし、ステートへのアクセスに応答して第２メソッドを呼び出す。
【００４１】
一態様では、メモリ４０４は、識別子４０９に対してメモリ内のステートロケーションを相互参照するステートの中央リポジトリ４０７を含む。次に、アプリケーション４０３は、識別子４０９を用いてリポジトリ４０７内のステートレスオブジェクトのステートロケーションを相互参照することによりステートレスオブジェクト４０６のステートを位置付ける。
【００４２】
また、図４は、ツリー構造のステートレスオブジェクトの概略図を示している。アプリケーション４０３は開始すると、ルートまたはファクトリオブジェクト４０２を呼び出す。ルートオブジェクト４０２は、ステート及び幾つかのメソッドが固定メモリ４０４に含まれストアされている従来のステートオブジェクトのようなものである。しかし、ルートオブジェクト４０２の結果としてインスタンスが生成されたステートレスオブジェクト４０６は典型的に識別子及びメソッド（ステートレスオブジェクトごとには図示せず）のみを含む。幾つかのステート（すなわち、ステート４０８）を固定メモリ４０４に保持することができる。その他のステート（すなわち、ステート４１０及び４１２）は揮発性メモリ４１４に保持されている。図示していないその他のステートを要求に応じて瞬時に作成することができる。ステートレスオブジェクトは、固定メモリ４０４内のキー４１８にアクセスするポインタ４１６を含むことができる。
【００４３】
一般に、各オブジェクトは、共有リポジトリ内のステートに対して固有の識別子を表す１つのみの（専用）データメンバーを有する。共有リポジトリがＸＭＬデータセットであれば、このデータメンバーを例えばＸＰａｔｈ表現とすることができ、あるいは、共有リポジトリがリレーショナルデータベースであればテーブル名及び固有ＩＤとすることができる。特定クラスのファクトリオブジェクトを用いて各オブジェクトのインスタンスが生成される。ファクトリオブジェクトの「作成」メソッドはこの固有の識別子を獲得し、ステートが共有リポジトリに存在し、その妥当性の確認を適切に行うことができればオブジェクトのインスタンスを戻す。
【００４４】
オブジェクトは、ステートを戻すか変更するメソッドを有する。ステート情報へのアクセスは、中央リポジトリにアクセスすることにより実行される。オブジェクトは別のオブジェクトのステートにアクセスすることができ、オブジェクト間に結合を生じさせることができるようにこのステートを変更することができる。システムは、オブジェクト間の内部相互作用の明確に定義されたプロトコルに基づいて進化するのが最適である。
【００４５】
オブジェクトは過渡データ（例えば、メモリポインタ、スレッドなど）を保持することもある。オブジェクトがステートレスなので、この情報も、順番に連続させることができる形式で中央リポジトリ内に保持されねばならない。例えば、幾つかのアプリケーションまたはシステムテーブルでポインタをストアすることができ、対応するキーは、番号、スレッドＩＤ、システムオブジェクトハンドルとして順番に連続する。
【００４６】
オブジェクトは階層に編成される。中央リポジトリも、オブジェクト階層を反映する階層のように論理的に編成される。階層のルートオブジェクトは、「空の」オブジェクトとして、または、永続的ストレージからユーザにより直接にインスタンス生成されたオブジェクトのみである。その他のすべてのオブジェクトは、「親」オブジェクトのメソッドにより戻される。通常、親オブジェクトは、中央リポジトリにより表されるシステムステート全体が永続的ストレージに保存され、または永続的ストレージからロードされる時点で永続的ストレージに保存され、または永続的ストレージからロードされるオブジェクトのみである。
【００４７】
システムステートの幾つかの情報（例えば、上述の過渡状態、または、ネットワーク上の物理装置から得られた情報）には非永続としてマークが付けられ、これら情報は保存されない。
【００４８】
ロード時点で、ルートオブジェクトは、それ自体でマークが付けられる幾つかの従属オブジェクトのインスタンスを生成し、必要なシステムオブジェクトを生成することにより、または、ネットワーク上の装置にクエリーを行うことによりいかなる過渡情報をも「元に戻す」機会を従属オブジェクトに与える。オブジェクトの存続時間は、オブジェクトの参照により制御される（すなわち、オブジェクトは参照カウントされる）。
【００４９】
１つ以上のオブジェクトが１つのコンテナ（例えば、ダイナミックリンクライブラリまたはシステムプロセス）にホストされる。オブジェクトのいずれかに対する外部参照（すなわち、同じコンテナ内のその他の（複数の）オブジェクトからではない参照）が存在する限り、コンテナはメモリ内にとどまる。また、この機構は、解除されない内部参照のためにコンテナがメモリ内に保持されることを防止する。
【００５０】
中央リポジトリが、スクリプトまたはイベントの形式のいずれをもサポートしない場合、幾つかのオブジェクトは、特定の状態が変化するときに、もしあれば、どんなアクションを取るべきかを示す追加のメタデータを含むことができる。アクションはオブジェクト自体で方法としてインプリメントされる。
【００５１】
オブジェクトは、問題ドメインに固有である１つ以上のインターフェースをインプリメントする。インターフェースをインプリメントするオブジェクトには、中央リポジトリに固有の識別子でマークが付けられる。従って、残りのシステムに影響を及ぼすことなくインプリメンテーションを異なるオブジェクトと置き換えることができる。
【００５２】
本発明は、命令を実行するステートレスオブジェクト方法を提供する。メソッドを呼び出し、オブジェクトのインスタンスを生成する幾つかの例を示した。本発明は、この方法を用いることができる幾つかの応用をも提供する。しかし、本発明は、これらの例のみに限定されない。当業者には、その他の変形及び実施形態が思い当たるであろう。
【図面の簡単な説明】
【００５３】
【図１】命令を実行するステートレスオブジェクト方法を示すフローチャートである。
【図２】プリンタディスカバリ命令を実行するステートレスオブジェクト方法を示すフローチャートである。
【図３】ステートレスオブジェクト方法の別の命令実行法を示すフローチャートである。
【図４】ステートレスオブジェクト命令を実行するデジタル処理装置を示す図である。
【符号の説明】
【００５４】
４００…装置、４０１…プロセッサ、４０２…ルートまたはファクトリオブジェクト、４０３…アプリケーション、４０４…メモリ、４０６，４０６ａ，４０６ｂ…ステートレスオブジェクト、４０７…中央リポジトリ、４０８，４１０，４１２…ステート、４０９…識別子、４１４…揮発性メモリ、４１６…ポインタ、４１８…キー。
【図１】
2007207222.tif 000003
【図２】
2007207222.tif 000004
【図３】
2007207222.tif 000005
【図４】
2007207222.tif 000006