【文献】
大谷弘喜,快速Python入門(3)Twistedの威力を測る,Software Design,日本,株式会社技術評論社,2006年11月18日,通巻259号(発刊193号),pp.187−200,ISSN 0916-6297
【文献】
藤枝和宏、渡部卓雄、落水浩一郎,リフレクションを利用したCORBA APIの改善,情報処理学会研究報告,日本,社団法人情報処理学会,1999年10月22日,Vol.99,No.89,pp.3−10(99-SE-124-1),ISSN 0919-6072
(58)【調査した分野】(Int.Cl.,DB名)
前記インターフェースは、前記オブジェクトが利用可能になるのを待っている間は、前記遅延参照に基づいて前記オブジェクトを要求するために前記呼び出し側が用いる呼び出しスレッドをブロックすることを回避できる、請求項2に記載のシステム。
前記インターフェースは、前記オブジェクトが利用可能になる前に、前記オブジェクトがどのクラスに関連付けられるかについて前記呼び出し側に知らせることができる、請求項2または3に記載のシステム。
【発明を実施するための形態】
【0008】
詳細な説明:
オブジェクト指向プログラミング(OOP)環境において遅延参照をサポートし得るシステムおよび方法が本明細書に記載されている。
【0009】
参照オブジェクトは、別のオブジェクトまたは指示対象への参照をカプセル化することができ、それによって参照自体を参照オブジェクトのように検討および操作することができる。遅延参照とは、まだ存在していないであろう指示対象、利用可能でないであろう指示対象、または将来のある時点でのみ利用可能になる指示対象を表わす。
【0010】
図1は、本発明のさまざまな実施の形態に係るOOP環境において遅延参照をサポートする図である。
図1に示されるように、OOP環境100、例えばJAVA(登録商標)プログラミング環境は、将来のオブジェクト103に対して遅延参照101を提供し得る。遅延参照101は、OOP環境100において遅延タイプを定義することができるインターフェース110に基づき得る。将来のオブジェクト103は、将来利用可能になるオブジェクト、例えばServer、Member、Connection、Mbean、ValueおよびConditionであり得る。
【0011】
OOP環境100において、呼び出し側102は、遅延参照101に基づいて将来のオブジェクト103を得るように要求、例えばgetメソッドを送り得る。指示対象または将来のオブジェクト10
3を決定するための計算は、getメソッドが呼び出されるまでは開始しないであろう。一方、呼び出し側102に遅延参照101を返すことは、直ちに行われる。
【0012】
本発明のさまざまな実施の形態によれば、呼び出し側102は、プロセッサ、メモリおよび通信インターフェースなどの周知のハードウェア素子を含む汎用コンピュータ上に実装され得る。呼び出し側102は、ソフトウェアプログラムの命令がプロセッサによって実行されると実現される。
【0013】
呼び出し側102から要求を受取った後、OOP環境100は、将来のオブジェクト103が現在のところ利用可能でないことを呼び出し側102に通知し得る。代替的に、OOP環境は、将来のオブジェクト103が利用可能になるとすぐに、将来のオブジェクト103を呼び出し側102に返し得る。
【0014】
本発明のさまざまな実施の形態によれば、OOP環境は、将来のオブジェクト10
3が利用可能になるのを待っている間は、将来のオブジェクト10
3を要求するために呼び出し側102が用いる呼び出しスレッド104をブロックすることを回避し得る。呼び出しスレッド104が他の重要なタスクに関与し得るので、このような非同期モデルは有益であり得る。
【0015】
さらに、OOP環境100は、遅延参照101の機能を拡張するために1つ以上のヘルパー120を使用し得る。また、OOP環境100は、別の遅延参照を遅延参照101にネスティングすることができる。
【0016】
本発明のさまざまな実施の形態によれば、OOP環境は、要求された非同期動作の結果を表わし得る将来のクラスの定義、例えばJAVA Futureクラスを提供し得る。
【0017】
将来のオブジェクト10
3の遅延参照101を用いて、OOP環境は、JAVA Futureクラスに関連するさまざまな問題を回避することができる。例えば、値を決定するための計算は、将来のクラスが作成されると開始し得る。さらに、将来のクラスは、呼び出しスレッドを強制的に待機させ得る。例えば、JAVA Futureクラスは、値が生成されるまでは永久に待機するように呼び出しスレッドをブロックしなければならないFuture.get()メソッド、または、呼び出しスレッドを特定の時間ブロックするFuture.get(time)メソッドを提供し得る。これらのメソッドは両方とも、非同期でないブロッキングアルゴリズムを開発者に書かせる。
【0018】
本発明のさまざまな実施の形態によれば、遅延参照102は、オラクル・コヒーレンス・インキュベータ・コモンにおけるcom.oracle.tools.deferredパッケージの一部としてなど、ソフトウェアパッケージの一部として有効にされるか、または、幅広く用いられるように別個のjarにおいて有効にされ得る。
【0019】
また、OOP環境100は、遅延オブジェクトが利用可能になったときにアプリケーションが通知されるようにするためのメカニズムを提供し得る。これにより、開発者は、基本となるオブジェクトが利用可能になったときに通知されるように1つ以上の遅延参照をコールバックとともに定義することができる。このように、基本的なオブジェクト指向プログラミング言語は、いつオブジェクトが「遅延した」ものではなくなるかをアプリケーション開発者に知らせることができる。
【0020】
図2は、本発明の実施の形態に係るOOP環境において遅延タイプを定義するための例示的なインターフェースの図である。
図2に示されるように、将来利用可能になるオブジェクトに対して遅延参照を提供するために、インターフェースDeferredが使用可能または実装可能である(1行目)。インターフェースDeferredは、遅延参照を返し得るget()メソッド(3行目)と、実際に存在することなしに指示対象のクラスを判断し得るgetDeferredclass()メソッド(5行目)とを含む。
【0021】
get()メソッドが呼び出し側によって呼び出されると、オブジェクト指向プログラミング言語環境は、将来のオブジェクトが利用可能になるのを待っている間は、呼び出しスレッドをブロックすることを回避し得る。結果値が生成されるのを待つJAVA Futureクラスとは異なって、インターフェースDeferredにおけるget()メソッドは、直ちに将来のオブジェクトに参照を返す。
【0022】
さらに、OOP環境は、オブジェクトが現在のところ利用可能でない場合に、ヌル値を返すか、またはランタイム例外を実行し得る。また、オブジェクト指向プログラミング言語環境は、オブジェクトが利用可能にならないかもしれない場合に、オブジェクト利用不可例外(例えばObjectNotAvailableException)を実行し得る。
【0023】
本発明のさまざまな実施の形態によれば、OOP環境は、遅延参照の機能を拡張するためのさまざまなタイプの遅延ヘルパーを提供し得る。
【0024】
例えば、以下に示される遅延ヘルパーは、オブジェクトが利用可能になるのを呼び出し側が特定の期間だけ待つ、または、特定の期間の後で再試行することを確実にし得る。
【0026】
OOP環境においては、保証遅延(ensured Deferred)タイプは、遅延タイプ(Deferred type)においてオブジェクトが利用可能になるのを特定の時間だけ待つ、遅延されたインプリメンテーション(ラッパー)を使用し得る。ここで、いかなる遅延タイプも保証されることができる。保証遅延タイプは、ネスティングタイムアウトの必要なしに、ネスティングされた遅延タイプを可能にする。
【0027】
さらに、遅延タイプはブロッキングセマンティックスを実装せず、保証タイプのみが実装する。保証遅延は、カスタマイズできるセマンティックスにより「待機する」ことを可能にするが、遅延タイプは、呼び出しスレッドをブロックしないであろう。例えば、遅延タイプは、指示対象が利用可能にならないと想定される場合に、(ランタイム)ObjectNotAvailableExceptionsを実行し得る。
【0028】
以下に示されるように、OOP環境は、最大(デフォルト)期間だけ待つ、または、デフォルト期間の後で再試行することによって、遅延値を決定し得る。
【0030】
また、オブジェクト指向プログラミング言語環境は、呼び出し側が明確な最大タイムアウトを指定することを可能にする。
【0032】
本発明の実施の形態によれば、OOP環境は、遅延ヘルパーの概念に基づいて遅延方法の呼び出しをサポートし得る。
【0033】
例えば、以下に示されるように、インターフェースおよび/またはオブジェクトの記録動的プロキシを作成し得る。
【0035】
このように、OOP環境は、遅延タイプdeferredの「記録(recording)」動的プロキシを得ることができる。
【0037】
また、OOP環境は、以下に示されるように、最後に記録された呼び出しコールを表わす遅延タイプを得ることができる。
【0039】
最終的に、OOP環境は、list.sizeに対する最後に記録された呼び出しコールを表わす遅延タイプDeferred<Integer>を得ることができる。
【0041】
このように、オブジェクトの最後に記録された動的プロキシに関する値が、遅延値として呼び出し側に返されることができ、例えば遅延整数は、将来のリストのサイズを表わし得る。また、遅延参照は、別の遅延参照にネスティングされ得る。
【0042】
また、以下に示されるように、OOP環境は、連鎖法をサポートし得る。
【0044】
また、オブジェクト指向プログラミング言語環境は、遅延タイプ上での遅延法の呼び出しをサポートし得る。
【0046】
遅延参照は、分散データ環境において有益であり得る。例えば、複数回試行ブロックを用いる代わりに、簡易試験は、以下を単に呼び出して分散データ環境におけるバーチャルマシーンおよびMbeanサーバが利用可能であることを保証することによって、クラスタが特定のサイズに達することを保証し得る。
【0048】
さらに、OOP環境は、さまざまな他の遅延ヘルパーを提供し得る。例えば、上手くいったget()要求の結果をキャッシュに格納し得る遅延ヘルパーがあり得る。
【0050】
また、遅延ヘルパーは、値TをDeferred<T>に変換し得る。
【0052】
また、OOP環境は、遅延タイプのJava Future表現を得ることができる。
【0054】
実施例
図3は、本発明の実施の形態に係る、サーバから管理ビーン情報を取得するための例示的なソフトウェア疑似コードの図である。
図3に示されるように、呼び出し側は、オブジェクトの名前objectName(6行目)に基づいて、関連の管理ビーン情報、例えばMBeanInfoインスタンスを検索する前に、サーバ、例えばJMX MBeanServerインスタンス(5行目)への接続を構築し得る。
【0055】
OOP環境は、サーバから管理ビーン情報を取得する前にさまざまな条件が満たされることを確実にする必要があるであろう。例えば、JMX MBeanServerインスタンスが起動しているバーチャルマシーン、例えばJAVAバーチャルマシーン(JAVA virtual machine:JVM)は、JMX MBeanServerが作成され得る前に始動される必要があるであろう。さらに、サーバ接続、例えばMbeanServerConnectionは、MBeanが登録された状態で利用可能である必要があるであろう。また、オブジェクト指向プログラミング言語環境は、IOException、InstanceNotFoundException、ClassCastExceptionなどのさまざまな他の例外に対処する必要もあるであろう。
【0056】
本発明のさまざまな実施の形態によれば、オブジェクト指向プログラミング言語環境は、これらの条件が満たされ得ることを確実にするために、以下に示されるtryブロックを使用し得る。
【0058】
tryブロックを用いる上記のアプローチは、例えばスレッドがどれぐらいの時間スリープすべきであるのか、およびどのようにtryブロックが失敗または成功をより早期に決定できるようにすればよいのかといったさまざまな問題を引起こす可能性がある。また、再試行ループが多すぎると、コードが過度に複雑になり、理解するのが難しくなる可能性がある。
【0059】
図2に定義されるような保証遅延タイプを用いて、DeferredJMXConnectorインスタンスが以下に作成され得る。
【0061】
そして、遅延したMBeanInfoが作成され得る。
【0063】
したがって、サーバから管理ビーン情報を取得するためのコードは、以下のように単純に実現可能である。
【0065】
上記に示されるように、保証遅延タイプを用いて、保証遅延タイプは、遅延タイプをパラメータとみなす保証方法に「待機」ロジックを分離することができる。さらに、保証遅延タイプは、ネスティングタイムアウトなしに、ネスティングされた遅延タイプを可能にする。
【0066】
以下に示される実施例では、OOP環境は、サービスが起動していることをアサートし得る。
【0068】
また、OOP環境は、キャッシュAおよびキャッシュBという名前の2つのキャッシュが同等のものであることをアサートし得る。
【0070】
図4は、本発明の実施の形態に係るOOP環境において遅延参照をサポートするための例示的なフローチャートである。
図4に示されるように、ステップ401において、OOP環境は、将来利用可能になるオブジェクトに対して遅延参照を提供し得る。さらに、ステップ402において、遅延参照に基づいてオブジェクトを得るように呼び出し側から要求を受取った後、OOP環境は、オブジェクトが利用可能である場合にはオブジェクトを呼び出し側に返し得て、または、オブジェクトが現在のところ利用可能でない場合および/またはオブジェクトが利用可能にならない場合には呼び出し側に通知し得る。
【0071】
図5は、本発明の実施の形態に係るOOP環境において遅延参照をサポートするための例示的なシステムの図である。
図5に示されるように、システム500は、インターフェース510と呼び出し側502とを備えるように示されている。呼び出し側502呼び出し側は、遅延参照に基づいてオブジェクトを得るように要求をインターフェース510に送ることができる。インターフェース510は、将来利用可能になるオブジェクトに対して遅延参照を提供することができ、呼び出し側から要求を受取った後、オブジェクトが利用可能である場合にはオブジェクトを呼び出し側に返すこと、ならびに、オブジェクトが現在のところ利用可能でない場合およびオブジェクトが利用可能にならない場合のうちの少なくとも1つの場合には呼び出し側に通知すること、のうちの1つを実行することができる。
【0072】
インターフェース510は、オブジェクトが利用可能になるのを待っている間は、遅延参照に基づいてオブジェクトを要求するために呼び出し側502が用いる呼び出しスレッドをブロックすることを回避できる。また、インターフェース510は、オブジェクトが利用可能になる前に、オブジェクトがどのクラスに関連付けられるかについて呼び出し側502に知らせることができる。さらに、インターフェース510は、オブジェクトが現在のところ利用可能でない場合に、ランタイム例外を実行するか、またはヌル値を返すことができる。さらに、インターフェース510は、オブジェクトが利用可能にならない場合に、オブジェクト利用不可例外を実行することができる。インターフェース510は、遅延参照を別の遅延参照にネスティングすることを可能にし得る。
【0073】
システム
500は、ヘルパー520をさらに備え得る。ヘルパー520は、オブジェクトが利用可能になるのを呼び出し側502が最大期間だけ待つことを確実にすることができる。また、ヘルパー520は、オブジェクトに関連付けられるクラス定義に基づいてオブジェクトに対する遅延参照を作成することができる。さらに、ヘルパー520は、オブジェクトの記録動的プロキシを得て、オブジェクトの記録動的プロキシによって、最後に記録された呼び出しの遅延表現を提供することができる。
【0074】
一実施の形態によれば、1つ以上のマイクロプロセッサ上で動作するオブジェクト指向プログラミング言語環境において遅延参照をサポートするためのシステムが開示されている。当該システムは、将来利用可能になるオブジェクトに対して遅延参照を提供するための手段と、遅延参照に基づいてオブジェクトを得るように呼び出し側から要求を受取った後、オブジェクトが利用可能である場合にはオブジェクトを呼び出し側に返すこと、ならびに、オブジェクトが現在のところ利用可能でない場合およびオブジェクトが利用可能にならない場合のうちの少なくとも1つの場合には呼び出し側に通知すること、のうちの1つを実行するための手段とを備える。
【0075】
好ましくは、当該システムは、オブジェクトが利用可能になるのを待っている間は、遅延参照に基づいてオブジェクトを要求するために呼び出し側が用いる呼び出しスレッドをブロックすることを回避するための手段をさらに備える。
【0076】
好ましくは、当該システムは、オブジェクトが利用可能になる前に、オブジェクトがどのクラスに関連付けられるかについて呼び出し側に知らせるための手段をさらに備える。
【0077】
好ましくは、当該システムは、オブジェクトが現在のところ利用可能でない場合に、ランタイム例外を実行するか、またはヌル値を返すための手段をさらに備える。
【0078】
好ましくは、当該システムは、オブジェクトが利用可能にならない場合に、オブジェクト利用不可例外を実行するための手段をさらに備える。
【0079】
好ましくは、当該システムは、オブジェクトが利用可能になるのを呼び出し側が最大期間だけ待つことを確実にするための手段をさらに備える。
【0080】
好ましくは、当該システムは、オブジェクトに関連付けられるクラス定義に基づいてオブジェクトに対する遅延参照を作成するための手段をさらに備える。
【0081】
好ましくは、当該システムは、遅延参照を別の遅延参照にネスティングするための手段をさらに備える。
【0082】
好ましくは、当該システムは、オブジェクトの記録動的プロキシを得るための手段と、オブジェクトの記録動的プロキシによって、最後に記録された呼び出しの遅延表現を提供するための手段とをさらに備える。
【0083】
好ましくは、当該システムは、遅延オブジェクトが利用可能になったときにアプリケーションが通知されるようにするためのメカニズムを提供するための手段をさらに備える。
【0084】
一実施の形態によれば、オブジェクト指向プログラミング言語環境において遅延参照をサポートするためのシステムが開示されている。当該システムは、将来利用可能になるオブジェクトに対して遅延参照を提供するように構成されたインターフェースと、遅延参照に基づいてオブジェクトを得るようにインターフェースに要求を送るように構成された呼び出し側とを備える。インターフェースは、呼び出し側から要求を受取った後、オブジェクトが利用可能である場合にはオブジェクトを呼び出し側に返すこと、ならびに、オブジェクトが現在のところ利用可能でない場合およびオブジェクトが利用可能にならない場合のうちの少なくとも1つの場合には呼び出し側に通知すること、のうちの1つを実行するようにさらに構成される。
【0085】
好ましくは、インターフェースは、オブジェクトが利用可能になるのを待っている間は、遅延参照に基づいてオブジェクトを要求するために呼び出し側が用いる呼び出しスレッドをブロックすることを回避することができる。
【0086】
好ましくは、インターフェースは、オブジェクトが利用可能になる前に、オブジェクトがどのクラスに関連付けられるかについて呼び出し側に知らせることができる。
【0087】
好ましくは、インターフェースは、オブジェクトが現在のところ利用可能でない場合に、ランタイム例外を実行するか、またはヌル値を返すことができる。
【0088】
好ましくは、インターフェースは、オブジェクトが利用可能にならない場合に、オブジェクト利用不可例外を実行することができる。
【0089】
好ましくは、当該システムは、オブジェクトが利用可能になるのを呼び出し側が最大期間だけ待つことを確実にすることができるヘルパーをさらに備える。
【0090】
好ましくは、当該システムは、オブジェクトに関連付けられるクラス定義に基づいてオブジェクトに対する遅延参照を作成することができるヘルパーをさらに備える。
【0091】
好ましくは、インターフェースは、遅延参照を別の遅延参照にネスティングすることができる。
【0092】
好ましくは、当該システムは、オブジェクトの記録動的プロキシを得て、オブジェクトの記録動的プロキシによって、最後に記録された呼び出しの遅延表現を提供することができるヘルパーをさらに備える。
【0093】
図6は、本特徴を示すための機能ブロック図である。本特徴は、オブジェクト指向プログラミング言語環境において遅延参照をサポートするためのシステム600として実現され得る。システム600は、1つ以上のマイクロプロセッサ610と、1つ以上のマイクロプロセッサ610上で起動するインターフェース110とを含む。1つ以上のマイクロプロセッサ610は、将来利用可能になるオブジェクトに対して遅延参照を提供するように構成された提供部620と、遅延参照に基づいてオブジェクトを得るように呼び出し側から要求を受取った後、オブジェクトが利用可能である場合にはオブジェクトを呼び出し側に返すこと、ならびに、オブジェクトが現在のところ利用可能でない場合およびオブジェクトが利用可能にならない場合のうちの少なくとも1つの場合には呼び出し側に通知することのうちの1つを実行するように構成された実行部630とを含む。実行部630は、リターン部631と、通知部632とを含む。リターン部631は、オブジェクトが利用可能である場合にはオブジェクトを呼び出し側にリターンする(返す)ように構成される。通知部632は、オブジェクトが現在のところ利用可能でない場合およびオブジェクトが利用可能にならない場合のうちの少なくとも1つの場合には呼び出し側に通知するように構成される。
【0094】
本発明は、1つ以上のプロセッサ、メモリ、および/または本開示の教示に従ってプログラムされたコンピュータ読取可能な記録媒体を含む1つ以上の従来の汎用もしくは専用デジタルコンピュータ、計算装置、機械、またはマイクロプロセッサを用いて好都合に実現され得る。ソフトウェアの技術分野における当業者に明らかであるように、本開示の教示に基づいて、熟練したプログラマによって適切なソフトウェアコーディングが容易に準備され得る。
【0095】
いくつかの実施の形態では、本発明は、コンピュータをプログラムして本発明のプロセスのいずれかを実行するために使用可能な命令を格納させた記録媒体またはコンピュータ読取可能な媒体であるコンピュータプログラム製品を含む。記録媒体としては、フロッピー(登録商標)ディスク、光ディスク、DVD、CD−ROM、マイクロドライブ、光磁気ディスク、ROM、RAM、EPROM、EEPROM、DRAM、VRAM、フラッシュメモリデバイス、磁気もしくは光カード、(分子メモリICを含む)ナノシステムを含む任意のタイプのディスク、または、命令および/もしくはデータの格納に好適な任意のタイプの媒体もしくはデバイスを挙げることができるが、これらに限定されるものではない。
【0096】
本発明の上記の説明は、例示および説明の目的で行われた。本発明の上記の説明は、網羅的であるよう意図したものではなく、開示されている厳密な形態に本発明を限定することを意図したものではない。多くの変形例および変更例が当業者に明らかであろう。本発明の原理およびその実際の適用を最もよく説明することによって、さまざまな実施の形態について、および意図される特定の用途に適したさまざまな変形例によって、本発明を当業者が理解できるようにするために、実施の形態は選択および説明された。本発明の範囲は、以下の特許請求の範囲およびそれらの等価物によって規定されることが意図されている。