JP4627636B2 - 非同期コンポーネントをアプリケーションフレームワークアグノスティックにするメカニズム - Google Patents

非同期コンポーネントをアプリケーションフレームワークアグノスティックにするメカニズム Download PDF

Info

Publication number
JP4627636B2
JP4627636B2 JP2004174742A JP2004174742A JP4627636B2 JP 4627636 B2 JP4627636 B2 JP 4627636B2 JP 2004174742 A JP2004174742 A JP 2004174742A JP 2004174742 A JP2004174742 A JP 2004174742A JP 4627636 B2 JP4627636 B2 JP 4627636B2
Authority
JP
Japan
Prior art keywords
application
application framework
notification
component
completion
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.)
Expired - Fee Related
Application number
JP2004174742A
Other languages
English (en)
Other versions
JP2005004771A (ja
Inventor
ディー.シェクター グレッグ
エリック クリステンセン ヤン
ジェイ.マルチェック マイケル
ロブズマン ドミトリー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2005004771A publication Critical patent/JP2005004771A/ja
Application granted granted Critical
Publication of JP4627636B2 publication Critical patent/JP4627636B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Description

本発明は、ソフトウェア開発技術に関する。より詳細には、本発明は、非同期オペレーションマネージャが非同期コンポーネントに標準化インターフェースを提供し、それによって、非同期コンポーネントが組み込まれるアプリケーションを構築するのに使用される特定のアプリケーションフレームワークの如何にかかわらず、非同期コンポーネントが非同期オペレーションマネージャと同一の方法でインターフェースするメカニズムに関する。
コンピューティング技術は、我々が働き、遊ぶ仕方を一変させた。コンピューティング技術は、相互接続処理、メモリ、通信、およびユーザインターフェース装置を含む精巧なハードウェアに依拠する。実質上無限のアプリケーションを使用可能とするために、ソフトウェアは、こうした様々な物理的構成要素が互いに、およびユーザとどのように対話するかを制御する。
ソフトウェアは、ソースコードを最もしばしば使用して、人間のプログラマによって作成される。ソースコードは、人間のプログラマにとって比較的直感的な言語およびシンボルを含む。しかし、ソースコードをプロセッサで直接解釈することはできない。したがって、機能するソフトウェアを得るために、ソースコードは、ソフトウェアの機能を使用可能にするために特定のどんなアクションを実行すべきかに関してプロセッサに命令することができるバイナリ命令/データに解釈またはコンパイルされる。
ソフトウェアは、時が進むにつれてますます複雑になりつつある。アプリケーションが数千、さらには数百万の別個のバイナリ命令を含むことも全く珍しくない。ソフトウェア開発におけるこの急速な進歩は主に、ひとたび特定の低レベルタスクを実行するコンポーネントが構築されたなら、アプリケーションの高レベル機能が全く異なる場合であっても、その低レベルタスクを実行すべき多数の異なるアプリケーションにそのコンポーネントを組み込むことができることによって可能となっている。コンポーネントは、実行された場合に1つまたは複数の機能を実施する離散的な1組のコンピュータ実行可能命令である。コンポーネントは、他のソフトウェアコンポーネントまたはアプリケーションによって呼び出すことができる。オブジェクト指向プログラミングがこれを可能にする。したがって、アプリケーションプログラマは、コンポーネントと適切にインターフェースする関数呼出しを配置することによってアプリケーションに組み込むことができるしばしば多種多様なコンポーネントにアクセスすることができる。アプリケーションは多数の異なるコンポーネントを組み込むことができる。
アプリケーションは、広く使用される多数のアプリケーションフレームワークの1つを使用して構築することができる。アプリケーションフレームワークの例には、WINDOWS(登録商標)フォームクライアント側ユーザインターフェース(UI)プログラミングフレームワーク、ASP.NETサーバ側UIプログラミング/HTTPフレームワーク、フリースレッド化コンソールアプリケーション、SQLサーバに組み込まれたアプリケーションなどが含まれる。通常、複数のアプリケーションフレームワークの1つを使用して書き込まれた可能性のあるアプリケーションにとってコンポーネントが使用可能となるには、コンポーネントは通常、複数のフレームワークのいずれかに追従するアプリケーションで動作するように具体的に設計および記述されるか、各フレームワークに対応するコンポーネントが存在しなければならない。
コンポーネントが非同期オペレーションを実行する場合に特定のアプリケーションフレームワークを考慮に入れることは重要である。非同期オペレーションは、他のプロセスの進行中に、実行の別のスレッド上または何らかのハードウェア上で完了に向かって進行するオペレーションである。非同期オペレーションが完了した場合、イベント通知が行われ、目標のアプリケーションフレームワークのコンテキストで、したがって目標のアプリケーションフレームワークの規則に合わせて書かれたコードが実行される。しかし、通知が返されるコンテキストおよびスレッドは、コンポーネントを組み込むアプリケーションを構築するのに使用されるアプリケーションフレームワークに大いに依存する。したがってコンポーネントは、対応するアプリケーションフレームワークで使用される特定のスレッド化/同時処理モデルに従って通知が発行された場合に、通知を受け取る(次いで、対応する通知をアプリケーションに送る)準備ができているように組み込まれる。そうでない場合、非同期オペレーションは失敗する可能性がある。
したがって、非同期オペレーションが複数のフレームワークで動作するためには、別個のコンポーネントがアプリケーションフレームワークのうちの1つについて構築され、別個のコンポーネントが別のアプリケーションフレームワークについて構築され、アプリケーションフレームワークのすべてについて同様に構築される。代替として、複数のアプリケーションフレームワークの任意の1つと共に動作するようにコンポーネントを構築することもできる。しかし、いずれの場合でも、コンポーネントの作者は、各アプリケーションフレームのワークスレッド化/同時処理モデルを考慮する必要があり、明示的に起草されたソースコードを介してスレッド化/同時処理モデル問題に対処する必要がある。
したがって、コンポーネントの作者がスレッド化/同時処理モデルなどのアプリケーションフレームワーク特有の問題を考慮しなくとも、コンポーネントが多種多様なアプリケーションフレームワークの下で動作することを可能にするメカニズムがあれば有利であろう。あるコンポーネントはあるアプリケーションフレームワークでしか動作しないので、アプリケーションがコンポーネントの使用に限定されなければさらに有利であろう。
従来の現況技術に伴う上記の問題は、本発明の原理によって克服される。本発明の原理では、非同期オペレーションマネージャにより、コンポーネントを組み込むアプリケーションを構築するのに使用されるアプリケーションフレームの如何にかかわらず、コンポーネントが非同期オペレーションを標準化された方法で実行することが可能となる。これにより、単一コンポーネントをより容易に構築することが可能となると共に、アプリケーションを構築するのにどのアプリケーションフレームワークが使用されたかにかかわらず、そのコンポーネントが非同期オペレーションを実行することが可能となる。
本発明の原理によれば、アプリケーションが、特定のアプリケーションフレームワークに従って構築される。コンポーネントがそのアプリケーションに組み込まれる。非同期オペレーションを実行すべき場合、コンポーネントが、アプリケーションを構築するのに使用された特定のアプリケーションフレームワークとは無関係の方法で標準関数呼出しを発行するように構成される。非同期オペレーションマネージャが、アプリケーションを構築するのに使用された特定のアプリケーションフレームワークを検出し、標準関数呼出しを受け取り、アプリケーションフレームワークのスレッド化/同時処理モデルに従って非同期オペレーションを実行し、非同期オペレーションが完了した場合にスレッド化/同時処理モデルに従う方法で通知をコンポーネントに発行するように構成される。非同期オペレーションマネージャは、アプリケーションフレームワーク自体から通知または関数呼出しを受け取ることによってアプリケーションフレームワークを判定することができる。
本発明の追加の特徴および利点を以下で説明する。本発明の追加の特徴および利点の一部はその説明から明らかとなり、または本発明を実施することによって理解することができよう。本発明の特徴および利点は、頭記の特許請求の範囲で具体的に指摘される各機器と、各機器の組合せによって実現し、得ることができる。本発明の上記およびその他の特徴は、以下の説明と特許請求の範囲からより完全に明らかとなり、または下記で説明する本発明を実施することによって理解することができよう。
本発明の上記で列挙したあるいはその他の利点および特徴を得る方法を説明するために、添付の図面に示される本発明の特定の実施形態を参照しながら、上記で簡潔に説明した本発明のより具体的な説明を行う。これらの図面は本発明の典型的な実施形態だけを示しており、したがって本発明の範囲を限定するものとみなすべきでないことを理解した上で、添付の図面を使用することにより、本発明をさらに具体的かつ詳細に説明する。
本発明の原理は、非同期オペレーションマネージャにより、コンポーネントを組み込むアプリケーションを構築するのに使用されるアプリケーションフレームの如何にかかわらず、コンポーネントが非同期オペレーションを標準化された方法で実行することが可能となるメカニズムに関する。これにより、単一コンポーネントをより容易に構築することが可能となると共に、アプリケーションを構築するのに複数のアプリケーションフレームワークのうちどれが使用されたかにかかわらず、そのコンポーネントが非同期オペレーションを実行することが可能となる。
本発明の範囲内の実施形態には、コンピュータ実行可能命令またはデータ構造を搬送し、あるいはそれが格納されたコンピュータ可読媒体が含まれる。このようなコンピュータ可読媒体は、汎用コンピュータまたは専用コンピュータでアクセスすることができる入手可能などんな媒体でもよい。例えば、限定はしないがこのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD−ROMまたはその他の光ディスクストレージ、磁気ディスクストレージまたはその他の磁気記憶装置などの物理的記憶媒体、あるいはコンピュータ実行可能命令またはデータ構造の形態の所望のプログラムコード手段を搬送または記憶するのに使用することができ、かつ汎用コンピュータまたは専用コンピュータでアクセスすることができるその他のどんな媒体も含むことができる。
ネットワークまたはその他の通信接続(有線、無線、あるいは有線と無線の組合せ)を介して情報がコンピュータに転送または提供される場合、コンピュータは、その接続をコンピュータ可読媒体として適切に認識する。したがって、そのようなどんな接続もコンピュータ可読媒体と呼ぶことは適切である。上記の組合せもまた、コンピュータ可読媒体の範囲内に含まれるべきである。コンピュータ実行可能命令は、例えば、ある機能または1群の機能を汎用コンピュータ、専用コンピュータ、または専用処理装置に実施させるどんな命令およびデータも含む。コンピュータ実行可能命令は、例えばバイナリ命令、アセンブリ言語などの中間フォーマット命令、さらにはソースコードでよい。必須ではないが、ネットワーク環境内のコンピュータによって実行されるプログラムモジュールなどのコンピュータ実行可能命令の一般的状況で本発明を説明する。一般に、プログラムモジュールは、特定のタスクを実行し、または特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。
パーソナルコンピュータ、ハンドヘルド装置、マルチプロセッサシステム、マイクロプロセッサベースの/プログラム可能な消費者向け電子機器、ネットワークPC、ミニコンピュータ、メインフレームコンピュータなどを含む多くのタイプのコンピュータシステム構成を用いてネットワークコンピューティング環境で本発明を実施できることを当業者は理解されよう。本発明は、(有線リンク、無線リンク、または有線リンクと無線リンクの組合せによって)通信ネットワークを介してリンクされるローカル/リモート処理装置によってタスクが実行される分散コンピューティング環境でも実施することができる。分散コンピューティング環境では、プログラムモジュールは、ローカルメモリ記憶装置とリモートメモリ記憶装置のどちらにも位置することができる。
図1に、本発明の原理を使用することができるコンピュータ120の形態の適切なコンピューティング環境を示す。コンピュータ120は、処理装置121と、システムメモリ122と、システムメモリ122を含む様々なシステム構成要素を処理装置121に結合するシステムバス123とを含む。
システムバス123は、様々なバスアーキテクチャのうちのいずれかを用いたメモリバスまたはメモリコントローラ、周辺機器バス、およびローカルバスを含むいくつかのタイプのバス構造のうちのいずれでもよい。システムメモリは、読取り専用メモリ(ROM)124およびランダムアクセスメモリ(RAM)125を含む。スタートアップ時などにコンピュータ120内の要素間で情報を転送する助けになる基本ルーチンを含む基本入出力システム(BIOS)126が、ROM124内に格納される。
コンピュータ120はまた、磁気ハードディスク139を読み書きするハードディスクドライブ127と、取外し可能磁気ディスク129を読み書きする磁気ディスクドライブ128と、CD−ROM、またはその他の光媒体などの取外し可能光ディスク131を読み書きする光ディスクドライブ130も含むことができる。磁気ハードディスクドライブ127、磁気ディスクドライブ128、および光ディスクドライブ130は、それぞれハードディスクドライブインターフェース132、磁気ディスクドライブインターフェース133、および光ディスクドライブインターフェース134によってシステムバス123に接続される。各ドライブと、それに関連するコンピュータ可読媒体は、コンピュータ120向けに、コンピュータ実行可能命令、データ構造、プログラムモジュール、およびその他のデータの不揮発性記憶を実現する。本明細書で説明する例示的環境では、磁気ハードディスク139、取外し可能磁気ディスク129、および取外し可能光ディスク131を利用するが、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、RAM、ROMなどを含む、データを格納するためのその他のタイプのコンピュータ可読媒体も使用することができる。
オペレーティングシステム135、1つまたは複数のアプリケーションプログラム136、他のプログラムモジュール137、およびプログラムデータ138を含む1つまたは複数のプログラムモジュールを有するプログラムコード手段は、ハードディスク139、磁気ディスク129、光ディスク131、ROM124、またはRAM125上に格納することができる。ユーザは、キーボード140、ポインティングデバイス142、あるいはマイクロフォン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、スキャナなどのその他の入力装置(図示せず)を介してコンピュータ120にコマンドおよび情報を入力することができる。上記およびその他の入力装置はしばしば、システムバス123に結合されたシリアルポートインターフェース146を介して処理装置121に接続される。代替として、入力装置は、パラレルポート、ゲームポート、ユニバーサルシリアルバス(USB)などのその他のインターフェースによって接続することもできる。モニタ147または他のディスプレイ装置もまた、ビデオアダプタ148などのインターフェースを介してシステムバス123に接続される。モニタに加えて、パーソナルコンピュータは一般に、スピーカやプリンタなどのその他の周辺出力装置(図示せず)を含む。
コンピュータ120は、リモートコンピュータ149aおよび149bなどの1つまたは複数のリモートコンピュータに対する論理接続を用いて、ネットワーク環境で動作することができる。リモートコンピュータ149aおよび149bはそれぞれ、別のパーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピア装置、またはその他の共通ネットワークノードでよく、一般にはコンピュータ120に関する上述の要素のうちの多数またはすべてを含むが、図1にはメモリ記憶装置150aおよび150bと、その関連するアプリケーションプログラム136aおよび136bだけを示してある。図1に示す論理接続は、ローカルエリアネットワーク(LAN)151およびワイドエリアネットワーク(WAN)152を含む。これらは単に例として示したに過ぎず、限定的なものではない。このようなネットワーキング環境は、オフィス全体または企業全体のコンピュータネットワーク、イントラネット、およびインターネットで一般的なものである。
LANネットワーキング環境で使用する場合、コンピュータ120は、ネットワークインターフェース/アダプタ153を介してローカルネットワーク151に接続される。WANネットワーキング環境で使用する場合、コンピュータ120は、モデム154、無線リンク、あるいはインターネットなどの広域エリアネットワーク152を介して通信を確立するその他の手段を含む。モデム154は内蔵でも外付けでもよく、シリアルポートインターフェース146を介してシステムバス123に接続される。ネットワーク環境では、コンピュータ120に関して示したプログラムモジュールまたはその一部は、リモートメモリ記憶装置内に格納することができる。図示するネットワーク接続は例示的なものであって、広域エリアネットワーク152を介して通信を確立するその他の手段も使用できることを理解されよう。
図1は本発明に適した動作環境を表すが、本発明の原理は、ネットワークサイトに対してブラウジングすることができるどんなコンピューティングシステムでも使用することができる。図1に示すコンピューティングシステムは単なる例に過ぎず、本発明の原理を実施することのできる多種多様な環境の小部分さえも決して表していない。この説明および特許請求の範囲において、「コンピューティングシステム」とは、大まかには、ソフトウェアを使用して1つまたは複数の機能を実行することができる任意のハードウェアコンポーネントと定義される。コンピューティングシステムの例には、デスクトップコンピュータ、ラップトップコンピュータ、携帯情報端末(PDA)、電話、あるいは処理能力を有する任意のその他のシステムまたは装置が含まれる。
図2に、本発明の原理を説明する際の助けとなる階層200を示す。階層200は、何らかの1つの特定のコンピューティングシステム上にある必要はない。階層200は、水平楕円201Iによって表される潜在的にさらに多くのアプリケーションの中のアプリケーション201Aから201Hを含むいくつかのアプリケーション201を含む。こうしたアプリケーションは、一般にソフトウェアアプリケーションを表す。ソフトウェアアプリケーションは通常、作者にソースコードを起草させることによって作成される。次いで、コンパイラ(またはインタプリタ)が、そのソースコードを、プロセッサが読み取って従うことができるコンピュータ実行可能命令にコンパイル(または解釈)する。
オブジェクト指向プログラミングの利点の1つは、別々に構築したコンポーネントをアプリケーションに組み込むことが可能なことである。コンポーネントは、実行された場合に1つまたは複数の機能を実施する離散的な1組のコンピュータ実行可能命令である。コンポーネントは、他のソフトウェアコンポーネントまたはアプリケーションによって呼び出すことができる。別々に構築したコンポーネントを単に関数呼出しによってアプリケーションに組み込むことができるので、アプリケーションがそのコンポーネントによって提供される機能を有するべきであるごとに、コンポーネントを再構築する必要がない。したがって、オブジェクト指向プログラミングにより、アプリケーション作者が他のアプリケーション作者の作品を組み込むことが可能となり、それによってアプリケーション作者が、他のアプリケーション作者によって既に対処されている詳細なオペレーションで停滞するのではなく、アプリケーションのより先進の機能により注意を集中することが可能となる。コンポーネントを再設計および再構築する代わりに、アプリケーション作者がする必要があるのは、アプリケーションが適切に構築された関数呼出しをコンポーネントに対して行うように、かつアプリケーションがコンポーネントから受け取った関数呼出しを適切に解釈することができるように十分なコードを起草することだけである。コンポーネント設計者は通常、関数呼出しを行い、関数呼出しを受け取るためのコンポーネント設計者の仕様を文書化して、アプリケーション設計者がそれを行うことができるようにする。
図2に戻ると、階層は、水平楕円202Gによって表される潜在的にさらに多くのコンポーネントの中のコンポーネント202Aから202Fを含むいくつかのコンポーネント202を含む。こうしたコンポーネント202は、コンポーネント作成メカニズムと、その後に続く反復関数呼出し/戻りメカニズムとによって、アプリケーションに組み込むことが可能となるように構築することができるコンポーネントを表す。
アプリケーション201は、いくつかの使用可能なアプリケーションフレームワーク204の1つを使用して構築することができる。アプリケーションフレームワークは、水平楕円204Eによって表される潜在的にさらに多くのアプリケーションフレームワークの中のアプリケーションフレームワーク204Aから204Dを含む。アプリケーションフレームワークは、適切に機能するソフトウェアアプリケーションの構築を実施する環境および1組のツールを提供する。アプリケーションフレームワークの例には、WINDOWS(登録商標)フォームクライアント側ユーザインターフェース(UI)プログラミングフレームワーク、ASP.NETサーバ側UIプログラミング/HTTPフレームワーク、フリースレッド化コンソールアプリケーション、SQLサーバに組み込まれたアプリケーション、および現在開発中、または将来開発される可能性のあるその他の物が含まれる。アプリケーションフレームワークはまた、しばしば当技術分野で「アプリケーションモデル」とも呼ばれる。
通常使用可能なコンポーネントに比べて、通常使用可能なアプリケーションフレームワークは比較的少数であり、通常使用可能なアプリケーションに比べて、通常使用可能なコンポーネントは比較的少数である。図2では、この現象を示すために、コンポーネント202よりも多数のアプリケーション201が示されており、アプリケーションフレームワーク204よりも多数のコンポーネント202が示されているが、アプリケーション201、コンポーネント202、およびアプリケーションフレームワーク204は決して慣例的なものではない。
階層200はまた、非同期オペレーションマネージャ203も含む。前述のように、異なるアプリケーションフレームワークは非同期オペレーションとなった場合に異なるスレッド化/同時処理モデルを有する。非同期オペレーションは、アプリケーションレベルプロセスの進行中に、実行の別のスレッド上またはいくつかのハードウェア上で完了に向かって進行するオペレーションである。一部のアプリケーションフレームワークは、非同期オペレーションが完了した場合に実行することができるスレッドに関して制限を持たない。別のアプリケーションは、非同期オペレーションがユーザインターフェースをレンダリングするのに使用されるのと同一のスレッドなど特定のスレッド上で実行することを必要とする可能性がある。別のアプリケーションは、ユーザインターフェースをレンダリングするのに使用するスレッド以外のスレッド上で実行することを必要とする可能性がある。別のアプリケーションは、非同期オペレーションが非同期オペレーションを開始するのに使用されるのと同一のスレッド上で実行することを必要とする可能性がある。さらに別のアプリケーションは、何らかの特定のスレッド上に戻ることに関して要件を持たないが、オペレーションを「シリアル化」することを必要とする可能性がある。すなわち、任意の所与の時間に複数のオペレーションが進行することはない。
通常は、バックグラウンドで実行することがより望ましい非同期オペレーション(ファイルダウンロードなど)を実行するコンポーネントを構築する場合、コンポーネント自体が、コンポーネントを潜在的に組み込むことのできるアプリケーションを構築するのに使用されるアプリケーションフレームワークのスレッド化/同時処理モデルを明示的に処理するコードを含むことが必要である。したがって、そのようなコードを起草するのに、特にコンポーネントが複数のアプリケーションフレームワークを使用して構築されるアプリケーションに潜在的に組み込まれる可能性がある場合に、著しい労力が費やされる。さらに悪いことに、異なるフレームワークに対処するために複数のコンポーネントが構築されている可能性がある。さらに、あらゆる既存のアプリケーションフレームワーク用に書かれたコンポーネントであっても、新たに導入されたアプリケーションフレームワークでは通常は動作しない。
非同期オペレーションマネージャ203は、使用中のアプリケーションフレームワークが何かをコンポーネントが明示的に指定する必要がないように、標準インターフェース203Aを使用してコンポーネント202とインターフェースする。その代わりに、コンポーネントは単に、標準インターフェース203Aを使用して、非同期オペレーションに標準関数呼出しを行う。さらに、アプリケーションフレームワーク204は、標準インターフェース203Bを使用して、非同期オペレーションマネージャ203と通信することができる。
前述のように、階層200を同一のコンピューティングシステム上に実装する必要はない。しかし、直線211、212と、矢印221、222、および223で、アプリケーション201D、コンポーネント202C、非同期オペレーションマネージャ203、およびアプリケーションフレームワーク204Aの間の相互接続関係を示す。本発明の原理を例示するために、この説明の残りの部分全体を通じて、アプリケーション201D、コンポーネント202C、非同期オペレーションマネージャ203、およびアプリケーションフレームワーク204Aが同一のコンピューティングシステム上で動作中であり、したがってシステムメモリでインスタンス化することができると仮定する。このようなコンピューティングシステムの一例を図1のコンピュータ120として示すが、どんなコンピューティングシステムでも十分である。
相互接続線212で表されるように、アプリケーション201Dは、アプリケーションフレームワーク204Aを使用して構築された。相互接続線211で表されるように、コンポーネント202Cがアプリケーション201Dに組み込まれる。コンポーネント202Cを作成した後、コンポーネント202Cが、非同期オペレーションを開始するために、標準インターフェース203Aを介して非同期オペレーションマネージャ203に対して標準関数呼出し222を行う。アプリケーションフレームワーク204Aまたは別のモジュールは、非同期オペレーションを要求するコンポーネント202Cが組み込まれるアプリケーション201Dを構築するのに使用されるアプリケーションフレームワークの識別を非同期コンポーネントに通知することができる(矢印221で表す)。非同期オペレーションが完了した場合に、非同期オペレーションマネージャ203は、矢印223で表すように、非同期オペレーションの完了をコンポーネント202Cに通知する。
図3に、コンポーネントのうち少なくとも1つが、コンポーネントが組み込まれるアプリケーションを構築するのに使用されるアプリケーションフレームワークとは無関係な方法で非同期オペレーションを実行する方法300を示す。図2の状況では、非同期オペレーションを実行するコンポーネントはコンポーネント202Cであり、コンポーネントを組み込むアプリケーションはアプリケーション201Dである。
方法300は、非同期オペレーションマネージャ203によって実施される。非同期オペレーションマネージャは、コンポーネント202Cから標準関数呼出し222を受け取り(動作301)、次いで、標準関数呼出しに応答して、標準関数呼出しがアプリケーションフレームワークとは無関係な方法で発行されたとしても、アプリケーションフレームワークにとって適切な方法で非同期オペレーションを実行する機能的結果指向ステップを実行する(ステップ310)。このステップは、この結果を達成するための任意の対応する動作を含むことができる。しかし、例示の実施形態では、ステップ210は、対応する非機能的動作211、212、213、および214を含む。
具体的には、非同期オペレーションマネージャ203は、コンポーネント202Cが組み込まれるアプリケーション201Dを構築するのに使用されるアプリケーションフレームワーク204Aを検出する(動作311)。これは、アプリケーションフレームワーク204Aを識別する通知221を受け取ることによって実施することができる。この動作は、非同期オペレーションの実行前または実行中のいつでも行うことができる。
非同期オペレーションマネージャ203はさらに、関数呼出しに応答して非同期オペレーションを実行すべきかを判定する(動作312)。次いで非同期オペレーションマネージャ203は、コンポーネント202Cが組み込まれるアプリケーションを構築するのに使用されるアプリケーションフレームワーク201Dに従って非同期オペレーションを実行する(動作313)。次いで、非同期コンポーネントは、非同期オペレーションが完了した場合に、スレッド化/同時処理モデルに従う方法で、通知223をコンポーネント202Cに発行する。(動作314)言い換えれば、非同期オペレーションは、検出したアプリケーションフレームワークに適したスレッド上に戻る。スレッド化/同時処理モデルに応じて、これは、無制限に任意のスレッド上に戻ること、ユーザインターフェースをレンダリングするのに使用されるのと同一の、またはそれとは異なるスレッド上に戻ること、非同期オペレーションを開始するのに使用されるのと同一のスレッド上に戻ることなどを含むことができる。
本発明の原理を説明したので、次に、非同期オペレーションマネージャ203とインターフェースすることができるコンポーネントの一例をコード例に関して説明する。例示的コンポーネントは、非同期オペレーションマネージャ203が扱うことができるどんなアプリケーションフレームワークに対しても使用することができるいくつかのメソッドを含む。非同期オペレーションマネージャのコード例も以下でさらに与える。
以下のコンポーネントコード例は、「WholesaleGeoduckPricer」という名称であり、コード例で「AsyncOperationManager」と呼ばれる非同期オペレーションマネージャ203のコンポーネントの使用を示す。太字の要素は、特にAsyncOperationManagerに関連する。ここで実装するCalculatePriceAsync()のバージョンは、「状態」と呼ばれる状態オブジェクトを取ることにまず留意されたい。さらに、「WholesaleGeoduckPricer」により、複数の同時オペレーションを未処理とすることが可能となる。AsyncOperationManagerおよび関係するクラスは、コンポーネント作者の観点から直接的に、こうした複数の同時オペレーションの実装の管理を行う。
以下でコンポーネントコード例を、わかりやすいように行番号を付けて提示する。
1. using System.ComponentModel;
2. public class WholesaleGeoduckPricer:Component
3. {
4. public WholesaleGeoduckPricer()
5. {
6. onCompletedDelegate = new AsyncOperationPostDelegate(CalculateCompleted);
7. }
8. public void CalculatePriceAsync(float kilos, object state)
9. {
10. AsyncOperation asyncOp = AsyricOperationManager.CreateOperation(state);
11. someMorePrimitiveMethodTakingDelegate(kilos, asyncOp, some-delegate-constructed-from-MyCompletionMethod);
12. }
13. public event CalculatePriceCompletedEventHandler CalculatePriceCompleted;
14. protected void OnCalculatePriceCompleted(CalculatePriceCompletedEventArgs e)
15. {
16. if (CalculatePriceCompleted !=null)
17. {
18. CalculatePriceCompleted(this, e);
19. }
20. }
21. private void MyCompletionMethod(AsyncOperation asyncOp)
22. {
23. decimal price = ...;
24. Exception exception = ...;
25. bool cancelled = ...;
26. CalculatePriceCompletedEventArgs e = new CalculatePriceCompletedEventArgs(price, exception, cancelled, asyncOp.UserSuppliedToken);
27. asyncOp.OperationCompleted(onCompletedDelegate, e);
28. }
29. private void CalculateCompleted(AsyncOperation asyncOp, object operationState)
30 {
31. OnCalculatePriceCompleted((CalculatePriceCompletedEventArgs) operationState);
32. }
33. private AsyncOperationPostDelegate onCompletedDelegate;
34. }
35. public class CalculatePriceCompletedEventArgs : AsyncCompletedEventArgs
36. {
37. public CalculatePriceCompletedEventArgs(decimal price, Exception e, bool cancelled, object state):base(e, cancelled, state)
38. {
39. this.price = price;
40. }
41. public decimal Price
42. {
43. get
44. {
45. RaiseExceptionIfNecessaryO;
46. return price;
47. }
48. }
49. }
50. public delegate void CalculatePriceCompleteEventHandler(object sender, CalculatePriceCompleteEventArgs e);
このコンポーネントは、どんなアプリケーションフレームワークでも動作する。AsyncOperationManagerおよびAsyncOperationは、アプリケーションフレームワークがその下に存続し、コンポーネントがその上に存続するアブストラクションポイントを表し、基礎となるインフラストラクチャは、アプリケーションフレームワークに適したオブジェクトが適切な時にインストールされることを保証する。
行2から34は、Microsoft .NET言語であるC#で書かれたWholesaleGeoduckPricerコンポーネントを定義する。このコード例と、その他のすべてのコード例はC#で書かれる。行2は、コンポーネントのタイトル行であり、コンポーネントをパブリッククラスと定義する。行4から7は、パブリックWholesaleGeoduckPricerコンストラクタを定義する。行6は、完了した場合に非同期オペレーションを返すのに使用されるデリゲートを構築する。
行8から12は、価格付けを望む所望のGeoduckのキログラム数が入力されるパブリックメソッドCalculatePriceAsyncを定義する。ユーザ状態もこのメソッドに渡される。このユーザ状態は、CalculatePriceAsyncの複数の独立した呼出しを区別するのに使用される。行10は、AsyncOperationManager.CreateOperationメソッドを呼び出してこの非同期オペレーションに関する「存続時間」を表すAsyncOperationを作成することによって非同期オペレーションを作成するが、まだ開始しない。ユーザ状態がCreateOperationに渡される。この「存続時間」AsyncOperationは、非同期に動作する基礎となるメカニズムに渡される。このメカニズムはまた、AsynchOperationが行われた場合にMyCompletionMethod()メソッドを起動するデリゲートも受け取る。最終的に、成功、失敗、または取消しによって、MyCompletionMethod()が任意のスレッド上に起動され、存続時間がそれに渡される。
このMyCompletionMethodは、CalculatePriceCompletedEventArgsを構築し、次いでAsyncOperation上のOperationCompletedを呼び出し、現アプリケーションモデルに対して正しいスレッド/コンテキスト上で実行すべきメソッドのデリゲートを渡す。このメソッドはCalculateCompleted()である。
AsyncOperation.OperationCompleted()関数は2つの事を行う。すなわち、AsyncOperation.OperationCompleted()機能は、指定のコールバック関数(デリゲート)が適切なスレッド化/同時処理コンテキストで呼び出されるよう保証し、非同期オペレーションの存続時間を効果的に「終了」させる。OperationCompletedを呼び出した後にAsyncOperationを使用する試行は例外を発生させる。上記がCalculateCompleted()となった場合、正しいスレッド/コンテキスト上にあり、そこから自分のイベントを単に発生させることができる。
AsyncOperationがコンポーネント中の単一インスタンスデータとして格納されるのではなく呼出しで搬送されるので、複数の未処理同期オペレーションをここでサポートできることに留意されたい。情報を渡す代替方法は、このコンポーネント上に存続時間の集合を維持し、それを取り出してOperationCompleted()を呼び出し、その直後に集合からそれを除去することである。
これらは設計を駆使し、それによってコンポーネントがスタティックメソッドAsyncOperationManager.CreateOperation()に、そのための新しいAsyncOperationを作成するよう依頼し、通信のために必要なメソッドがそのオブジェクトをハングオフする。一方、CreateOperation()は、登録したファクトリを通じて呼び出すことによってそのオブジェクトを作成する。登録したファクトリの仕事は、そのスレッドの現appモデルに関する新しい「存続時間」を作成することである。
以下に、非同期オペレーションマネージャ203にとってパブリックに使用可能なインターフェース(メソッドおよびプロパティ)を示す。わかりやすいように、以下のように行番号を付けてある。
1. namespace System.ComponentModel
2. {
3. public class AsyncOperationManager
4. {
5. static AsyncOperation Create0peration(object userSuppliedToken);
6. static AsyncOperationFactory CurrentFactory
7. {
8. get;
9. set;
10. }
11. static AsyncOperationFactory FreeThreadedFactory
12. {
13. get;
14. }
15. }
16. }
メソッドCreateOperationは以下のように定義される。
. static AsyncOperation CreateOperation(object userSuppliedToken);
メソッドCurrentFactoryは以下のように定義される。
1. static AsyncOperationFactory CurrentFactory
2. {
3. get;
4. set;
5. }
getメソッドおよびsetメソッドは、スレッドに関する現AsyncOperationFactoryに影響を及ぼす。このファクトリは、実際のAsyncOperationを作成するのに使用される。アプリケーションフレームワークプロバイダだけがこれらのメソッドを呼び出す。
FreeThreadedFactoryメソッドを以下で定義する。FreeThreadedFactoryメソッドは、常に別々のスレッド上で動作するAsyncOperationsを作成するファクトリである。
1. static AsyncOperationFactory FreeThreadedFactory
2. {
3. get;
4. }
このメソッドは、フリースレッド化非同期オペレーション存続時間を作成するファクトリにアクセスする。
以下は、上記のコード例で参照されるAsyncOperationに関するクラス定義である(わかりやすいように行番号を付けてある)。
1. public abstract class AsyncOperation
2. {
3. public AsyncOperation(object userSuppliedToken);
4. public object UserSuppliedToken { get; }
5. public void OperationCompleted(AsyncOperationPostDelegate d, object arg);
6. public void Post(AsyncOperationPostDelegate d, object arg);
7. protected abstract void OperationCompletedCore(AsyncOperationPostDelegate d, object arg);
8. protected abstract void Post(AsyncOperationPostDelegate d, object arg);
9. }
以下のVB.NETコードは、このパターンの「使用法」を実演している。第1行は、新しいWholesaleGeoduckPricerコンポーネントを構築する。第2行は、CalculatePriceオペレーションを開始し、CalculatePriceAsyncを呼び出す。CalculatePriceAsyncが非同期に進行中であるからである。最後に、最後の関数は、価格付けオペレーションが完了した場合にこの関数を関数の結果と共に起動する「完了ハンドラ」である。この完了関数は非同期に呼び出され、アプリケーションが実行中の正しいスレッド/コンテキスト上で呼び出される(わかりやすいように行番号を付けてある)。
1. WithEvents MyPricer as New WholesaleGeoduckPricer
2. MyPricer.CalculatePriceAsync(3.4, Nothing)
3. Sub Pricer_CalculatePriceCompleted(ByVal Sender as Object, ByVal e as CalculatePriceEventArgs)
4. Handles MyPricer.CalculatePriceCompleted
5. MessageBox.Show("Price is " + e.Price);
6. End Sub
したがって、コンポーネントが組み込まれるアプリケーションを構築するのに使用される基礎となるアプリケーションフレームワークとは無関係の方法で、コンポーネントを組み込むことができるプログラミングモデルを説明した。したがって、本発明の原理により、コンポーネント作者はコンポーネント自体の中の潜在的な基礎となるアプリケーションフレームワークスレッド化/同時処理モデルに明示的に対処する必要がないので、非同期オペレーションを実施するコンポーネントを構築する場合にソフトウェアのより効率的な進歩が可能となる。
本発明は、その精神または不可欠な特徴から逸脱することなく他の特定の形態で実施することもできる。記載の実施形態はすべてに関して単に例示的なものとみなすべきであり、限定的なものとみなすべきではない。したがって、本発明の範囲は、上記の説明ではなく、特許請求の範囲によって示される。特許請求の範囲の均等の意味および範囲内のすべての変更は、その範囲内に包含されるとみなすべきである。
本発明の機能を実施することができる適切なコンピューティングシステムを示す図である。 アプリケーションフレームワークに従って構築されたアプリケーションに組み込まれるコンポーネントから関数呼出しを受け取ることによって非同期オペレーションを実施することができ、複数のフレームワークと通信することができる非同期オペレーションマネージャを示す図である。 非同期オペレーションマネージャが本発明の原理に従って非同期オペレーションを実施する方法を示す図である。
符号の説明
121 処理装置
122 システムメモリ
123 システムバス
124 読取り専用メモリ(ROM)
125 ランダムアクセスメモリ(RAM)
126 基本入出力システム(BIOS)
127 ハードディスクドライブ
128 磁気ディスクドライブ
129 取外し可能磁気ディスク
130 光ディスクドライブ
131 取外し可能光ディスク
132 ハードディスクドライブインターフェース
133 磁気ディスクドライブインターフェース
134 光ディスクドライブインターフェース
135 オペレーティングシステム
136 アプリケーションプログラム
137 他のプログラムモジュール
138 プログラムデータ
139 磁気ハードディスク
140 キーボード
142 ポインティングデバイス
146 シリアルポートインターフェース
147 モニタ
148 ビデオアダプタ
149a、149b リモートコンピュータ
150a、150b メモリ記憶装置
151 ローカルエリアネットワーク(LAN)
152 広域ネットワーク(WAN)
153 ネットワークインターフェース/アダプタ
154 モデム
200 階層
201 アプリケーション
202 コンポーネント
203 非同期オペレーションマネージャ
203A、203B 標準インターフェース
204 アプリケーションフレームワーク

Claims (24)

  1. 1つまたは複数のプロセッサを含むコンピューティングシステムで実装されるプログラムであって、前記1つまたは複数のプロセッサに、
    特定のアプリケーションフレームワークに従って構築されたアプリケーションと、
    前記特定のアプリケーションフレームワークに従って構築された前記アプリケーションに組み込まれるコンポーネントであって、非同期オペレーションを実行すべき場合に、前記コンポーネントが組み込まれる前記アプリケーションを構築するのに使用された特定のアプリケーションフレームワークとは異なるアプリケーションフレームワークに従って標準関数呼出しを発行するように構成されたコンポーネントと、
    前記アプリケーションを構築するのに使用された特定のアプリケーションフレームワークを識別する通知を検出して前記特定のアプリケーションフレームワークを識別し、前記コンポーネントから発行された前記標準関数呼出しを受け取り、前記標準関数呼び出しに応答して、識別された前記特定のアプリケーションフレームワークに従って前記非同期オペレーションを実行し、前記非同期オペレーションが完了した場合に識別された前記特定のアプリケーションフレームワークに従って前記非同期オペレーションの完了の通知を前記コンポーネントに発行するように構成された非同期オペレーションマネージャと
    をシステムメモリ上でインスタンス化する機能を実行させることを特徴とするプログラム。
  2. 前記1つまたは複数のプロセッサに、さらに、
    前記特定のアプリケーションフレームワークが、前記コンポーネントが組み込まれる前記アプリケーションを構築するのに使用される前記アプリケーションフレームワークであることを前記非同期オペレーションマネージャに通知するように構成されたアプリケーションフレームワークモジュールを前記システムメモリ上でインスタンス化する機能を実行させることを特徴とする請求項1に記載のプログラム。
  3. 1つまたは複数のプロセッサと、
    システムメモリと
    を備えるコンピューティングシステムであって、
    前記1つまたは複数のプロセッサに、
    特定のアプリケーションフレームワークに従って構築されたアプリケーションと、
    前記特定のアプリケーションフレームワークに従って構築された前記アプリケーションに組み込まれるコンポーネントであって、非同期オペレーションを実行すべき場合に、前記コンポーネントが組み込まれる前記アプリケーションを構築するのに使用された特定のアプリケーションフレームワークとは異なるアプリケーションフレームワークに従って標準関数呼出しを発行するように構成されたコンポーネントと、
    前記アプリケーションを構築するのに使用された特定のアプリケーションフレームワークを識別する通知を検出して前記特定のアプリケーションフレームワークを識別し、前記コンポーネントから発行された前記標準関数呼出しを受け取り、前記標準関数呼び出しに応答して、識別された前記特定のアプリケーションフレームワークに従って前記非同期オペレーションを実行し、前記非同期オペレーションが完了した場合に識別された前記特定のアプリケーションフレームワークに従って前記非同期オペレーションの完了の通知を前記コンポーネントに発行するように構成された非同期オペレーションマネージャと
    を前記システムメモリ上でインスタンス化する機能を実行させることを特徴とするコンピューティングシステム。
  4. 前記1つまたは複数のプロセッサに、
    前記特定のアプリケーションフレームワークが、前記コンポーネントが組み込まれる前記アプリケーションを構築するのに使用される前記アプリケーションフレームワークであることを前記非同期オペレーションマネージャに通知するように構成されたアプリケーションフレームワークモジュールを前記システムメモリ上でインスタンス化する機能を実行させることを特徴とする請求項3に記載のコンピューティングシステム。
  5. アプリケーションフレームワークを使用して構築された、システムメモリ上でインスタンス化されるアプリケーションを実行することができる、1つまたは複数のプロセッサを含むコンピューティングシステムにおいて、前記アプリケーションは前記システムメモリ上でインスタンス化される1つまたは複数のコンポーネントを組み込み、前記コンポーネントのうち少なくとも1つに対して、前記コンポーネントが組み込まれる前記アプリケーションを構築するのに使用される前記アプリケーションフレームワークとは異なるアプリケーションフレームワークに従って非同期オペレーションを実行する方法であって、前記1つまたは複数のプロセッサは、
    前記コンポーネントから標準関数呼出しを受け取る動作であって、前記標準関数呼出しが、前記コンポーネントが組み込まれる前記アプリケーションを構築するのに使用される前記アプリケーションフレームワークとは異なるアプリケーションフレームワークに従って発行される動作と、
    前記コンポーネントが組み込まれる前記アプリケーションを構築するのに使用される前記アプリケーションフレームワークを識別する通知を検出して、前記コンポーネントが組み込まれた前記アプリケーションを構築するのに使用される前記アプリケーションフレームワークを識別する動作と、
    受け取った前記標準関数呼出しに応答して、識別された前記アプリケーションフレームワークに従って実行すべき前記非同期オペレーションを実行する動作と、
    前記非同期オペレーションが完了した場合に、識別された前記アプリケーションフレームワークに従って前記コンポーネントに前記非同期オペレーションの完了の通知を発行する動作と
    を実行することを特徴とする方法。
  6. 前記アプリケーションフレームワークを識別する通知は、
    前記アプリケーションフレームワークに特有の前記システムメモリ上でインスタンス化されるアプリケーションフレームワークモジュールから受け取られることを特徴とする請求項5に記載の方法。
  7. 前記完了の通知を発行する動作は、
    任意のスレッド上で前記完了の通知を発行する動作を含むことを特徴とする請求項5に記載の方法。
  8. 前記非同期オペレーションの完了の通知を発行する動作は、
    ユーザインターフェースをレンダリングするのに使用されるスレッド上で前記完了の通知を発行する動作を含むことを特徴とする請求項5に記載の方法。
  9. 前記非同期オペレーションの完了の通知を発行する動作は、
    ユーザインターフェースをレンダリングするのに使用されないスレッド上で前記完了の通知を発行する動作を含むことを特徴とする請求項5に記載の方法。
  10. 前記非同期オペレーションの完了の通知を発行する動作は、
    前記標準関数呼出しを発行するのに使用される前記スレッドと同一のスレッド上で前記完了の通知を発行する動作を含むことを特徴とする請求項5に記載の方法。
  11. 前記非同期オペレーションの完了の通知を発行する動作は、
    前記アプリケーションを記述するコードを実行する、同時にアクティブとなる2つのスレッドが存在しないという点で前記オペレーションがシリアル化されるという条件で、任意のスレッド上で前記完了の通知を発行する動作を含むことを特徴とする請求項5に記載の方法。
  12. アプリケーションフレームワークを使用して構築された、システムメモリ上でインスタンス化されるアプリケーションを実行することができる、1つまたは複数のプロセッサを含むコンピューティングシステムにおいて、前記アプリケーションは前記システムメモリ上でインスタンス化される1つまたは複数のコンポーネントを組み込み、前記コンポーネントのうち少なくとも1つに対して、前記コンポーネントが組み込まれる前記アプリケーションを構築するのに使用される前記アプリケーションフレームワークとは異なるアプリケーションフレームワークに従って非同期オペレーションを実行する方法を前記1つまたは複数のプロセッサに実施させるためのコンピュータ実行可能命令を有するコンピュータ可読記録媒体であって、前記1つまたは複数のプロセッサに、
    前記コンポーネントから標準関数呼出しを受け取る動作であって、前記標準関数呼出しが、前記コンポーネントが組み込まれる前記アプリケーションを構築するのに使用される前記アプリケーションフレームワークとは異なるアプリケーションフレームワークに従って発行される動作と、
    前記コンポーネントが組み込まれる前記アプリケーションを構築するのに使用される前記アプリケーションフレームワークを識別する通知を検出して、前記コンポーネントが組み込まれる前記アプリケーションを構築するのに使用される前記アプリケーションフレームワークを識別する動作と、
    受け取った前記標準関数呼出しに応答して、識別された前記アプリケーションフレームワークに従って実行すべき前記非同期オペレーションを実行する動作と、
    前記非同期オペレーションが完了した場合に、識別された前記アプリケーションフレームワークに従って前記コンポーネントに前記非同期オペレーションの完了の通知を発行する動作と
    を含む方法を実行させるためのコンピュータ実行可能命令を有することを特徴とするコンピュータ可読記録媒体。
  13. 前記アプリケーションフレームワークを識別する通知は、
    前記アプリケーションフレームワークに特有の前記システムメモリ上でインスタンス化されるアプリケーションフレームワークモジュールから受け取られることを特徴とする請求項12に記載のコンピュータ可読記録媒体。
  14. 前記完了の通知を発行する動作は、
    任意のスレッド上で前記完了の通知を発行する動作を含むことを特徴とする請求項12に記載のコンピュータ可読記録媒体。
  15. 前記完了の通知を発行する動作は、
    ユーザインターフェースをレンダリングするのに使用されるスレッド上で前記完了の通知を発行する動作を含むことを特徴とする請求項12に記載のコンピュータ可読記録媒体。
  16. 前記完了の通知を発行する動作は、
    ユーザインターフェースをレンダリングするのに使用されないスレッド上で前記完了の通知を発行する動作を含むことを特徴とする請求項12に記載のコンピュータ可読記録媒体。
  17. 前記完了の通知を発行する動作は、
    前記標準関数呼出しを発行するのに使用される前記スレッドと同一のスレッド上で前記完了の通知を発行する動作を含むことを特徴とする請求項12に記載のコンピュータ可読記録媒体。
  18. アプリケーションフレームワークを使用して構築された、システムメモリ上でインスタンス化されるアプリケーションを実行することができる、1つまたは複数のプロセッサを含むコンピューティングシステムにおいて、前記アプリケーションは前記システムメモリ上でインスタンス化される1つまたは複数のコンポーネントを組み込み、前記コンポーネントのうち少なくとも1つに対して、前記コンポーネントが組み込まれる前記アプリケーションを構築するのに使用される前記アプリケーションフレームワークとは異なるアプリケーションフレームワークに従って非同期オペレーションを実行する方法であって、前記コンピューティングシステムは前記1つまたは複数のプロセッサに、
    前記コンポーネントから標準関数呼出しを受け取る動作であって、前記標準関数呼出しが、前記コンポーネントが組み込まれる前記アプリケーションを構築するのに使用される前記アプリケーションフレームワークとは異なるアプリケーションフレームワークに従って発行される動作と、
    前記標準関数呼出しが前記アプリケーションフレームワークとは異なるアプリケーションフレームワークに従って発行されたとしても、前記標準関数呼出しに応答して、前記アプリケーションフレームワークに従って非同期オペレーションを実行する動作と
    を実行させることを特徴とする方法。
  19. 前記非同期オペレーションを実行する動作は、
    前記コンポーネントが組み込まれる前記アプリケーションを構築するのに使用される前記アプリケーションフレームワークの識別の通知を検出して、前記コンポーネントが組み込まれる前記アプリケーションを構築するのに使用される前記アプリケーションフレームワークを識別する動作と、
    識別された前記アプリケーションフレームワークに従って実行すべき前記非同期オペレーションを実行する動作と、
    前記非同期オペレーションが完了した場合に、識別された前記アプリケーションフレームワークに従って前記コンポーネントに前記非同期オペレーションの完了の通知を発行する動作と
    を含むことを特徴とする請求項18に記載の方法。
  20. 前記アプリケーションフレームワークを識別する通知は、
    前記アプリケーションフレームワークに特有の前記システムメモリ上でインスタンス化されるアプリケーションフレームワークモジュールから受け取られることを特徴とする請求項1に記載の方法。
  21. 前記完了の通知を発行する動作は、
    任意のスレッド上で前記完了の通知を発行する動作を含むことを特徴とする請求項1に記載の方法。
  22. 前記完了の通知を発行する動作は、
    ユーザインターフェースをレンダリングするのに使用されるスレッド上で前記完了の通知を発行する動作を含むことを特徴とする請求項1に記載の方法。
  23. 前記完了の通知を発行する動作は、
    ユーザインターフェースをレンダリングするのに使用されないスレッド上で前記完了の通知を発行する動作を含むことを特徴とする請求項1に記載の方法。
  24. 前記完了の通知を発行する動作は、
    前記標準関数呼出しを発行するのに使用される前記スレッドと同一のスレッド上で前記完了の通知を発行する動作を含むことを特徴とする請求項1に記載の方法。
JP2004174742A 2003-06-13 2004-06-11 非同期コンポーネントをアプリケーションフレームワークアグノスティックにするメカニズム Expired - Fee Related JP4627636B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US10/461,195 US7343606B2 (en) 2003-06-13 2003-06-13 Mechanism for asynchronous components to be application framework agnostic

Publications (2)

Publication Number Publication Date
JP2005004771A JP2005004771A (ja) 2005-01-06
JP4627636B2 true JP4627636B2 (ja) 2011-02-09

Family

ID=33418104

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004174742A Expired - Fee Related JP4627636B2 (ja) 2003-06-13 2004-06-11 非同期コンポーネントをアプリケーションフレームワークアグノスティックにするメカニズム

Country Status (5)

Country Link
US (1) US7343606B2 (ja)
EP (1) EP1489504B1 (ja)
JP (1) JP4627636B2 (ja)
KR (1) KR100895929B1 (ja)
CN (1) CN100405300C (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007114902A (ja) * 2005-10-18 2007-05-10 Just Syst Corp 情報処理装置、情報処理方法および情報処理プログラム
WO2009048285A2 (en) * 2007-10-11 2009-04-16 Electronics And Telecommunications Research Institute Apparatus and method of driving loadable device component
KR100957453B1 (ko) * 2007-10-11 2010-05-11 한국전자통신연구원 로더블 디바이스 컴포넌트 구동 방법 및 장치
CN101159747B (zh) * 2007-11-12 2010-09-01 中兴通讯股份有限公司 一种基于tcp并发多链路的通信系统及其方法
JP4875043B2 (ja) * 2008-10-31 2012-02-15 株式会社東芝 フレームワークプログラム及びクライアント装置
US9544353B2 (en) * 2011-06-16 2017-01-10 Microsoft Technology Licensing, Llc Dynamic activation of web applications
JP5702265B2 (ja) * 2011-11-11 2015-04-15 株式会社日立製作所 プログラム自動生成装置およびプログラム自動生成方法
US20130339485A1 (en) * 2012-06-13 2013-12-19 Motorola Mobility, Inc. Multi-Threaded Asynchronous Download of a Set of Script files Used in a Web Application
CN107179916B (zh) * 2016-03-09 2019-04-23 腾讯科技(深圳)有限公司 一种应用程序开发方法、装置、设备以及开发架构系统
CN107015873A (zh) * 2017-01-23 2017-08-04 阿里巴巴集团控股有限公司 App的功能模块的调用方法、组件接口装置、电子设备及App
CN107562540B (zh) * 2017-09-05 2021-03-12 武汉斗鱼网络科技有限公司 向ui线程投递回调函数的方法、装置及客户端
CN108008995A (zh) * 2017-12-04 2018-05-08 山东浪潮通软信息科技有限公司 一种基于调用类型的等待组件实现方法及装置
CN112631571A (zh) * 2020-11-25 2021-04-09 浙江蓝卓工业互联网信息技术有限公司 一种web编辑器内组件的联动方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000222197A (ja) * 1999-01-28 2000-08-11 Nec Corp 二つのテンプレートを利用した効率的なシステム開発方法
US20020095656A1 (en) * 2000-09-15 2002-07-18 Lori Clark Extensible software development using asynchronous messaging

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5732270A (en) 1994-09-15 1998-03-24 Visual Edge Software Limited System and method for providing interoperability among heterogeneous object systems
US6275871B1 (en) * 1996-07-03 2001-08-14 Siemens Aktiengesellschaft Asynchronous transport optimizing observer-pattern-like system supporting several modes for an interface definition language-less communication subsystem
US6061721A (en) * 1997-10-06 2000-05-09 Sun Microsystems, Inc. Bean-based management system
JPH11212780A (ja) * 1998-01-26 1999-08-06 Mitsubishi Electric Corp 監視制御システム用アプリケーション群開発方法とアプリケーションテンプレート開発支援装置
US6088511A (en) * 1998-05-13 2000-07-11 Microsoft Corporation Nested parallel 2D Delaunay triangulation method
WO2000055725A1 (fr) * 1999-03-17 2000-09-21 Fujitsu Limited Systeme serveur et support d'enregistrement
US6970903B1 (en) * 1999-10-29 2005-11-29 Intel Corporation Distributed component system management using machine-independent activation requests
WO2001073547A2 (en) * 2000-03-29 2001-10-04 Nextset Software Inc. Messaging engine to achieve container managed asynchronous functionality
US7380250B2 (en) 2001-03-16 2008-05-27 Microsoft Corporation Method and system for interacting with devices having different capabilities
US7086006B2 (en) * 2001-11-09 2006-08-01 Corel Corporation Component user interface management

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000222197A (ja) * 1999-01-28 2000-08-11 Nec Corp 二つのテンプレートを利用した効率的なシステム開発方法
US20020095656A1 (en) * 2000-09-15 2002-07-18 Lori Clark Extensible software development using asynchronous messaging

Also Published As

Publication number Publication date
JP2005004771A (ja) 2005-01-06
EP1489504A2 (en) 2004-12-22
CN100405300C (zh) 2008-07-23
EP1489504B1 (en) 2017-07-19
CN1573700A (zh) 2005-02-02
KR20040107414A (ko) 2004-12-20
US20040255300A1 (en) 2004-12-16
EP1489504A3 (en) 2007-10-24
US7343606B2 (en) 2008-03-11
KR100895929B1 (ko) 2009-05-07

Similar Documents

Publication Publication Date Title
US10223082B2 (en) Analysis of dynamic elements in bounded time
JP4643931B2 (ja) 外部プログラムに基づくテーマを使用するWebページレンダリング機構
US5758351A (en) System and method for the creation and use of surrogate information system objects
US8645938B2 (en) System and method for replacing code
US7159211B2 (en) Method for executing a sequential program in parallel with automatic fault tolerance
US7293254B2 (en) Extensibility application programming interface and framework for meta-model objects
US7703089B2 (en) Compatibility framework using versioning class loaders
US20020078255A1 (en) Pluggable instantiable distributed objects
US8201143B2 (en) Dynamic mating of a modified user interface with pre-modified user interface code library
US8533666B2 (en) Interactive design environments to visually model, debug and execute resource oriented programs
JP4627636B2 (ja) 非同期コンポーネントをアプリケーションフレームワークアグノスティックにするメカニズム
US7950024B2 (en) Mechanism for transparently interfacing with a third party version control system
CN103336705A (zh) 脚本处理和工作流系统间的自动转码和语义自适应
US20070033640A1 (en) Generic context service in a distributed object environment
US8201147B2 (en) Generic XAD processing model
US6842905B2 (en) Method and system for implementing collection program interface for accessing a collection of data associated with a legacy enumeration application interface
US8522256B2 (en) Hosting non-messaging workflows in a messaging host
US8572585B2 (en) Using compiler-generated tasks to represent programming elements
CN114026540A (zh) 用于支持和协商跨多个产品的多个api版本的系统和方法
US8135943B1 (en) Method, apparatus, and computer-readable medium for generating a dispatching function
CN117908993B (zh) 进程的limit修改方法
US20130179896A1 (en) Multi-thread processing of an XML document
US20090089809A1 (en) Automatic generation of parallelizable application units system and method
Freeman et al. The singleton pattern
CN116055463A (zh) 开放接口的实现方法及装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070608

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100225

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100302

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100602

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101005

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101014

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20101102

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20101108

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131119

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4627636

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees