(57)【要約】【課題】仮想マシンに並行してサポートされる複数のタスクに関連付けられたネイティブイベントを処理する技術が提供される。【解決手段】仮想マシンのユーザは、プラットフォーム固有のネイティブイベントの処理が必要なタスクを並行して実施することができる。ネイティブイベントは、ディスパッチャを用いて、仮想マシンによって並行してサポートされる複数のタスクにディスパッチされる。ディスパッチャは、様々な基準に基づいて、ネイティブイベントを受け付けるタスクを複数の並行タスクから判断できる。携帯機器では通常、フォアグラウンドタスクは、ユーザに表示されている唯一のタスクであるため、フォアグラウンドタスクへのイベントのディスパッチは、携帯機器をサポートする仮想マシンに特に有用である。【選択図】１Ｂ
2009506467.tif 000002
【特許請求の範囲】
【請求項１】
プラットフォーム上で動作し第１および第２のタスクを並行して実行可能な仮想マシンによってネイティブイベントを処理する方法であって、
前記仮想マシンが、前記プラットフォームに関連付けられた前記ネイティブイベントを受け付ける工程と、
前記第１および第２のタスクが前記仮想マシンによって並行して実行される場合、前記仮想マシンが、該第１および第２のタスクの一方を、前記ネイティブイベントを受け付ける選択タスクとして選択する工程と、
前記ネイティブイベントを前記選択タスクのために処理する工程と
を備える方法。
【請求項２】
請求項１記載の方法であって、更に、
前記選択タスク用のイベントリポジトリおよびイベントハンドラを用意する工程と、
前記ネイティブイベントを前記イベントリポジトリに格納する工程と、
前記ネイティブイベントの処理を開始するために前記イベントハンドラを呼び出す工程と、
前記イベントハンドラに基づいて前記ネイティブイベントを処理する工程と
を備える方法。
【請求項３】
請求項２記載の方法であって、
前記イベントリポジトリは、先入れ先出しキューを含み、
前記イベントハンドラは、イベントハンドラスレッドを含み、
前記選択タスクを選択する工程は、イベントマネージャスレッドによって実行される方法。
【請求項４】
更に、前記ネイティブイベントをＪａｖａ（登録商標）に対応させる工程を備える請求項１記載の方法。
【請求項５】
前記ネイティブイベントをＪａｖａ（登録商標）に対応させる工程は、前記仮想マシンによって実行される請求項１記載の方法。
【請求項６】
前記選択タスクは、Ｊａｖａ（登録商標）対応ミッドレットを含む請求項１記載の方法。
【請求項７】
前記選択タスクは、Ｊａｖａ（登録商標）対応ミッドレットの一部を含む請求項１記載の方法。
【請求項８】
前記選択タスクを選択する工程は、前記選択タスクの選択に際しフォアグラウンドタスクを選択する工程を含む請求項１記載の方法。
【請求項９】
請求項１記載の方法であって、
前記選択タスクは、Ｊａｖａ（登録商標）対応ミッドレットを含み、
前記選択タスクを選択する工程は、前記選択タスクの選択に際しフォアグラウンドタスクを選択する工程を含む方法。
【請求項１０】
前記フォアグラウンドタスクを選択する工程は、前記ユーザに対して表示されているタスクを選択する工程を含む請求項９記載の方法。
【請求項１１】
前記プラットフォームは、携帯機器を含む請求項１０記載の方法。
【請求項１２】
第１および第２のタスクを並行して実行可能でありプラットフォームに関連付けられたネイティブイベントを処理する仮想マシンであって、
前記第１および第２のタスクを前記仮想マシンによって並行して実行される場合、前記プラットフォームに関連付けられたネイティブイベントを受け付けると共に、前記第１および第２のネイティブイベントの一方を、前記ネイティブイベントを処理する選択タスクとして選択するネイティブイベント・ディスパッチャを備える仮想マシン。
【請求項１３】
請求項１２記載の仮想マシンであって、更に、前記選択タスクが選択された場合に呼び出された後、前記ネイティブイベントを処理するネイティブイベント・ハンドラを備える仮想マシン。
【請求項１４】
請求項１２記載の仮想マシンであって、更に、
前記選択タスク用のネイティブイベント・リポジトリおよびネイティブイベント・ハンドラを備え、
前記ネイティブイベント・ディスパッチャは、更に、
前記ネイティブイベントを前記ネイティブイベント・リポジトリに格納し、
前記ネイティブイベントの処理を開始するために前記ネイティブイベント・ハンドラを呼び出す仮想マシン。
【請求項１５】
プラットフォーム上で動作し該プラットフォーム上で第１および第２のタスクを並行して実行可能な仮想マシンによってネイティブイベントを処理する方法であって、
前記仮想マシンが、前記プラットフォームに関連付けられた前記ネイティブイベントを受け付ける工程と、
前記第１および第２のタスクのどちらがフォアグラウンドタスクであるかを、前記仮想マシンが判断する工程であって、前記フォアグラウンドタスクは、表示されている唯一のタスクである工程と、
前記ネイティブイベントを前記フォアグラウンドタスクによって処理する工程と
を備える方法。
【請求項１６】
前記プラットフォームは、携帯機器を含む請求項１５記載の方法。
【請求項１７】
前記第１および第２のタスクは、ミッドレットを含む請求項１５記載の方法。
【請求項１８】
プラットフォーム上で第１および第２のタスクを並行して実行可能な仮想マシンに、ネイティブイベントを処理する機能を実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
前記プラットフォームに関連付けられたネイティブイベントを受け付ける機能と、
前記第１および第２のタスクのどちらがフォアグラウンドタスクであるかを判断する機能であって、前記フォアグラウンドタスクは、表示されているタスクである機能と、
前記フォアグラウンドタスクを前記ネイティブイベントのために処理する機能と
を実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１９】
請求項１８に記載のコンピュータ読み取り可能な記録媒体であって、
前記仮想マシンは、携帯機器上で動作し、
前記フォアグラウンドタスクは、Ｊａｖａ（登録商標）対応ミッドレットを含むコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、コンピューティングシステムに関するものである。本発明は、より具体的には、仮想マシンにおいて、並行タスクのためにイベントを処理する技術に関するものである。
【背景技術】
【０００２】
高水準のコンピュータプログラミング言語の目標の一つは、移植可能なプログラミング環境を得ることにある。このような環境では、コンピュータプログラムを別のコンピュータプラットフォームに容易に移植可能である。Ｃ言語などの高水準言語は、下層のコンピュータアーキテクチャから切り離された分離層を提供する。現在ほとんどのコンピュータアプリケーションが高水準言語で記述されている事実からも、これらの高水準言語の成果は明らかである。
【０００３】
移植性は、インターネット用インタフェースプロトコルとしてのワールドワイドウェブ（「ウェブ」）の出現にともなって、新たな高みに達した。ワールドワイドウェブは、グラフィカルインタフェースを通じた異なるコンピュータプラットフォーム間の通信を可能にする。ウェブ上で通信するコンピュータは、アプレットと称される小さなアプリケーションをダウンロードして実行することができる。アプレットは、異なる種類のコンピュータプラットフォーム上で実行可能である場合、Ｊａｖａ（登録商標）仮想マシンによって実行されるのが通常である。仮想マシンは、一般に、特定のハードウェア、ソフトウェア、またはその両方に実装された抽象的なコンピューティングマシンである。仮想マシンは、特定のハードウェア用、ソフトウェア用、またはその両方用のプラットフォームアプリケーションをサポートすることができる。以下では、Ｊａｖａ（登録商標）仮想マシンがより普及しているものと仮定して、Ｊａｖａコンピューティング環境について詳しく述べるものとする。
【０００４】
Ｊａｖａプログラミング環境は、ここ最近、極めてポピュラーになってきた。Ｊａｖａプログラミング言語は、小型機器（例えばポケベル、携帯電話、スマートカード等）からスーパーコンピュータに至る広範囲のコンピュータ上で実行可能であるように、十分な移植性を有するように設計された言語である。Ｊａｖａプログラミング言語（およびその他の言語）で記述されたコンピュータプログラムは、Ｊａｖａ仮想マシン処理系による実行に適したＪａｖａバイトコード命令にコンパイルされ得る。Ｊａｖａ仮想マシンは、通例は、Ｊａｖａ仮想マシン命令セット用のインタープリタの形態をとるソフトウェアとして実装されるが、ソフトウェア、ハードウェア、またはその両方でもあり得る。特定のＪａｖａ仮想マシン処理系と、それに対応するサポートライブラリとが合わさって、Ｊａｖａランタイム環境が構成される。
【０００５】
Ｊａｖａプログラミング言語のコンピュータプログラムは、一つもしくはそれ以上のクラスまたはインタフェース（ここでは併せてクラスまたはクラスファイルと称する）の形で作成される。このようなプログラムは、一般に、プラットフォームから独立している、すなわちハードウェアおよびオペレーティングシステムから独立している。したがって、これらのコンピュータプログラムは、Ｊａｖａランタイム環境の処理系を実行可能な任意のコンピュータ上で、修正なく実行され得る。
【０００６】
Ｊａｖａプログラミング言語で記述されたオブジェクト指向のクラスは、「クラスファイルフォーマット」と称される特定のバイナリフォーマットにコンパイルされる。クラスファイルは、単一のクラスに関連付けられた複数のコンポーネントを含む。これらのコンポーネントは、そのクラスに関連付けられたメソッド、インタフェース、またはこれらの両方であることが可能である。また、クラスファイルフォーマットは、そのクラスに関連付けられた大量の補助的情報を含むことができる。クラスファイルフォーマット（およびＪａｖａ仮想マシンの通常動作）は、ティム・リンドホルムおよびフランク・イェリンによる「Ｊａｖａ仮想マシン第２版」（１９９９年４月、ＩＳＢＮ  ０−２０１−４３２９４−３）に詳細に記載されている。本書は、引用によって、その全体が本明細書に組み込まれるものとする。
【０００７】
図１Ａは、単純なＪａｖａソースコード１０１が、インタープリタ、すなわちＪａｖａ仮想マシンによる実行を経て進展する様子を示している。Ｊａｖａソースコード１０１は、Ｊａｖａで記述された定番の「Ｈｅｌｌｏ  Ｗｏｒｌｄ」プログラムを含む。ソースコードは、ついで、ソースコードをバイトコードにコンパイルするバイトコードコンパイラ１０３に入力される。バイトコードは、ソフトウェアをエミュレートされたコンピュータによって実行される仮想マシン命令である。仮想マシン命令は、通常は汎用である（すなわち、特定のマイクロプロセッサアーキテクチャ用またはコンピュータアーキテクチャ用に設計されたものではない）が、これは、必ずしも必要ではない。バイトコードコンパイラは、Ｊａｖａプログラム用のバイトコードを含むＪａｖａクラスファイル１０５を出力する。Ｊａｖａクラスファイルは、Ｊａｖａ仮想マシン１０７に入力される。Ｊａｖａ仮想マシンは、Ｊａｖａクラスファイル内のバイトコードをデコードして実行するインタープリタである。Ｊａｖａ仮想マシンは、インタープリタであるが、通常は、マイクロプロセッサアーキテクチャまたはコンピュータアーキテクチャをソフトウェアの形で模倣する（例えばマイクロプロセッサアーキテクチャまたはコンピュータアーキテクチャがハードウェア内に存在しない）ことから仮想マシンと称される。
【０００８】
仮想マシンは、極めて有用である。しかしながら、後述されるように、従来の仮想マシンは、タスクの種類によっては、ユーザによる複数タスクの並行処理を可能にするマルチタスク環境を提供することができなかった。このようなタスクの例として、ユーザまたは別のソースからの入力を受け付ける対話型タスク（例えばアプリケーションプログラム）が挙げられる。
【０００９】
マルチタスクコンピューティング環境において、タスクは、タスクを主として実行する単一のコンピューティングユニットと称することができる。コンピューティングユニットは、例えば、プログラミング命令（例えば、Ｃ、Ｃ＋＋、またはＪａｖａで記述された高水準プログラミング言語）のセットによって表すことができる。他方では、タスクは、アプリケーションプログラム全体（すなわちアプレット）でもあり得る。例えば、タスクは、電卓、音楽プレーヤ、ビデオプレーヤ、または対話型ゲームであり得る。ユーザは、これらの各タスクを開始し使用することによって、機能タスクすなわちコンピューティングタスクを形成することができる。
【００１０】
いずれの場合も、マルチタスクをサポートするコンピューティングシステムによって、タスクを並行して実行させることが可能になる。並行タスクは、通常は、交互に実行可能である、またはコンピュータシステムリソースを交互に共有可能である、またはその両方が可能である。しかしながら、ユーザの観点から見れば、複数のタスクを並行して実施可能である。例えば、ユーザは、電卓アプリケーションと音楽プレーヤとを同時に使用することができる。これは、ユーザが音楽を聴きながら電卓を使用することを可能にする。しかしながら、従来の仮想マシンは、対話型タスクを同時に使用可能にするマルチタスク環境を提供するものではなかった。これは、すなわち、従来の仮想マシンのユーザは、二つの並行タスクと同時に効果的に相互にやりとりすることができないことを意味する。
【００１１】
以上からわかるように、仮想マシンにおいてマルチタスク処理を行うための技術が必要とされている。
【発明の開示】
【００１２】
上述されたように、今日のコンピューティング環境では、仮想マシンが極めて有用である。マルチタスクをサポートする環境は、ユーザによる複数タスクの並行処理も可能にするので、マルチタスクをサポートする仮想マシンの開発も、更に望まれている。
【００１３】
マルチタスクコンピューティング環境では、タスクは、タスクを主として実施するコンピューティングユニットと称することができる。コンピューティングユニットは、例えば、プログラミング命令（例えば、Ｃ、Ｃ＋＋、またはＪａｖａで記述された高水準プログラミング言語）のセットによって表すことができる。タスクは、また、アプリケーションプログラム全体、すなわちアプレットでもあり得るし、または、アプリケーションプログラム全体、すなわちアプレットに関連付けることもできる。例えば、タスクは、電卓、音楽プレーヤ、ビデオプレーヤ、またはコンピュータゲームであり得る。いずれの場合も、マルチタスクをサポートするコンピューティングシステムによって、タスクを並行して実行させることが可能になる。これら複数のタスクは、交互に実行可能である、またはコンピュータシステムリソースを交互に共有可能である、またはその両方が可能である。これは、ユーザが複数のタスクを実施することを可能にする。例えば、ユーザは、電卓アプリケーションと音楽プレーヤとを同時に使用することができる。これは、ユーザが音楽を聴きながら電卓を使用することを可能にする。
【００１４】
しかしながら、タスクのなかには、「イベント」処理を必要とするものがある。このようなタスクの例として、ユーザからの入力を受け付ける対話型プログラムが挙げられ、これらは、ユーザにとって、より面白いのが通常である。イベント処理は、外部イベント（例えばキーボードによるユーザからの入力）を適切なタスク（例えば対話型ゲーム）に送ること、および処理することを含む。仮想マシンにおいて、外部イベントは、プラットフォーム固有のハードウェアコンポーネントまたはソフトウェアコンポーネントによって生成、伝送、もしくは処理されるのが通常である。これらプラットフォーム固有のイベントは、「ネイティブ」イベントと称することができる。仮想マシンにおけるネイティブイベントの処理は、アプリケーションプログラムがプラットフォーム依存である従来のコンピューティング環境では通常的に遭遇しえない新たな問題を提起する。したがって、仮想マシンにおいてネイティブイベント処理に対処することが必要になる。
【００１５】
従来の仮想マシンは、マルチタスク環境において並行タスクのネイティブイベントを処理するためのメカニズムを提供するものではない。これは、すなわち、従来の仮想マシンのユーザは、ネイティブイベント処理を必要とする二つのタスクを並行して使用することができないことを意味する。したがって、マルチタスクをサポートする仮想マシンにおいてネイティブイベントを処理するための技術が必要とされている。ネイティブイベントの処理は、アプリケーションプログラムがプラットフォーム依存である従来のコンピューティング環境で通常的に遭遇される問題とは異なる。したがって、これらの技術は、従来のコンピューティング環境では通常的に遭遇しえない問題に対処することを望まれる。
【００１６】
本発明は、大まかに言うと、仮想マシンに並行してサポートされている複数のタスクに関連付けられたネイティブイベントを処理するための技術に関するものである。この技術を用いれば、仮想マシンのユーザは、たとえプラットフォーム固有の（すなわちネイティブ）イベント（例えばプラットフォーム固有の入力）の処理を必要とするタスクであっても、並行して実施することが可能になる。本発明の一態様にしたがって、ネイティブイベントをディスパッチするためのスマートイベントディスパッチャを使用する仮想マシンが開示される。スマートイベントディスパッチャは、仮想マシンによって並行してサポートされている複数のタスクにネイティブイベントを送る。知られているように、スマートイベントディスパッチャは、複数の並行タスクのなかから、処理のためにネイティブイベントを受け付けるべきタスクを判断することができる。この判断は、異なる様々な基準に基づいて下すことができる。例えば、特定のタスクに対し、プラットフォーム依存の特定のエンティティ（例えばデバイス）によって生成、処理、または伝送されたネイティブイベントを割り当てることができる。イベントは、また、ユーザによる割り当てに基づいてディスパッチする（例えばユーザによってプログラムする）ことも、または、イベントの各種の属性（例えば、コンテンツ、受信ポート、プロキシミティ等）に基づいてディスパッチすることも可能である。一実施形態において、ネイティブイベントは、フォアグラウンドタスクに送られる。モバイル機器において、フォアグラウンドタスクは、ユーザにいっときに表示される唯一のタスクであるのが通常である。したがって、本実施形態は、モバイル機器をサポートする仮想マシンに対して特に有用である。
【００１７】
本発明は、方法、装置、コンピュータ読み取り可能媒体、およびデータベースシステムを含む多くの方法で実現することができる。以下では、本発明のいくつかの実施形態が説明される。
【００１８】
添付の図面と併せて記載される以下の詳細な説明から、本発明の上記のおよびその他の特性ならびに利点がいっそう明らかになる。
【００１９】
本発明は、添付の図面と併せて記載される以下の詳細な説明から、容易に理解することができる。図中において、類似の参照符号は類似の構成要素を表すものとする。
【発明を実施するための最良の形態】
【００２０】
発明の背景に記載されたように、仮想マシンは、今日のコンピューティング環境において、極めて有用である。マルチタスクをサポートする環境は、ユーザによる複数タスクの並行処理も可能にするので、マルチタスクをサポートする仮想マシンの開発も、更に望まれている。
【００２１】
マルチタスクコンピューティング環境では、タスクは、タスクを主として実施するコンピューティングユニットと称することができる。コンピューティングユニットは、例えば、プログラミング命令（例えば、Ｃ、Ｃ＋＋、またはＪａｖａで記述された高水準プログラミング言語）のセットによって表すことができる。タスクは、また、アプリケーションプログラム全体、すなわちアプレットであり得るし、または、アプリケーションプログラム全体、すなわちアプレットに関連付けることもできる。例えば、タスクは、電卓、音楽プレーヤ、ビデオプレーヤ、またはコンピュータゲームであり得る。いずれの場合も、マルチタスクをサポートするコンピューティングシステムによって、タスクを並行して実行させることが可能になる。これら複数のタスクは、交互に実行可能である、またはコンピュータシステムリソースを交互に共有可能である、またはその両方が可能である。これは、ユーザが複数のタスクを実施することを可能にする。例えば、ユーザは、電卓アプリケーションと音楽プレーヤとを同時に使用することができる。これは、ユーザが音楽を聴きながら電卓を使用することを可能にする。
【００２２】
しかしながら、タスクのなかには、その処理のために「イベント」処理を必要とするものがある。このようなタスクの例として、ユーザからの入力を受信する対話型プログラムが挙げられ、これらは、ユーザにとって、より面白いのが通常である。イベント処理は、外部イベント（例えばキーボードによるユーザからの入力）を適切なタスク（例えば対話型ゲーム）に送ること、および処理することを含む。仮想マシンにおいて、外部イベントは、プラットフォーム固有のハードウェアコンポーネントまたはソフトウェアコンポーネントによって生成、伝送、もしくは処理されるのが通常である。これらプラットフォーム固有のイベントは、「ネイティブ」イベントと称することができる。仮想マシンにおけるネイティブイベントの処理は、アプリケーションプログラムがプラットフォーム依存である従来のコンピューティング環境では通常的に遭遇しえない新たな問題を提起する。したがって、仮想マシンにおいてネイティブイベント処理に対処することが必要になる。
【００２３】
しかしながら、従来の仮想マシンは、マルチタスク環境において並行タスクのネイティブイベントを処理するためのメカニズムを提供するものではない。これは、すなわち、従来の仮想マシンのユーザは、ネイティブイベント処理を必要とする二つのタスクを並行して使用することができないことを意味する。したがって、マルチタスクをサポートする仮想マシンにおいてネイティブイベントを処理するための技術が必要とされている。ネイティブイベントの処理は、アプリケーションプログラムがプラットフォーム依存である従来のコンピューティング環境で通常的に遭遇される問題とは異なる。したがって、これらの技術は、従来のコンピューティング環境では通常的に遭遇しえない問題に対処することを望まれる。
【００２４】
したがって、本発明は、仮想マシンに並行してサポートされている複数タスクに関連付けられたネイティブイベントを処理するための技術に関するものである。この技術を用いれば、仮想マシンのユーザは、たとえプラットフォーム固有の（すなわちネイティブ）イベント（例えばプラットフォーム固有の入力）の処理を必要とするタスクであっても、並行して実施することが可能になる。本発明の一態様にしたがって、ネイティブイベントをディスパッチするためのスマートイベントディスパッチャを使用する仮想マシンが開示される。スマートイベントディスパッチャは、仮想マシンによって並行してサポートされている複数のタスクにネイティブイベントを送る。知られているように、スマートイベントディスパッチャは、複数の並行タスクのなかから、処理のためにネイティブイベントを受信するべきタスクを決定することができる。この決定は、異なる様々な基準に基づいて下すことができる。例えば、特定のタスクに対し、プラットフォーム依存の特定のエンティティ（例えばデバイス）によって生成、処理、または伝送されたネイティブイベントを割り当てることができる。イベントは、また、ユーザによる割り当てに基づいてディスパッチする（例えばユーザによってプログラムする）ことも、または、イベントの各種の属性（例えば、コンテンツ、受信ポート、プロキシミティ等）に基づいてディスパッチすることも可能である。一実施形態において、ネイティブイベントは、フォアグラウンドタスクに送られる。モバイル機器において、フォアグラウンドタスクは、ユーザにいっときに表示される唯一のタスクであるのが通常である。したがって、本実施形態は、モバイル機器をサポートする仮想マシンに対して特に有用である。
【００２５】
以下では、図１Ｂ〜３を参照にしながら発明の実施形態が説明される。しかしながら、当業者ならば容易にわかるように、本発明は、これらの実施形態の範囲に限定されず、これらの図に基づく詳細な説明は、例示のみを目的としたものである。
【００２６】
図１Ｂは、本発明の一実施形態にしたがった、コンピューティング環境１１０を示している。図１Ｂに示されるように、仮想マシン１１２は、プラットフォーム１１６上で、アプリケーション層１１４をサポートしている。アプリケーション層１１４は、仮想マシン１１２によってサポートされている一つまたはそれ以上のアプリケーション（例えばアプレット）を表している。プラットフォーム１１６は、コンピューティング環境１１０にある、ハードウェア固有のコンポーネント、ソフトウェア固有のコンポーネント、またはその両方を表している。なお、仮想マシン１１２によってサポートされている、アプリケーション層１１４にある一つまたはそれ以上のアプリケーションは、プラットフォーム独立であることが可能である。要するに、アプリケーション層１１４にあるアプリケーションは、異なるプラットフォーム（不図示）に移植され得る。また、仮想マシン１１２は、仮想マシン１１２上で並行して動作している二つの並行タスクを、すなわちタスク１２０およびタスク１２２をサポートしている。
【００２７】
図１Ｂに示されるように、仮想マシン１１２は、タスク１２０，１２２に関連付けられたいくつかのプラットフォーム固有のイベント（すなわちネイティブイベント）Ｅ１，Ｅ２，Ｅ３，Ｅ４を受け付ける。これらのネイティブイベントは、例えば、ネットワークデバイス（またはインタフェース）を介して受信されたデータや、キーボードを介してユーザによって生成された入力等であることが可能である。概して、ネイティブイベントは、プラットフォーム１１６によって生成、処理、または伝送された任意のイベントであることが可能である。いずれの場合も、これらのネイティブイベントは、仮想マシン１１２による処理のために、適切なタスクに提示されるべきものである。
【００２８】
知られているように、スマートイベントディスパッチャ１１８は、並行タスク１２０，１２２のどちらがネイティブイベントＥ１，Ｅ２，Ｅ３，Ｅ４を受信するべきかを決定する。例えば、イベントＥ１，Ｅ４がタスク１２０に送られるのに対し、ネイティブイベントＥ２，Ｅ３はタスク１２２に送られる。これらのネイティブイベントは、ディスパッチのために、スマートイベントディスパッチャ１１８に直接受け付けられ得るが、これは必要条件ではない。
【００２９】
スマートイベントディスパッチャ１１８による判断は、望ましい様々な基準に基づいて下される。例えば、特定のタスクに対し、特定のエンティティ（例えばデバイス）によって生成された、または受信されたネイティブイベントを割り当てることができる。別の一実施形態では、ネイティブイベントは、現時点でフォアグラウンドにある（例えば現時点でユーザに表示されている）タスクにディスパッチされる。ネイティブイベント・ディスパッチャ１１８は、また、ユーザによる選択結果に基づいてイベントをディスパッチする（例えばユーザによってプログラムする）ことも、または、イベントの属性（例えば、コンテンツ、入力、ポート、プロキシミティ等）に基づいてディスパッチすることも可能である。いずれの場合も、スマートイベントディスパッチャ１１８は、仮想マシン１１２によってサポートされているマルチタスク環境にある特定のタスクにネイティブイベントを送る。
【００３０】
図１Ｃは、並行タスクをサポートする仮想マシンにおいて、特定のプラットフォームに関連付けられたプラットフォーム依存の（ネイティブ）イベントを処理するための方法１５０を、本発明の一実施形態にしたがって示している。方法１５０は、例えば、プラットフォーム１１６（図１Ｂに示される）に関連付けられたネイティブイベントを処理する目的で、仮想マシン１１２によって使用することができる。先ずは、動作１５２において、特定のプラットフォームに関連付けられたプラットフォーム依存の（ネイティブ）イベントが受け付けられる。次に、動作１５４において、プラットフォーム依存の（ネイティブ）イベントを処理するために割り当てられているタスクが判断される。その後、方法１５０は動作１５６に進み、プラットフォーム依存の（ネイティブ）イベントは、その処理のために割り当てられたタスクに送信される。したがって、動作１５８において、プラットフォーム依存の（ネイティブ）イベントは、その処理のために割り当てられたタスクによって処理される。方法１５０は、動作１５８の後に終了する。
【００３１】
図２は、本発明の別の一実施形態にしたがった、Ｊａｖａ対応のコンピューティング環境２００を示している。Ｊａｖａ対応のコンピューティング環境２００は、モバイル情報デバイスプロファイル（ＪＳＲ−３７）のＪａｖａ仕様にしたがったコンピューティング環境を図示したものである。本文献は、引用によって、その全体が本明細書に組み込まれるものとする。
【００３２】
図１のコンピューティング環境１１０と同様に、Ｊａｖａ対応のコンピューティング環境２００のアーキテクチャ層として、プラットフォーム層２０２、仮想マシン２０４、およびアプリケーション層２０６が図示されている。図２に示されるように、プラットフォーム層２０２は、モバイル情報デバイス（ＭＩＤ）ハードウェア層２０８およびネイティブシステムソフトウェア層２１０を含む。モバイル情報デバイス（ＭＩＤ）ハードウェア層２０８は、モバイルコンピューティングデバイス（例えば電話や携帯情報端末）用のハードウェアを表している。ネイティブシステムソフトウェア層２１０は、モバイル情報デバイス（ＭＩＤ）ハードウェア層２０８の上で動作しており、例えば、デバイスを使用するために用いられるオペレーティングシステム、ライブラリ、またはその両方を含むことができる。ただし、ネイティブシステムソフトウェア層２１０は、必ずしもオペレーティングシステムを有する必要があるのではない点に留意する必要がある。したがって、仮想マシン２０４は、ネイティブシステムソフトウェア層２１０がオペレーティングシステムを有するものとは想定しておらず、実際には、仮想マシン２０４は、イベントをディスパッチする動作に際してオペレーティングシステムを真似ることができる。
【００３３】
このように、スマートイベントディスパッチャ（またはマネージャ）２１２は、プラットフォーム固有のネイティブシステムＥ１をタスク２１４にディスパッチすると同時に、もう一つのイベントＥ２をもう一つのタスク２１６にディスパッチすることができる。繰り返し述べるが、タスク２１４，２１６は、仮想マシン２０４によって並行してサポートされている。本実施形態において、スマートイベントディスパッチャ（またはマネージャ）２１２は、ネイティブイベントを待機させてそれらを様々なタスクにディスパッチするイベントマネージャスレッドとして実装される。図２に示されるように、スマートイベントディスパッチャ（またはマネージャ）２１２は、待機イベント２１６およびイベントディスパッチロジック２１８を含む。実際は、待機イベント２１６は、ネイティブイベントが受け付けられるまで、スマートイベントディスパッチャ（またはマネージャ）２１２を待機させる働きをする。例えば、ネイティブイベントＥ２が受け付けられると、イベントディスパッチロジック２１８は起動される。イベントディスパッチロジック２１８は、どのタスクがネイティブイベントＥ２を受け付けるべきかを判断する。前述のように、この決定は、異なる様々な基準に基づいて下すことができる。いずれの場合も、スマートイベントディスパッチャ（またはマネージャ）２１２は、イベントディスパッチロジック２１８に基づいて、複数のタスク（タスク２１４，２１６）の少なくとも一方にネイティブイベントＥ２を送る。
【００３４】
図２に示されるように、スマートイベントディスパッチャ（またはマネージャ）２１２は、ネイティブイベントＥ２をタスク２１６に送る。より具体的に言うと、スマートイベントディスパッチャ（またはマネージャ）２１２は、ネイティブイベントＥ２をイベントリポジトリ（例えば先入れ先出しキュー）２２０に格納する。スマートイベントディスパッチャ（またはマネージャ）２１２は、また、ネイティブイベントが転送されてきたことを、タスク２１６に関連付けられたイベントハンドラ２２１に通知する。すると、タスク２１６に関連付けられたイベントハンドラ２２１（例えばイベントハンドラスレッド）が呼び出される。実際は、転送の通知によって、待機イベントロジック２２２が呼び出される。その結果、イベント処理ロジック２２３は、イベントリポジトリ２２０にアクセスし、タスク２１６のためにイベントＥ２を処理することが可能になる。なお、スマートイベントディスパッチャ（またはマネージャ）２１２は、イベントリポジトリ２２０にデータを入れる前に、そのデータを操作する（例えばカプセル化する）ことができる。この動作は、後ほど詳述される（例として、図３の動作３３０を参照）。
【００３５】
なお、タスク２１６，２１８は、例えば、Ｊａｖａモバイル情報デバイスプロファイル２２８に対応したモバイル情報デバイスプロファイル（ＭＩＤＰ）アプリケーション２２４，２２６（すなわち、ＭＩＤｌｅｔ（ミッドレット））に関連付けることができる。モバイル情報デバイスプロファイル２２８は、引用によってその全体を本明細書に組み込まれたモバイル情報デバイスプロファイル（ＪＳＲ−３７）のＪａｖａ仕様で説明されている。
【００３６】
なお、図２に示されたイベントディスパッチの技術は、モバイル情報デバイスプロファイル（ＪＳＲ−３７）のＪａｖａ仕様に準拠していないコンピューティング環境でも実施することができる。これは、とりわけイベントマネージャ、イベントハンドラ、およびイベントキューが、前述されたのと同様に、イベントをディスパッチする目的であらゆる仮想マシン内に実装可能であることから明らかである。このように、これらの技術は、あらゆる仮想マシンにおいて、イベントをディスパッチするために使用することができる。
【００３７】
上述されたように、本発明の一実施形態にしたがうと、ネイティブイベントは、例えばフォアグラウンドにあるタスクにディスパッチすることができる。このようなタスクは、フォアグラウンドで処理されるのが通常である。モバイル機器において、フォアグラウンドタスクは、ユーザに表示される唯一のタスク（またはタスク表示）であるのが通常である。例として、別のタスク（例えば音楽プレーヤ等）がバックグラウンドで実行されている間、電卓タスクがフォアグラウンドにある場合を考える。モバイル機器において、もし電卓タスクがフォアグラウンドタスクである場合は、それは、ユーザ用のディスプレイに表示されている唯一のタスクであるのが通常である。ユーザには、フォアグラウンドタスクのグラフィック表示（例えばアイコンやウィンドウ）が示されるのが通常である。ユーザは、グラフィック表示、または別のデバイス（例えばキーボード）、またはその両方を介してタスク（例えば電卓）と相互にやりとりすることができる。この相互のやりとりは、ネイティブイベントを生成することができ、生成されたネイティブイベントは、処理のためにフォアグラウンドタスクに提供される。
【００３８】
更なる説明のため、図３は、本発明の一実施形態にしたがった、ネイティブイベントをフォアグラウンドタスクにディスパッチするための方法３００を示している。フォアグラウンドタスクは、例えば、ユーザ用のディスプレイに表示されたタスクであることが可能である。モバイル機器において、フォアグラウンドタスクは、ユーザにいっときに表示される唯一のタスク（またはタスク表示）であるのが通常である。しかしながら、ユーザは、異なるタスクをフォアグラウンドに配することもできる。方法３００は、例えば、フォアグラウンドタスクにイベントをディスパッチする目的で、図２の仮想マシン２０４によって用いることが可能である。
【００３９】
いずれの場合も、処理３１０は、現時点でフォアグラウンド（フォアグラウンドタスク）にあるタスクのタスクＩＤ（すなわちタスク識別子）が格納される動作３１２から開始される。次に、動作３１４では、フォアグラウンドに新しいタスクがあるか否かについて決定される。処理３１２は、動作３１４において新しいタスクがフォアグラウンドにあると決定されるまで待機する。動作３１４において、新しいタスクがフォアグラウンドにあると決定されると、処理３１０は、現時点でフォアグラウンドにあるタスク（フォアグラウンドタスク）のタスクＩＤ（すなわちタスク識別子）が格納される動作３１２に進む。
【００４０】
しかしながら、処理３２０は、ネイティブイベントが受け付けられたか否かについて判断される動作３２２から開始される。処理３２０は、動作３２２においてネイティブイベントが受け付けられたと判断されるまで待機する。動作３２２において、ネイティブイベントが受け付けられたと決定されると、処理３２０は、フォアグラウンドタスクのタスクＩＤが取り出される動作３２４に進む。その後、動作３２６において、タスクＩＤによって識別されるタスクに関連付けられたＪａｖａオブジェクト（ＭＩＤｌｅｔオブジェクト）が獲得される。このＪａｖａオブジェクトは、そのフォアグラウンドタスク用のイベントリポジトリおよびイベントハンドラへのハンドル（例えば参照）を得るために使用される。イベントリポジトリおよびイベントハンドラへのハンドルが得られると、動作３２８において、ネイティブイベントは、Ｊａｖａイベントオブジェクト（例えばＭＩＤｌｅｔイベントオブジェクト）として表すことができるように、カプセル化される。したがって、動作３３０において、Ｊａｖａイベントオブジェクトは、フォアグラウンドタスクのイベントリポジトリのハンドルを使用して、イベントリポジトリに入れられる。最後に、動作３３２において、イベントハンドラは、そのハンドルを使用して通知を受けることができる。これは、例えば、イベントハンドラスレッドに「thread. notify」を送信することによって達成される。いずれにせよ、通知は、Ｊａｖａイベントオブジェクトがイベントリポジトリ内の待ち行列に入ったことを知らせるものである。処理３２０は、次いで、ネイティブイベントが受信されたか否かについて決定される動作３２０に進む。
【００４１】
当業者ならば明らかなように、Ｊａｖａで実現されたタスクのなかには、Ｊａｖａで実現されていない（すなわちネイティブプログラミング言語の）データ構造内のデータにアクセスできないものがある。このようなタスクの一例として、互いにデータを共有しない複数のＪａｖａタスク、またはそれ以外の形で互いに分離されている複数のタスクが挙げられる。これらのタスクは、「分離タスク」と称することができる。分離タスクおよびその可能性のあるその他のＪａｖａタスクは、Ｊａｖａで実現されたデータ構造として表現されているイベントリポジトリおよびハンドラに直接アクセスできない可能性がある。
【００４２】
しかしながら、Ｊａｖａ仮想マシンそれ自体は、Ｊａｖａ以外のプログラミング言語（例えばＣ、Ｃ＋＋）で実現し得る。更に、Ｊａｖａ仮想マシンそれ自体のコードは、ネイティブプログラミング言語で実現されたデータ構造へのアクセスに用いることが可能である。したがって、仮想マシンそれ自体は、データを操作して、そのデータをＪａｖａデータ構造で表すことが可能である。こうして、操作して得られたこれらのＪａｖａデータ構造は、分離タスクおよびその他のＪａｖａタスクによってアクセス可能になる。したがって、データを操作して、そのデータをＪａｖａ対応にするために、Ｊａｖａコードを実行することは不要である。
【００４３】
以上の説明から、本発明の多くの特徴および利点が明らかになるので、添付の特許請求の範囲は、発明のこれらの特徴および利点を全て網羅するものとする。更に、当業者ならば、多くの変更態様に想到し得るので、本発明の範囲は、以上で図示され説明された厳密な構造および動作に限定されることは望ましくなく、したがって、適切なあらゆる変更態様および等価態様をその範囲内に含むものとする。
【図面の簡単な説明】
【００４４】
【図１Ａ】単純なＪａｖａソースコードがインタープリタすなわちＪａｖａ仮想マシンによる実行を経て進展する様子を示す図である。
【図１Ｂ】本発明の一実施形態にしたがったコンピューティング環境を示す図である。
【図１Ｃ】並行タスクをサポートする仮想マシンにおいて、特定のプラットフォームに関連付けられたプラットフォーム依存（ネイティブ）イベントを処理するための方法を示す図である。
【図２】本発明の別の一実施形態にしたがったＪａｖａ対応のコンピューティング環境を示す図である。
【図３】本発明の一実施形態にしたがったフォアグラウンドタスクにネイティブイベントをディスパッチするための方法を示す図である。
【図１Ａ】
2009506467.tif 000003
【図１Ｂ】
2009506467.tif 000004
【図１Ｃ】
2009506467.tif 000005
【図２】
2009506467.tif 000006
【図３】
2009506467.tif 000007
【国際調査報告】
2009506467.tif 000008
2009506467.tif 000009
2009506467.tif 000010