(57)【特許請求の範囲】
【請求項１】
機能の識別情報である第一の識別情報が指定された機能の実行要求の受信に応じ、当該第一の識別情報に係る機能を実行する第一の機能実行手段と、
前記第一の機能実行手段とは異なるプロセスにおいて機能し、前記第一の識別情報に基づいて前記第一の機能実行手段より転送された実行要求に指定されている前記第一の識別情報に係る機能を実行する第二の機能実行手段とを有し、
前記第一の機能実行手段は、受信された機能の実行要求に指定されている前記第一の識別情報がプログラムモジュールの追加機能を示す場合は、当該実行要求に指定されている前記プログラムモジュールを前記第二の機能実行手段に追加して、当該プログラムモジュールに係る前記第一の識別情報に前記第二の機能実行手段に関する第二の識別情報を対応付けて保持し、受信された機能の実行要求に指定されている前記第一の識別情報に前記第二の機能実行手段に関する前記第二の識別情報が対応付けられている場合は、当該実行要求に指定されている前記第一の識別情報に係る機能を実行せずに当該実行要求を当該第二の機能実行手段に転送し、
前記第二の機能実行手段は、前記第一の機能実行手段より転送された前記実行要求に指定された前記第一の識別情報に係る機能を、当該第二の機能実行手段に追加された前記プログラムモジュールに実行させる情報処理装置。
【請求項２】
前記第二の機能実行手段は、前記プログラムモジュールの追加に応じ、当該プログラムモジュールの機能に対する前記第一の識別情報を取得して、当該第一の識別情報を当該プログラムモジュールに対応付けて記憶部に記憶し、前記第一の機能実行手段より転送された実行要求に指定されている前記第一の識別情報に対応付けられている前記プログラムモジュールに機能を実行させる請求項１記載の情報処理装置。
【請求項３】
前記第二の機能実行手段は、前記プログラムモジュールの追加に応じて当該プログラムモジュールより取得された前記第一の識別情報を前記第一の機能実行手段に通知し、
前記第一の機能実行手段は、前記第二の機能実行手段より通知された前記第一の識別情報を、前記第二の機能実行手段に対応付けて記憶部に記憶し、受信された機能の実行要求に指定された前記第一の識別情報が、前記第二の機能実行手段に対応付けられている場合に、当該実行要求を前記第二の機能実行手段に転送する請求項２記載の情報処理装置。
【請求項４】
前記第一の機能実行手段は、受信された機能の実行要求に指定されている前記第一の識別情報が前記プログラムモジュールの削除機能を示す場合であって、当該第一の識別情報が前記第二の機能実行手段に関する前記第二の識別情報が対応付けられている場合は、当該第一の識別情報に係るプログラムモジュールの削除要求を前記第二の機能実行手段に転送し、
前記第二の機能実行手段は、前記第一の機能実行手段より転送された前記削除要求に指定された前記第一の識別情報に含まれている第三の識別情報に係る前記プログラムモジュールの登録を解除し、
前記第三の識別情報は、前記第一の識別情報に含まれる請求項１乃至３いずれか一項記載の情報処理装置。
【請求項５】
コンピュータを、
機能の識別情報である第一の識別情報が指定された機能の実行要求の受信に応じ、当該第一の識別情報に係る機能を実行する第一の機能実行手段と、
前記第一の機能実行手段とは異なるプロセスにおいて機能し、前記第一の識別情報に基づいて前記第一の機能実行手段より転送された実行要求に指定されている前記第一の識別情報に係る機能を実行する第二の機能実行手段として機能させ、
前記第一の機能実行手段は、受信された機能の実行要求に指定されている前記第一の識別情報がプログラムモジュールの追加機能を示す場合は、当該実行要求に指定されている前記プログラムモジュールを前記第二の機能実行手段に追加して、当該プログラムモジュールに係る前記第一の識別情報に前記第二の機能実行手段に関する第二の識別情報を対応付けて保持し、受信された機能の実行要求に指定されている前記第一の識別情報に前記第二の機能実行手段に関する前記第二の識別情報が対応付けられている場合は、当該実行要求に指定されている前記第一の識別情報に係る機能を実行せずに当該実行要求を当該第二の機能実行手段に転送し、
前記第二の機能実行手段は、前記第一の機能実行手段より転送された前記実行要求に指定された前記第一の識別情報に係る機能を、当該第二の機能実行手段に追加された前記プログラムモジュールに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及びプログラムに関する。
【背景技術】
【０００２】
従来、ウィジェット（Ｗｉｄｇｅｔ）若しくはデスクトップウィジェット、又はガジェット（Ｇａｄｇｅｔ）等と呼ばれる、簡易なアプリケーションがインターネット等を介して提供されている。以下、このようなアプリケーションの呼称を「ウィジェット」として統一する。
【０００３】
一般的なウィジェットは、Ｗｅｂページと同様に、ＨＴＭＬ（HyperText Markup Language）若しくはＸＭＬ（eXtensible Markup Language）、及びＪａｖａＳｃｒｉｐｔ（登録商標）若しくはＶＢＳｃｒｉｐｔ等（以下、単に「スクリプト」として総称する。）を利用して実装されており、Ｗｅｂブラウザベースのプラットフォーム上で実行される。したがって、ウィジェットのみによって提供される機能は、ＨＴＴＰ通信を介した情報の取得や、ＧＵＩ（Graphical User Interface）の提供等に限られている。なお、Ｗｅｂブラウザベースのプラットフォームとは、Ｗｅｂブラウザの基盤機能を有するプラットフォーム（以下、「ウィジェットランタイム」という。）をいう。Ｗｅｂブラウザの基盤機能とは、クライアントとしてＨＴＴＰ通信を実行する機能、ＨＴＭＬ又はＸＭＬ等を解釈して画面を描画する機能、及びスクリプトを解釈して実行する機能等をいう。
【０００４】
ウィジェットランタイムの中には、より高度な機能を提供可能なウィジェットを実装可能とするために、エージェントの備える機能をウィジェットに利用可能としている。
【０００５】
ここでいうエージェントとは、ＷｅｂＡＰＩを介して機能を提供するプログラムをいう。具体的には、エージェントは、ＨＴＴＰリクエストに応じ、当該ＨＴＴＰリクエストにおいて指定されたＵＲＬ（Uniform Resource Locator）に対応する機能を提供するプログラムをいう。すなわち、ＷｅｂＡＰＩとは、ＵＲＬの指定によって機能の実行要求を受け付けるＡＰＩ（Application Program Interface）をいう。
【０００６】
図１は、ウィジェット、ウィジェットランタイム、及びエージェントの関係を説明するための図である。
【０００７】
図１において、ウィジェット５０１ａは、ウィジェットランタイム５０２に対してＵＲＬ（Ａ）を指定して、機能Ａの実行要求を行っている。ウィジェット５０１ｂは、ウィジェットランタイム５０２に対してＵＲＬ（Ｂ）を指定して、機能Ｂの実行要求を行っている。ウィジェットランタイム５０２は、ＵＲＬ（Ａ）の指定に応じ、ＵＲＬ（Ａ）が指定されたＨＴＴＰリクエストをエージェント５０３に送信する。ウィジェットランタイム５０２は、また、ＵＲＬ（Ｂ）の指定に応じ、ＵＲＬ（Ｂ）が指定されたＨＴＴＰリクエストをエージェント５０３に送信する。
【０００８】
エージェント５０３は、ＵＲＬ（Ａ）が指定されたＨＴＴＰリクエストを受信すると、機能Ａを実行する。エージェント５０３は、また、ＵＲＬ（Ｂ）が指定されたＨＴＴＰリクエストを受信すると、機能Ｂを実行する。
【０００９】
なお、エージェント５０３は、ウィジェット及びウィジェットランタイムと同じＰＣ（Personal Computer）等にインストールされる。また、エージェント５０３は、例えば、Ｊａｖａ（登録商標）等、高度な処理が可能なプログラミング言語によって実装される。したがって、図１に示されるような構成によれば、ウィジェット５０１ａ又は５０２ａは、ＨＴＭＬ又はＸＭＬ、及びスクリプト等では実装できない高度な機能Ａ又は機能Ｂをユーザに提供することができる。
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、従来、エージェントの機能は、エージェントの内部に固定的に実装されていた。従って、ウィジェットに固有な新たな機能を提供したい場合、エージェントに関して機能強化を行い、エージェントの再インストール等が必要とされた。また、新たな機能を提供するウィジェットの配布時には、機能強化が行われたエージェントの配布も必要とされ、ユーザにとって、当該ウィジェットの導入の難易度が高くなってしまう。その結果、当該ウィジェットの導入が敬遠され、開発者にとっては、せっかく開発したウィジェットがあまり利用されないという状況が発生する可能性が有る。
【００１１】
また、機能強化に伴うバグ等により、これまで安定して動作していたエージェントの動作が不安定になる可能性もある。その結果、機能強化とは無関係なウィジェットまで、当該バグの影響を受け、動作が不安定となってしまう可能性がある。
【００１２】
本発明は、上記の点に鑑みてなされたものであって、他のプログラムに機能を提供するプログラムに関して機能拡張の簡便性及び安全性を向上させることを目的とする。
【課題を解決するための手段】
【００１３】
そこで上記課題を解決するため、情報処理装置は、機能の識別情報が指定された機能の実行要求の受信に応じ、当該識別情報に係る機能を実行する第一の機能実行手段と、前記第一の機能実行手段とは異なるプロセスにおいて機能し、前記識別情報に基づいて前記第一の機能実行手段より転送された実行要求に指定されている前記識別情報に係る機能を実行する第二の機能実行手段とを有し、前記第一の機能実行手段は、受信された機能の実行要求に指定されている前記識別情報がプログラムモジュールの追加機能を示す場合は、当該実行要求に指定されている前記プログラムモジュールを前記第二の機能実行手段に追加し、前記第二の機能実行手段は、前記第一の機能実行手段より転送された前記実行要求に指定された前記識別情報に係る機能を、当該第二の機能実行手段に追加された前記プログラムモジュールに実行させる。
【発明の効果】
【００１４】
他のプログラムに機能を提供するプログラムに関して機能拡張の簡便性及び安全性を向上させることができる。
【図面の簡単な説明】
【００１５】
【図１】ウィジェット、ウィジェットランタイム、及びエージェントの関係を説明するための図である。
【図２】本発明の実施の形態における情報処理装置のハードウェア構成例を示す図である。
【図３】情報処理装置の基本機能に関するソフトウェア構成例を示す図である。
【図４】プログラムモジュールの機能に対するインタフェースをＷｅｂＡＰＩとして公開するための処理手順の第一の例を説明するためのシーケンス図である。
【図５】プログラムモジュールの機能に対するインタフェースをＷｅｂＡＰＩとして公開するための処理手順の第二の例を説明するためのシーケンス図である。
【図６】拡張モジュールが有するプログラムモジュールの追加機能の利用形態の一例を示す図である。
【図７】ウィジェットからのプログラムモジュールの追加要求に応じて実行される処理概要を説明するためのシーケンス図である。
【図８】ウィジェットからのプログラムモジュールの追加要求に応じて実行される処理手順の第一の例を説明するためのシーケンス図である。
【図９】ウィジェットからのプログラムモジュールの追加要求に応じて実行される処理手順の第二の例を説明するためのシーケンス図である。
【図１０】拡張エージェントにおけるプログラムモジュールの実行要求に応じて実行される処理手順の一例を説明するためのシーケンス図である。
【発明を実施するための形態】
【００１６】
以下、図面に基づいて本発明の実施の形態を説明する。図２は、本発明の実施の形態における情報処理装置のハードウェア構成例を示す図である。図２の情報処理装置１０は、それぞれバスＢで相互に接続されているドライブ装置１００、補助記憶装置１０２、メモリ装置１０３、ＣＰＵ１０４、インタフェース装置１０５、表示装置１０６、及び入力装置１０７等を有する。
【００１７】
情報処理装置１０での処理を実現するプログラムは、ＣＤ−ＲＯＭ等の記録媒体１０１によって提供される。プログラムを記憶した記録媒体１０１がドライブ装置１００にセットされると、プログラムが記録媒体１０１からドライブ装置１００を介して補助記憶装置１０２にインストールされる。但し、プログラムのインストールは必ずしも記録媒体１０１より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置１０２は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【００１８】
メモリ装置１０３は、プログラムの起動指示があった場合に、補助記憶装置１０２からプログラムを読み出して格納する。ＣＰＵ１０４は、メモリ装置１０３に格納されたプログラムに従って情報処理装置１０に係る機能を実現する。インタフェース装置１０５は、ネットワークに接続するためのインタフェースとして用いられる。表示装置１０６はプログラムによるＧＵＩ（Graphical User Interface）等を表示する。入力装置１０７はキーボード及びマウス等で構成され、様々な操作指示を入力させるために用いられる。
【００１９】
図３は、情報処理装置の基本機能に関するソフトウェア構成例を示す図である。図３において、情報処理装置１０は、ウィジェット１１、ウィジェットランタイム１２、及びエージェント１３等を含む。
【００２０】
ウィジェット１１は、一般的に、ウィジェット（Ｗｉｄｇｅｔ）若しくはデスクトップウィジェット、又はガジェット（Ｇａｄｇｅｔ）等と呼ばれる、簡易なアプリケーションプログラムである。ウィジェット１１は、例えば、ＨＴＭＬ（HyperText Markup Language）若しくはＸＭＬ（eXtensible Markup Language）、及びＪａｖａＳｃｒｉｐｔ（登録商標）若しくはＶＢＳｃｒｉｐｔ（以下、単に「スクリプト」として総称する。）等を利用して実装される。
【００２１】
ウィジェットランタイム１２は、ウィジェット１１の実行環境を実現するソフトウェアプログラムである。ウィジェットランタイム１２は、クライアントとしてＨＴＴＰ通信を実行する機能、ＨＴＭＬ又はＸＭＬ等を解釈して画面を描画する機能、及びスクリプトを解釈して実行する機能等、一般的なＷｅｂブラウザが有している機能を備える。ウィジェットランタイム１２は、斯かる機能によって、ウィジェット１１の画面の表示、ウィジェット１１に定義されたスクリプトの実行等を行う。
【００２２】
エージェント１３は、ＷｅｂＡＰＩを介して機能を提供するプログラム群である。具体的には、エージェント１３は、クライアントからのＨＴＴＰリクエストに応じ、当該ＨＴＴＰリクエストにおいて指定されたＵＲＬ（Uniform Resource Locator）に対応する機能を提供する。すなわち、ＷｅｂＡＰＩとは、ＵＲＬを機能の識別情報として、機能の実行要求を受け付けるＡＰＩ（Application Program Interface）をいう。
【００２３】
本実施の形態では、ウィジェット１１よりＵＲＬの指定を受け付けるウィジェットランタイム１２が、エージェント１３に対するクライアントに相当する。
【００２４】
図３において、エージェント１３は、一以上のプログラムモジュール１３１、モジュールプラットフォーム１３２、及びモジュールランタイム１３３等を含む。
【００２５】
各プログラムモジュール１３１は、それぞれに固有の機能を実行するプログラムモジュールである。同図には、プログラムモジュール１３１の一例として、Ａモジュール１３１ａ、Ｂモジュール１３１ｂ、ＷｅｂＡＰＩモジュール１３１ｗ、及び拡張モジュール１３１ｅ等が例示されている。このうち、ＷｅｂＡＰＩモジュール１３１ｗ及び拡張モジュール１３１ｅは、特別な機能及び役割を有するプログラムモジュール１３１である。
【００２６】
ＷｅｂＡＰＩモジュール１３１ｗは、他のプログラムモジュール１３１の機能に対するインタフェースを、ＷｅｂＡＰＩとして公開する役割を担う。具体的には、ＷｅｂＡＰＩモジュール１３１ｗは、所定のポート番号のポートを開設し、当該ポート宛のＨＴＴＰリクエストに指定されたＵＲＬに対応するプログラムモジュール１３１を呼び出す。すなわち、各プログラムモジュール１３１には、ＵＲＬが割り当てられ、ＷｅｂＡＰＩモジュール１３１ｗは、各プログラムモジュール１３１のＵＲＬを、各プログラムモジュール１３１に対応付けて管理する。
【００２７】
拡張モジュール１３１ｅは、エージェント１３には実装されていない機能を実現するプログラムモジュール１３１の追加機能を実現するプログラムモジュール１３１である。プログラムモジュール１３１の追加の意味については、後述される。拡張モジュール１３１ｅによって、エージェント１３の機能拡張が簡便かつ安全に行われる。
【００２８】
モジュールランタイム１３３は、モジュールの実行環境を提供する。モジュールランタイム１３３の一例として、Ｊａｖａ（登録商標）ＶＭ（Virtual Machine）が挙げられる。
【００２９】
モジュールプラットフォーム１３２は、モジュールランタイム１３３が提供する実行環境におけるプログラムのモジュール化又は部品化を容易にするためのプラットフォームである。モジュールプラットフォーム１３２の一例として、ＯＳＧｉ（Open Services Gateway Initiative）プラットフォームが挙げられる。ＯＳＧｉプラットフォームとは、ＯＳＧｉアライアンスによる標準化技術であり、Ｊａｖａ（登録商標）言語に基づいたオープンなソフトウェア部品化技術に基づいて作成されたプログラムモジュール１３１の実行環境を提供するソフトウェアプラットフォームである。ＯＳＧｉプラットフォーム上において、Ｊａｖａ（登録商標）言語のプログラムモジュールは「バンドル」と呼ばれるソフトウェア部品の形で実装される。一つのバンドルは、それぞれ独立して動的に（情報処理装置１０の再起動を要することなく）インストール可能である。したがって、モジュールプラットフォーム１３２として、ＯＳＧｉプラットフォームが採用される場合、本実施の形態における各プログラムモジュール１３１は、バンドルとして実装される。
【００３０】
なお、図３において、ウィジェットランタイム１２及びエージェント１３は、相互に異なるプロセスとして動作する。ウィジェット１１は、ウィジェットランタイム１２のプロセス上で起動される。各プログラムモジュール１３１は、エージェント１３上のプロセス上で、スレッドとして起動される。
【００３１】
以下、情報処理装置１０において実行される処理手順について説明する。図４は、プログラムモジュールの機能に対するインタフェースをＷｅｂＡＰＩとして公開するための処理手順の第一の例を説明するためのシーケンス図である。例えば、図４の処理は、エージェント１３のプロセスの起動時に実行される。
【００３２】
ステップＳ１０１において、モジュールプラットフォーム１３２は、モジュールプラットフォーム１３２に登録されている各プログラムモジュール１３１に対して、起動指示を行う。起動とは、例えば、各プログラムモジュール１３１をスレッドとして起動させることである。
【００３３】
各プログラムモジュール１３１は、起動指示に応じ、当該プログラムモジュール１３１の機能を識別するＵＲＬと、当該機能に関するアドレス情報（例えば、ポインタ等）とをＷｅｂＡＰＩモジュール１３１ｗに通知する（Ｓ１０２）。当該通知は、例えば、ＷｅｂＡＰＩモジュール１３１ｗが有する所定のメソッドを呼び出すことにより行われる。なお、ＵＲＬは、当該プログラムモジュール１３１の機能に対するインタフェースをエージェント１３の外部に公開するために利用される識別情報である。
【００３４】
アドレス情報（ポインタ等）は、エージェント１３の内部において、プログラムモジュール１３１の呼び出し機構の実装上の都合により、必要となる識別情報である。ＵＲＬは、静的な情報であり、アドレス情報は、動的な識別情報であるともいえる。アドレス情報は、プログラムモジュール１３１が起動されるたびに変化する可能性が有るからである。
【００３５】
例えば、拡張モジュール１３１ｅからは、「／ｅｘｍｏｄｕｌｅ」といったＵＲＬが通知される。すなわち、ここで通知されるＵＲＬは、ＷｅｂＡＰＩモジュール１３１ｗが規定するルートのＵＲＬに対する相対パスである。本実施の形態において、ＷｅｂＡＰＩモジュール１３１ｗが規定するルートのＵＲＬは、「＜ｈｏｓｔ＞：＜ｐｏｒｔ＞／ｐｌａｔｆｏｒｍ」であるとする。＜ｈｏｓｔ＞は、実際には、具体的なホスト名又はＩＰアドレスによって置換される。＜ｐｏｒｔ＞は、実際には、具体的なポート番号によって置換される。
【００３６】
続いて、ＷｅｂＡＰＩモジュール１３１ｗは、通知されたＵＲＬとアドレス情報とを対応付けて、メモリ装置１０３に記憶しておく（Ｓ１０３）。その結果、当該ＵＲＬに係るプログラムモジュール１３１のインタフェースは、ＷｅｂＡＰＩとして公開されたことになる。ＷｅｂＡＰＩモジュール１３１ｗは、当該ＵＲＬが指定されたＨＴＴＰリクエストの受信に応じ、当該ＵＲＬに対応するアドレス情報に基づいて、当該ＵＲＬに対応するプログラムモジュール１３１を呼び出すことができるからである。
【００３７】
なお、例えば、拡張モジュール１３１ｅのＷｅｂＡＰＩに対するＵＲＬは、エージェント１３の外部に対しては、「＜ｈｏｓｔ＞：＜ｐｏｒｔ＞／ｐｌａｔｆｏｒｍ／ｅｘｍｏｄｕｌｅ」として公開される。換言すれば、ウィジェット１１が、拡張モジュール１３１ｅの機能を利用したい場合、ＵＲＬとして「＜ｈｏｓｔ＞：＜ｐｏｒｔ＞／ｐｌａｔｆｏｒｍ／ｅｘｍｏｄｕｌｅ」が指定されたＨＴＴＰリクエストを、ＷｅｂＡＰＩモジュール１３１ｗに対して送信すればよい。
【００３８】
続いて、ＷｅｂＡＰＩモジュール１３１ｗは、各プログラムモジュール１３１に対して応答を返却する（Ｓ１０４）。各プログラムモジュール１３１は、モジュールプラットフォーム１３２に応答を返却する（Ｓ１０５）。
【００３９】
続いて、図４に対する変形例について説明する。図５は、プログラムモジュールの機能に対するインタフェースをＷｅｂＡＰＩとして公開するための処理手順の第二の例を説明するためのシーケンス図である。図５中、図４と同一又は対応するステップには、図４と同じステップ番号又は図４のステップ番号に対して枝番が付与されたステップ番号を付し、その説明は適宜省略する。
【００４０】
図５では、ステップＳ１０２及びＳ１０４におけるＷｅｂＡＰＩモジュール１３１ｗと各プログラムモジュール１３１とのやり取りが、モジュールプラットフォーム１３２によって仲介される例が示されている。
【００４１】
すなわち、各プログラムモジュール１３１の機能に対するＵＲＬと、当該機能に関するアドレス情報とは、モジュールプラットフォーム１３２を介して、各プログラムモジュール１３１からＷｅｂＡＰＩモジュール１３１ｗに通知される（Ｓ１０２−１、Ｓ１０２−２）。
【００４２】
また、ＷｅｂＡＰＩモジュール１３１ｗからの応答は、モジュールプラットフォーム１３２を介して、各プログラムモジュール１３１へ返却される（Ｓ１０４−１、Ｓ１０４−２）。
【００４３】
図５に示される処理手順によれば、各プログラムモジュール１３１について、ＷｅｂＡＰＩモジュール１３１ｗへの依存度を低減させることができる。すなわち、各プログラムモジュール１３１は、ＷｅｂＡＰＩモジュール１３１ｗの存在を意識することなく、自らの機能に対するインタフェースをＷｅｂＡＰＩとして公開することができる。
【００４４】
なお、新たなプログラムモジュール１３１がモジュールプラットフォーム１３２上に追加された場合、追加されたタイミングで当該プログラムモジュール１３１に関して、図４又は図５において説明した処理が実行される。その結果、当該プログラムモジュール１３１のインタフェースは、自動的にＷｅｂＡＰＩとして公開される。
【００４５】
続いて、拡張モジュール１３１ｅの機能について説明する。上記したように、拡張モジュール１３１ｅは、プログラムモジュール１３１の追加機能を有する。当該追加機能は、例えば、次のように利用される。
【００４６】
図６は、拡張モジュールが有するプログラムモジュールの追加機能の利用形態の一例を示す図である。
【００４７】
図６において、ウィジェット１１ａは、エージェント１３が有していない機能を実現するプログラムモジュール１３１であるＣモジュール１３１ｃの機能を必要とするウィジェット１１である。この場合、例えば、ウィジェット１１ａの配布時には、ウィジェット１１ａと共にＣモジュール１３１ｃが配布されることが考えられる。ウィジェット１１の配布形態の一例として、例えば、所定のサイトからのウィジェット１１のダウンロードが挙げられる。
【００４８】
ウィジェット１１ａは、起動されると、プログラムモジュール１３１の追加機能に対応するＵＲＬ（すなわち、拡張モジュール１３１ｅに対するＵＲＬ）と、Ｃモジュール１３１ｃの保存先のファイルパス名とを指定して、ウィジェットランタイム１２にＷｅｂＡＰＩの呼び出しを要求する（Ｓ２０１）。なお、Ｃモジュール１３１ｃの保存先のファイルパス名の代わりに、Ｃモジュール１３１ｃを特定可能なＵＲＬが指定されてもよい。
【００４９】
ウィジェットランタイム１２は、プログラムモジュール１３１の追加機能に対応するＵＲＬ及び当該ファイルパス名が指定されたＨＴＴＰリクエストを、ＷｅｂＡＰＩモジュール１３１ｗ宛に送信する（Ｓ２０２）。ＷｅｂＡＰＩモジュール１３１ｗは、当該ＵＲＬに対応するプログラムモジュール１３１を呼び出す。上述したように、プログラムモジュール１３１の追加機能を示すＵＲＬに対応するプログラムモジュール１３１は、拡張モジュール１３１ｅである。したがって、ここでは、拡張モジュール１３１ｅが呼び出される（Ｓ２０３）。
【００５０】
拡張モジュール１３１ｅは、呼び出しに応じ、拡張エージェント１３ａを起動させる（Ｓ２０４）。拡張エージェント１３ａは、モジュールプラットフォーム１３２及びモジュールランタイム１３３に関して、エージェント１３と同じプログラムを用いて、エージェント１３とは異なるプロセスとして起動される。したがって、拡張エージェント１３ａは、エージェント１３と同様に、モジュールプラットフォーム１３２ａ及びモジュールランタイム１３３ａを含む。
【００５１】
但し、図６に示されるように、拡張モジュール１３１ｅが基本構成として有するプログラムモジュール１３１は、プロキシモジュール１３１ｐである。プロキシモジュール１３１ｐは、拡張モジュール１３１ｅと協調して（Ｓ２０５）、Ｃモジュール１３１ｃを、拡張エージェント１３ａのモジュールプラットフォーム１３２ａに登録する（Ｓ２０６）。プロキシモジュール１３１ｐは、また、拡張モジュール１３１ｅと協調して、Ｃモジュール１３１ｃの機能に対するインタフェースをＷｅｂＡＰＩとして公開するための処理を行う。
【００５２】
このように、Ｃモジュール１３１ｃは、エージェント１３ではなく、拡張エージェント１３ａに登録される。ウィジェット１１の都合でプログラムモジュール１３１を拡張エージェント１３ａに追加可能となることで、ウィジェット１１の実装上の制限を超えた機能の実現が可能となる。ここで、Ｃモジュール１３１ｃがエージェント１３ではなく、拡張エージェント１３ａに登録されるのは、次のような理由による。
【００５３】
すなわち、プログラムモジュール１３１の自由な追加が許容されると、テストが不十分なプログラムモジュール１３１等、動作の安定性が保証されていないプログラムモジュール１３１も、エージェント１３に登録される可能性がある。このようなプログラムモジュール１３１がエージェント１３に登録されると、当該プログラムモジュール１３１の不具合やメモリの消費等によって、エージェント１３内の他のプログラムモジュール１３１の動作にも悪影響が及ぶ可能性がある。エージェント１３に含まれる各プログラムモジュール１３１は、同一のプロセス上で動作するため、いずれかのプログラムモジュール１３１による不正動作によって当該プロセスが終了してしまうと、他のプログラムモジュール１３１も動作不能となってしまうからである。
【００５４】
そこで、本実施の形態では、ウィジェット１１から追加が要求されたプログラムモジュール１３１に関しては、エージェント１３とは別プロセスの拡張エージェント１３ａに登録されるのである。そうすることで、エージェント１３のプロセスの安定性又は安全性を確保することができる。
【００５５】
図６において説明した、ウィジェット１１によるプログラムモジュール１３１の追加要求に応じて実行される処理について、シーケンス図を用いて説明する。
【００５６】
図７は、ウィジェットからのプログラムモジュールの追加要求に応じて実行される処理概要を説明するためのシーケンス図である。括弧内のステップ番号は、図６において対応するステップのステップ番号を示す。図７においても、新たなプログラムモジュール１３１の追加を要求するウィジェット１１は、ウィジェット１１ａであるとする。また、新たなプログラムモジュール１３１は、Ｃモジュール１３１ｃであるとする。なお、図７においては、ＷｅｂＡＰＩモジュール１３１ｗ、拡張モジュール１３１ｅ、及びプロキシモジュール１３１ｐは、エージェント１３又は拡張エージェント１３ａとして抽象化されて示されている。
【００５７】
ウィジェット１１ａは、起動されると、プログラムモジュール１３１の追加機能に対応するＵＲＬと、Ｃモジュール１３１ｃの保存先のファイルパス名とを指定して、ウィジェットランタイム１２にＷｅｂＡＰＩの呼び出しを要求する（Ｓ３０１）。ここでは、当該ＵＲＬとして、「＜ｈｏｓｔ＞：＜ｐｏｒｔ＞／ｐｌａｔｏｆｏｒｍ／ｅｘｍｏｄｕｌｅ」が指定される。なお、Ｃモジュール１３１ｃは、必ずしもウィジェット１１ａと共に配布されなくてもよい。図６は、Ｃモジュール１３１ｃの配布形態の一例を示したものに過ぎない。
【００５８】
続いて、ウィジェットランタイム１２は、当該ＵＲＬ及び当該ファイルパス名が指定されたＨＴＴＰリクエストを、エージェント１３に送信する（Ｓ３０２）。当該ＨＴＴＰリクエストに応じ、エージェント１３は、拡張エージェント１３ａをプロセスとして起動させる（Ｓ３０３）。
【００５９】
続いて、エージェント１３は、Ｃモジュール１３１ｃのファイルパス名を指定して、Ｃモジュール１３１ｃの追加要求を拡張エージェント１３ａに対して送信する（Ｓ３０４）。当該追加要求に応じ、拡張エージェント１３ａは、Ｃモジュール１３１ｃを拡張エージェント１３ａ上のプログラムモジュール１３１として登録する。続いて、拡張エージェント１３ａは、Ｃモジュール１３１ｃの追加の完了を示す応答を返信する（Ｓ３０５）。
【００６０】
続いて、エージェント１３は、Ｃモジュール１３１ｃの起動要求を拡張エージェント１３ａに送信する（Ｓ３０６）。当該起動要求に応じ、拡張エージェント１３ａは、Ｃモジュール１３１ｃをスレッドとして起動させる。Ｃモジュール１３１ｃの起動に応じて、拡張エージェント１３ａ上では、図４又は図５において説明したような処理が、Ｃモジュール１３１ｃに関して実行される。すなわち、Ｃモジュール１３１ｃより、Ｃモジュール１３１ｃの機能に対するＵＲＬと、当該機能に関するアドレス情報とが拡張エージェント１３ａに対して通知される。当該ＵＲＬと当該アドレス情報との対応関係は、拡張エージェント１３ａにおいて管理される。
【００６１】
続いて、拡張エージェント１３ａは、当該ＵＲＬを指定して、Ｃモジュール１３１ｃの機能に関して、ＷｅｂＡＰＩの登録要求をエージェント１３に送信する（Ｓ３０７）。エージェント１３は、当該ＵＲＬと当該拡張エージェント１３ａに関する識別情報とを対応付けてメモリ装置１０３に記憶する（Ｓ３０８）。その結果、Ｃモジュール１３１ｃのインタフェースは、ＷｅｂＡＰＩとして公開されたことになる。すなわち、エージェント１３は、当該ＵＲＬが指定されたＨＴＴＰリクエストの受信に応じ、当該ＵＲＬに対応する識別情報に係る拡張エージェント１３ａを呼び出すことができる。この際、拡張エージェント１３ａには、当該ＵＲＬが通知される。拡張エージェント１３ａは、当該ＵＲＬとアドレス情報とを対応付けて管理している。したがって、拡張エージェント１３ａは、当該ＵＲＬに対応するアドレス情報に基づいて、Ｃモジュール１３１ｃを呼び出すことができる。
【００６２】
続いて、エージェント１３は、Ｃモジュール１３１ｃのインタフェースがＷｅｂＡＰＩとして登録されたことを示す応答を、拡張エージェント１３ａに返信する（Ｓ３０８）。当該応答に応じ、拡張エージェント１３ａは、Ｃモジュール１３１ｃの起動が完了したことを示す応答を、エージェント１３に返信する（Ｓ３０９）。
【００６３】
続いて、エージェント１３は、Ｃモジュール１３１ｃの追加の完了を示すＨＴＴＰレスポンスをウィジェットランタイム１２に返信する（Ｓ３１０）。ウィジェットランタイム１２は、Ｃモジュール１３１ｃの追加の完了を示す応答をウィジェット１１ａに返却する（Ｓ３１１）。
【００６４】
続いて、図７の処理内容をエージェント１３内又は拡張エージェント１３ａ内のプログラムモジュール１３１のレベルに細分化して説明する。
【００６５】
図８は、ウィジェットからのプログラムモジュールの追加要求に応じて実行される処理手順の第一の例を説明するためのシーケンス図である。括弧内のステップ番号は、図７において対応するステップのステップ番号を示す。なお、図８では、便宜上、ウィジェットランタイム１２は省略されている。すなわち、図８において、ウィジェット１１ａと、ＷｅｂＡＰＩモジュール１３１ｗとの通信は、厳密には、ウィジェットランタイム１２を経由して行われる。
【００６６】
ステップＳ４０１において、ＷｅｂＡＰＩモジュール１３１ｗは、起動されたウィジェット１１ａからの要求に基づいて送信された、プログラムモジュール１３１の追加機能に対応するＵＲＬと、Ｃモジュール１３１ｃの保存先のファイルパス名とが指定されたＨＴＴＰリクエストを受信する（Ｓ４０１）。ＷｅｂＡＰＩモジュール１３１ｗは、プログラムモジュール１３１の追加機能に対応するＵＲＬに対応付けられているアドレス情報に基づいて、拡張モジュール１３１ｅを呼び出す（Ｓ４０２）。この際、拡張モジュール１３１ｅには、Ｃモジュール１３１ｃのファイルパス名が通知される。
【００６７】
続いて、拡張モジュール１３１ｅは、モジュールプラットフォーム１３２ａを含む拡張エージェント１３ａをプロセスとして起動させる（Ｓ４０３）。続いて、拡張モジュール１３１ｅは、Ｃモジュール１３１ｃのファイルパス名を指定して、Ｃモジュール１３１ｃの追加要求をモジュールプラットフォーム１３２ａに対して送信する（Ｓ４０４）。当該追加要求に応じ、モジュールプラットフォーム１３２ａは、Ｃモジュール１３１ｃをモジュールプラットフォーム１３２ａ上のプログラムモジュール１３１として登録する。登録に応じて、Ｃモジュール１３１ｃに対してＩＤが割り当てられる。当該ＩＤを、以下「登録ＩＤ」という。ここでは、登録ＩＤとして、「００１」が割り当てられたこととする。モジュールプラットフォーム１３２ａは、登録ＩＤ（「００１」）を含む応答を、拡張モジュール１３１ｅに返信する（Ｓ４０５）。
【００６８】
拡張モジュール１３１ｅは、当該登録ＩＤに基づいて、Ｃモジュール１３１ｃのルートＵＲＬを生成する。例えば、「／ｅｘｍｏｄｕｌｅ／００１」が、当該ルートＵＲＬとして生成される。すなわち、拡張モジュール１３１ｅのＵＲＬの相対パス（「／ｅｘｍｏｄｕｌｅ」）に対して、Ｃモジュール１３１ｃの登録ＩＤが追加された文字列が、Ｃモジュール１３１ｃのルートＵＲＬとされる。なお、Ｃモジュール１３１ｃのルートＵＲＬとは、Ｃモジュール１３１ｃの機能ではなく、Ｃモジュール１３１ｃ自体を示すＵＲＬである。ルートＵＲＬは、例えば、Ｃモジュール１３１ｃの削除が行われる場合に、削除対象のＣモジュール１３１ｃを特定するために用いられる。
【００６９】
拡張モジュール１３１ｅは、当該ルートＵＲＬをＷｅｂＡＰＩとして登録することを、当該ルートＵＲＬと、拡張モジュール１３１ｅが有するプログラムモジュール１３１の追加機能に関するアドレス情報（例えば、ポインタ等）とを指定して、ＷｅｂＡＰＩモジュール１３１ａに要求する（Ｓ４０６）。
【００７０】
続いて、ＷｅｂＡＰＩモジュール１３１ｗは、Ｃモジュール１３１ｃのルートＵＲＬと、拡張モジュール１３１ｅが有するプログラムモジュール１３１の追加機能に関するアドレス情報とを対応付けて、例えば、メモリ装置１０３に記憶する（Ｓ４０７）。これによって、ルートＵＲＬは、ＷｅｂＡＰＩとして公開される。なお、エージェント１３の外部に対しては、Ｃモジュール１３１ｃのルートＵＲＬの絶対パスは、「＜ｈｏｓｔ＞：＜ｐｏｒｔ＞／ｐｌａｔｆｏｒｍ／ｅｘｍｏｄｕｌｅ／００１」となる。
【００７１】
続いて、ＷｅｂＡＰＩモジュール１３１ｗは、ルートＵＲＬがＷｅｂＡＰＩとして登録されたことを示す応答を拡張モジュール１３１ｅに返信する（Ｓ４０８）。
【００７２】
なお、ここまででＷｅｂＡＰＩとして登録又は公開されたのは、Ｃモジュール１３１ｃのルートＵＲＬであって、Ｃモジュール１３１ｃの機能に対するＵＲＬではない。したがって、例えば、ウィジェット１１ａは、この段階では、Ｃモジュール１３１ｃの機能を呼び出すことはできない。
【００７３】
続いて、拡張モジュール１３１ｅは、Ｃモジュール１３１ｃの登録ＩＤ（「００１」）を指定して、Ｃモジュール１３１ｃの起動要求をモジュールプラットフォーム１３２ａに送信する（Ｓ４０９）。当該起動要求に応じ、モジュールプラットフォーム１３２ａは、当該登録ＩＤに基づいて特定されるＣモジュール１３１ｃをスレッドとして起動させる（Ｓ４１０）。
【００７４】
Ｃモジュール１３１ｃは、起動されると、図４のステップＳ１０２と同様に、当該Ｃモジュール１３１ｃの機能に対するＵＲＬと、当該機能に関するアドレス情報（例えば、ポインタ等）とをプロキシモジュール１３１ｐに通知する（Ｓ４１１）。プロキシモジュール１３１ｐは、当該ＵＲＬと、当該アドレス情報とを対応付けて、例えば、メモリ装置１０３に記憶する。ここでは、Ｃモジュール１３１ｃの機能に対するＵＲＬの相対パスは、「／００１／ｆｕｎｃｔｉｏｎＣ」であるとする。当該ＵＲＬは、Ｃモジュール１３１ｃの登録ＩＤに対して、「ｆｕｎｃｔｉｏｎＣ」が付加されたものである。Ｃモジュール１３１ｃの機能に対する本来的な識別子は、「ｆｕｎｃｔｉｏｎＣ」である。登録ＩＤが付加されることにより、Ｃモジュール１３１ｃと他のモジュールとのＵＲＬの重複が回避される可能性を高めることができる。基本的に登録ＩＤは、重複しないからである。
【００７５】
但し、当該ＵＲＬに対して、登録ＩＤが付加されなくてもよい。この場合、プロキシモジュール１３１ｐによって、ＵＲＬの重複の有無がチェックされてもよい。ＵＲＬの重複が検出された場合、プロキシモジュール１３１ｐは、別のＵＲＬの指定をＣモジュール１３１ｃに対して要求してもよいし、プロキシモジュール１３１ｐが、別のＵＲＬを自動的に生成してもよい。
【００７６】
なお、プロキシモジュール１３１ｐは、拡張エージェント１３ａ内のプログラムモジュール１３１からは、ＷｅｂＡＰＩモジュール１３１ｗと同様に見える。すなわち、プロキシモジュール１３１ｐは、拡張エージェント１３ａ内のプログラムモジュール１３１に対して、ＷｅｂＡＰＩモジュール１３１ｗと同じインタフェース（メソッド）を公開する。したがって、Ｃモジュール１３１ｃも含めて各プログラムモジュール１３１は、自らが起動された環境が、モジュールプラットフォーム１３２であるのか又はモジュールプラットフォーム１３１ａであるのかを意識することなく、所定のメソッドを呼び出せばよい。そうすることで、各プログラムモジュール１３１は、ＷｅｂＡＰＩモジュール１３１ｗ又はプロキシモジュール１３１ｐに、当該プログラムモジュール１３１の機能に対するＵＲＬと、当該機能に関するアドレス情報とを通知することができる。
【００７７】
続いて、プロキシモジュール１３１ｐは、Ｃモジュール１３１ｃの機能に対するＵＲＬ（「／００１／ｆｕｎｃｔｉｏｎＣ」）を指定して、Ｃモジュール１３１ｃの機能に関して、ＷｅｂＡＰＩとしての登録要求を拡張モジュール１３１ｅに送信する（Ｓ４１２）。この際、プロキシモジュール１３１ｐに対する通信用の識別子が、当該ＵＲＬと共にプロキシモジュール１３１ｐに通知されてもよい。プロキシモジュール１３１ｐに対する通信用の識別子とは、プロキシモジュール１３１ｐと、拡張モジュール１３１ｅとの通信において、拡張モジュール１３１ｅが、プロキシモジュール１３１ｐを識別するための識別子である。当該識別子の実体は、当該通信のプロトコルに依存する。但し、拡張モジュール１３１ｅにとって、当該識別子が既知である場合、当該識別子は通知されなくてもよい。なお、プロキシモジュール１３１ｐと拡張モジュール１３１ｅとの通信は、例えば、ＲＭＩ（Remote Method Invocation）に基づいて行われてもよい。または、ＨＴＴＰやＳＯＡＰ（Simple Object Access Protocol）等、プログラム言語に非依存な通信プロトコルに基づいて行われてもよい。
【００７８】
なお、ステップＳ４１２において、Ｃモジュール１３１ｃのアドレス情報が通知されないのは、当該アドレス情報は、拡張エージェント１３ａのプロセス内において有効な値であり、エージェント１３内においては、無効な値であるからである。
【００７９】
続いて、拡張モジュール１３１ｅは、Ｃモジュール１３１ｃの機能に関して、ＷｅｂＡＰＩとしての登録をＷｅｂＡＰＩモジュール１３１ｗに要求する（Ｓ４１３）。当該要求には、ステップＳ４１２において通知されたＣモジュール１３１ｃの機能に対するＵＲＬに対して拡張モジュール１３１ｅのＵＲＬが付加されたＵＲＬと、拡張モジュール１３１ｅの仲介機能に関するアドレス情報とが指定される。本実施の形態において、Ｃモジュール１３１ｃの機能に対するＵＲＬに対して拡張モジュール１３１ｅのＵＲＬを付加したＵＲＬとは、「ｅｘｍｏｄｕｌｅ／００１／ｆｕｎｃｔｉｏｎＣ」である。以下、当該ＵＲＬを、Ｃモジュール１３１ｃの機能に対するＵＲＬという。
【００８０】
ＷｅｂＡＰＩモジュール１３１ｗは、Ｃモジュール１３１ｃの機能に対するＵＲＬと、拡張モジュール１３１ｅの仲介機能に関するアドレス情報とを対応付けて、例えば、メモリ装置１０３に記憶する。なお、拡張モジュール１３１ｅの仲介機能とは、ＷｅｂＡＰＩモジュール１３１ｗが受け付けたＨＴＴＰリクエストを、拡張エージェント１３ａ内のプログラムモジュール１３１に仲介又は転送する機能をいう。上記したように、拡張モジュール１３１ｅは、当該仲介機能とは別に、プログラムモジュール１３１の追加機能を有する。当該追加機能のアドレス情報は、ＷｅｂＡＰＩモジュール１３１ｗによって、当該追加機能に対するＵＲＬに対応付けられて記憶されている。ステップＳ４１３では、当該追加機能と、当該仲介機能とを区別可能するために、当該仲介機能のアドレス情報として、当該追加機能とは異なるアドレス情報が、ＷｅｂＡＰＩモジュール１３１ｗに通知される。
【００８１】
なお、例えば、Ｃモジュール１３１ｃのＷｅｂＡＰＩに対するＵＲＬは、エージェント１３の外部に対しては、「＜ｈｏｓｔ＞：＜ｐｏｒｔ＞／ｐｌａｔｆｏｒｍ／ｅｘｍｏｄｕｌｅ／００１／ｆｕｎｃｔｉｏｎＣ」として公開される。当該ＵＲＬは、Ｃモジュール１３１ｃのルートＵＲＬに対して、「／ｆｕｎｃｔｉｏｎＣ」が付加されたものである。
【００８２】
続いて、ＷｅｂＡＰＩモジュール１３１ｗは、通知されたＵＲＬに係る機能に対するインタフェースがＷｅｂＡＰＩとして登録されたことを示す応答を、拡張モジュール１３１ｅに返却する（Ｓ４１５）。
【００８３】
拡張モジュール１３１ｅは、Ｃモジュール１３１ｃの機能に対するインタフェースがＷｅｂＡＰＩとして登録されたことを示す応答を、プロキシモジュール１３１ｐに返信する（Ｓ４１６）。続いて、プロキシモジュール１３１ｐは、Ｃモジュール１３１ｃの機能に対するインタフェースがＷｅｂＡＰＩとして登録されたことを示す応答を、Ｃモジュール１３１ｃに対して返却する（Ｓ４１７）。Ｃモジュール１３１ｃは、ステップＳ４１０における起動指示に対する応答を、モジュールプラットフォーム１３２ａに対して行う（Ｓ４１８）。モジュールプラットフォーム１３２ａは、ステップＳ４０９における、Ｃモジュール１３１ｃの起動要求に対する応答を、拡張モジュール１３１ｅに対して返信する（Ｓ４１９）。
【００８４】
拡張モジュール１３１ｅは、ステップＳ４０２における、Ｃモジュール１３１ｃの追加要求に対する応答を、ＷｅｂＡＰＩモジュール１３１ｗに返却する（Ｓ４２０）。ＷｅｂＡＰＩモジュール１３１ｗは、Ｃモジュール１３１ｃのルートＵＲＬを含む応答を、ウィジェットランタイム１２経由で、ウィジェット１１ａに返信する（Ｓ４２１）。その後、ウィジェット１１ａは、当該ルートＵＲＬに基づいて、Ｃモジュール１３１ｃの削除や、Ｃモジュール１３１ｃの機能の呼び出しを行うことができる。
【００８５】
続いて、図８に対する変形例について説明する。図９は、ウィジェットからのプログラムモジュールの追加要求に応じて実行される処理手順の第二の例を説明するためのシーケンス図である。図９中、図８と同一又は対応するステップには、図８と同じステップ番号又は図８のステップ番号に対して枝番が付与されたステップ番号を付し、その説明は適宜省略する。
【００８６】
図８と図９との関係は、図４と図５との関係と同様である。すなわち、図９では、各プログラムモジュール１３１間のやり取りが、モジュールプラットフォーム１３２又はモジュールプラットフォーム１３２ａによって仲介されている。
【００８７】
具体的には、ステップＳ４０６、Ｓ４０８、Ｓ４１３、及びＳ４１５に関して、ＷｅｂＡＰＩモジュール１３１ｗと拡張モジュール１３１ｅとのやり取りは、モジュールプラットフォーム１３２によって仲介されている。
【００８８】
また、ステップＳ４１１及びＳ４１７に関して、Ｃモジュール１３１ｃとプロキシモジュール１３１ｐとのやり取りは、モジュールプラットフォーム１３２ａによって仲介されている。
【００８９】
その他の点は、図８と同様である。
【００９０】
続いて、ウィジェット１１ａが、Ｃモジュール１３１ｃの機能を呼び出す際に実行される処理について説明する。
【００９１】
図１０は、拡張エージェントにおけるプログラムモジュールの実行要求に応じて実行される処理手順の一例を説明するためのシーケンス図である。
【００９２】
ステップＳ５０１において、ウィジェット１１ａは、Ｃモジュール１３１ｃの実行要求をウィジェットランタイム１２に入力する。当該実行要求には、Ｃモジュール１３１ｃの機能に対するＵＲＬ（「＜ｈｏｓｔ＞：＜ｐｏｒｔ＞／ｐｌａｔｆｏｒｍ／ｅｘｍｏｄｕｌｅ／００１／ｆｕｎｃｔｉｏｎＣ」）が指定される。
【００９３】
なお、図８又は図９のステップＳ４２１において、ウィジェット１１ａには、Ｃモジュール１３１ｃのルートＵＲＬしか返信されていない。すなわち、Ｃモジュール１３１ｃの機能に対するＵＲＬは返信されていない。それにも拘わらず、ウィジェット１１ａがＣモジュール１３１ｃの機能に対するＵＲＬを指定できるのは、ウィジェット１１ａは、当初よりＣモジュール１３１ｃの利用を予定して実装されているからである。すなわち、ウィジェット１１ａは、Ｃモジュール１３１ｃの機能の識別子が「ｆｕｎｃｔｉｏｎＣ」であることを知っており、当該識別子を、Ｃモジュール１３１ｃのルートＵＲＬに付加されたものが、Ｃモジュール１３１ｃの機能に対するＵＲＬになるという規則又は約束事を知っているからである。なお、ステップＳ４２１において、Ｃモジュール１３１ｃの機能に対するＵＲＬが返信されてもよい。
【００９４】
続いて、ウィジェットランタイム１２は、当該ＵＲＬ宛にＨＴＴＰリクエストを送信する（Ｓ５０２）。当該ＨＴＴＰリクエストは、ＷｅｂＡＰＩモジュール１３１ｗによって受信される。
【００９５】
ＷｅｂＡＰＩモジュール１３１ｗは、当該ＵＲＬに対応づけられてメモリ装置１０３に記憶されているアドレス情報に係る拡張モジュール１３１ｅに対して、Ｃモジュール１３１ｃの実行を要求する（Ｓ５０３）。当該実行要求には、当該ＵＲＬが指定される。但し、当該ＵＲＬの全てが指定されなくてもよい。例えば、「／００１／ｆｕｎｃｔｉｏｎＣ」のみが指定されてもよい。
【００９６】
続いて、拡張モジュール１３１ｅは、指定されたＵＲＬを含む、Ｃモジュール１３１ｃの実行要求を、プロキシモジュール１３１ｐに送信（転送）する（Ｓ５０４）。続いて、プロキシモジュール１３１ｐは、当該ＵＲＬに対応付けられてメモリ装置１０３に記憶されているアドレス情報に基づいて、Ｃモジュール１３１ｃを呼び出す（Ｓ５０５）。Ｃモジュール１３１ｃは、呼び出しに応じ、自らに実装されている機能を実現するための処理を実行する（Ｓ５０６）。続いて、Ｃモジュール１３１ｃは、機能の実行結果（成果物）をプロキシモジュール１３１ｐに返却する（Ｓ５０７）。
【００９７】
プロキシモジュール１３１ｐは、当該実行結果を含む応答を機能モジュールに返信する（Ｓ５０８）。機能モジュールは、当該実行結果を含む応答をＷｅｂＡＰＩモジュール１３１ｗに返却する（Ｓ５０９）。ＷｅｂＡＰＩモジュール１３１ｗは、当該実行結果を含むＨＴＴＰレスポンスを、ウィジェットランタイム１２に返信する（Ｓ５１０）。ウィジェットランタイム１２は、当該実行結果を含む応答を、ウィジェット１１ａに返却する（Ｓ５１１）。
【００９８】
続いて、Ｃモジュール１３１ｃの削除について説明する。Ｃモジュール１３１ｃの削除命令は、例えば、Ｃモジュール１３１ｃのルートＵＲＬに対して、削除命令を示す所定の文字列（例えば、「ＤＥＬＥＴＥ」等）が指定されることによって表現される。本実施の形態では、「＜ｈｏｓｔ＞：＜ｐｏｒｔ＞／ｐｌａｔｆｏｒｍ／ｅｘｍｏｄｕｌｅ／００１／ＤＥＬＥＴＥ」によって、Ｃモジュール１３１ｃの削除命令が表現される。
【００９９】
ウィジェット１１ａは、Ｃモジュール１３１ｃの削除を希望する際、ＵＲＬとして、「＜ｈｏｓｔ＞：＜ｐｏｒｔ＞／ｐｌａｔｆｏｒｍ／ｅｘｍｏｄｕｌｅ／００１／ＤＥＬＥＴＥ」が指定されたＨＴＴＰリクエストを、ウィジェットランタイム１２を介して送信する。
【０１００】
ＷｅｂＡＰＩモジュール１３１ｗは、当該ＨＴＴＰリクエストを受信すると、当該ＵＲＬに含まれている「ＤＥＬＥＴＥ」に基づいて、当該ＨＴＴＰリクエストが、「／ｅｘｍｏｄｕｌｅ／００１」によって識別されるプログラムモジュール１３１の削除命令であることを解釈する。そこで、ＷｅｂＡＰＩモジュール１３１ｗは、「／ｅｘｍｏｄｕｌｅ／００１」に対応付けられてメモリ装置１０３に記憶されているアドレス情報に係る拡張モジュール１３１ｅに対して、登録ＩＤが「００１」であるプログラムモジュール１３１の削除を要求する。拡張モジュール１３１ｅは、モジュールプラットフォーム１３２ａに対して、登録ＩＤが「００１」であるプログラムモジュール１３１の削除を要求する。モジュールプラットフォーム１３２ａは、登録ＩＤが「００１」であるＣモジュール１３１ｃを削除する。すなわち、Ｃモジュール１３１ｃに関して、モジュールプラットフォーム１３２ａに対する登録が解除される。
【０１０１】
なお、Ｃモジュール１３１ｃ以外であって、拡張エージェント１３ａに追加された他のプログラムモジュール１３１についても、同様の手順で削除することができる。
【０１０２】
上述したように、本実施の形態によれば、エージェント１３は、機能拡張用のインタフェース（プログラムモジュール１３１の追加機能に対するインタフェース）を備え、当該インタフェースの呼び出しに応じて、機能を拡張することができる。したがって、ウィジェット１１に機能を提供するエージェント１３に関して、機能拡張の簡便性を向上させることができる。
【０１０３】
また、機能拡張に係るプログラムモジュール１３１は、エージェント１３とは別プロセスにおいて機能する拡張エージェント１３ａに追加される。したがって、複数のウィジェット１１から同時に利用される可能性の高いエージェント１３が、当該プログラムモジュール１３１の動作不正やメモリの消費等の影響を受ける可能性は低い。よって、ウィジェット１１に機能を提供するエージェント１３に関して、機能拡張の安全性を向上させることができる。
【０１０４】
また、プログラムモジュール１３１の機能に対するＵＲＬは、当該プログラムモジュール１３１より通知される（取得される）。換言すれば、プログラムモジュール１３１の機能に対するＵＲＬは、ランダムに割り当てられるものではなく、プログラムモジュール１３１より取得される識別子に基づいて、所定の規則に則して生成される。したがって、プログラムモジュール１３１を利用するウィジェット１１にとって、プログラムモジュール１３１の機能に対するＵＲＬがどのような値であるかについて、予測性を高めることができる。
【０１０５】
なお、ＷｅｂＡＰＩモジュール１３１ｗは、メモリ装置１０３に記憶しているＵＲＬの一覧を、ウィジェット１１に対して提供するインタフェースを有していてもよい。具体的には、当該一覧の提供機能に対するＵＲＬがＷｅｂＡＰＩモジュール１３１ｗに対して割り当てられてもよい。ＷｅｂＡＰＩモジュール１３１ｗは、当該ＵＲＬが指定されたＨＴＴＰリクエストが受信された場合は、メモリ装置１０３に記憶しているＵＲＬの一覧を返信する。ウィジェット１１は、当該一覧の中から、例えばキーワード検索によって所望の機能に対するＵＲＬを特定することができる。その結果、ウィジェット１１と機能（プログラムモジュール１３１）との関係を、疎又は動的なものとすることができる。
【０１０６】
なお、本実施の形態において、エージェント１３は、第一の機能実行手段の一例である。拡張エージェント１３ａは、第二の機能実行手段の一例である。プログラムモジュール１３１の機能に対するＵＲＬは、機能毎に割り当てられた識別情報の一例である。
【０１０７】
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【０１０８】
１０          情報処理装置
１１          ウィジェット
１２          ウィジェットランタイム
１３          エージェント
１３ａ        拡張エージェント
１００        ドライブ装置
１０１        記録媒体
１０２        補助記憶装置
１０３        メモリ装置
１０４        ＣＰＵ
１０５        インタフェース装置
１０６        表示装置
１０７        入力装置
１３１        プログラムモジュール
１３２        モジュールプラットフォーム
１３３        モジュールランタイム
１３１ａ      Ａモジュール
１３１ｂ      Ｂモジュール
１３１ｃ      Ｃモジュール
１３１ｅ      拡張モジュール
１３１ｐ      プロキシモジュール
１３１ｗ      ＷｅｂＡＰＩモジュール
Ｂ            バス
【先行技術文献】
【特許文献】
【０１０９】
【特許文献１】特開２０１０−０９２３７６号公報
【図１】
0005927930.tif 000002
【図２】
0005927930.tif 000003
【図３】
0005927930.tif 000004
【図４】
0005927930.tif 000005
【図５】
0005927930.tif 000006
【図６】
0005927930.tif 000007
【図７】
0005927930.tif 000008
【図８】
0005927930.tif 000009
【図９】
0005927930.tif 000010
【図１０】
0005927930.tif 000011