(57)【要約】【課題】無駄な同期処理を無くすことを可能とするイベント同期装置及びその処理方法を提供する。【解決手段】アプリケーションに通知する複数のイベントが同期しているか否かを、各イベントが通知される複数のアプリケーションの経路が全て同じであるか否かにより判定する。そして、判定された結果をイベントに付加してアプリケーションに通知すると共に、アプリケーションに通知する複数のイベントが同期していないと判定された場合には、イベントの通知順を更に付加してアプリケーションに通知する。【選択図】図２
2013182418.tif 000002
【特許請求の範囲】
【請求項１】
複数のアプリケーションの間で複数のイベントを通知する際に、イベントを同期させて通知するイベント同期装置であって、
アプリケーションに通知する複数のイベントが同期しているか否かを、各イベントが通知される複数のアプリケーションの経路が全て同じであるか否かにより判定する判定手段と、
前記判定手段により判定された結果をイベントに付加して前記アプリケーションに通知すると共に、前記アプリケーションに通知する複数のイベントが同期していないと判定された場合に、イベントの通知順を更に付加して前記アプリケーションに通知する通知手段と、
前記通知手段により前記イベントの通知順が付加されていた場合、当該通知順に従って前記アプリケーションに前記複数のイベントを処理させる処理手段と、
を有することを特徴とするイベント同期装置。
【請求項２】
前記複数のアプリケーションから各イベントの通知先のアプリケーションのリストを受け取り、受け取ったリストから各イベントが通知される複数のアプリケーションの経路を作成する作成手段を更に有することを特徴とする請求項１に記載のイベント同期装置。
【請求項３】
前記複数のアプリケーションは、アプリケーションのインストール、処理の開始や停止及びアンインストールを行うアプリケーションプラットフォームによって管理されることを特徴とする請求項１又は２に記載のイベント同期装置。
【請求項４】
複数のアプリケーションの間で複数のイベントを通知する際に、イベントを同期させて通知するイベント同期装置の処理方法であって、
判定手段が、アプリケーションに通知する複数のイベントが同期しているか否かを、各イベントが通知される複数のアプリケーションの経路が全て同じであるか否かにより判定する判定工程と、
通知手段が、前記判定工程において判定された結果をイベントに付加して前記アプリケーションに通知すると共に、前記アプリケーションに通知する複数のイベントが同期していないと判定された場合には、イベントの通知順を更に付加して前記アプリケーションに通知する通知工程と、
処理手段が、前記通知工程において前記イベントの通知順が付加されていた場合、当該通知順に従って前記アプリケーションに前記複数のイベントを処理させる処理工程と、
を有することを特徴とするイベント同期装置の処理方法。
【請求項５】
コンピュータを請求項１乃至３の何れか１項に記載のイベント同期装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションプラットフォームにおいて複数のアプリケーションを動的に追加及び削除する際にアプリケーション間でイベントを同期させるイベント同期技術に関する。
【背景技術】
【０００２】
複数のアプリケーションを動的に追加及び削除してアプリケーション（アプリ）を管理するアプリケーションプラットフォームを有するシステムがある。そのシステムにおいて、アプリ間でイベントを通知するために、イベントを受け取りたいアプリは、イベントを発行するアプリに対してイベントリスナーを登録し、イベントを通知してもらう方法がある。アプリケーションプラットフォームに登録されているアプリからアプリへイベントを通知する際に、複数のアプリを経由する場合があり、経由するアプリが動的に追加・削除されることで、アプリ間で２つのイベントの同期・非同期が動的に変わる可能性がある。同期とは、イベントの通知順が意図した順で通知されることを指す。
【０００３】
イベントの通知順に関する技術として、例えば特許文献１、２が提案されている。また、その他、２つのイベントに対する処理を同期させるために、通知元アプリがイベントの通知順情報をイベントに付加し、通知先アプリでイベントを受け取った際に、その情報を元に、イベント通知順を制御している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平5-257888号公報
【特許文献２】特開2002-183073号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、イベント通知を同期させるために以下の２つの処理が必要になる。
・通知元アプリは、イベントの通知順を示す情報をイベントに付加する
・通知先アプリは、受け取ったイベントの通知順を示す情報を元にイベント通知順の制御を行う
これらの処理を常に実行すると、処理の負荷が大きい。
【０００６】
本発明は上述の問題を解決するためになされたもので、無駄な同期処理を無くすことを可能とするイベント同期装置及びその処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、複数のアプリケーションの間で複数のイベントを通知する際に、イベントを同期させて通知するイベント同期装置であって、
アプリケーションに通知する複数のイベントが同期しているか否かを、各イベントが通知される複数のアプリケーションの経路が全て同じであるか否かにより判定する判定手段と、
前記判定手段により判定された結果をイベントに付加して前記アプリケーションに通知すると共に、前記アプリケーションに通知する複数のイベントが同期していないと判定された場合には、イベントの通知順を更に付加して前記アプリケーションに通知する通知手段と、
前記通知手段により前記イベントの通知順が付加されていた場合、当該通知順に従って前記アプリケーションに前記複数のイベントを処理させる処理手段と、
を有することを特徴とする。
【発明の効果】
【０００８】
本発明によれば、通知先アプリケーションが、イベントが同期しているか否かを動的に判断でき、通知先アプリケーションで常に必要だった通知元アプリケーションの意図する順番に制御する処理の実行を削減でき、処理速度の低下を防ぐことができる。
【図面の簡単な説明】
【０００９】
【図１】イベント同期装置のハードウェア構成の一例を示すブロック図。
【図２】イベント同期装置のソフトウェア構成の一例を示すブロック図。
【図３】アプリケーションが開始されたときの処理を示すフローチャート。
【図４】同期判断用データの一例を示す図。
【図５】イベント経路リストと同期イベントリストとを示す図。
【図６】イベント経路リストの作成方法を説明するための図。
【図７】通知元アプリがイベントを通知する際の処理を示すフローチャート。
【図８】イベントの同期保証とイベント通知順を示す図。
【図９】同期判断処理の詳細を示すフローチャート。
【図１０】通知先アプリがイベントを受け取った際の処理を示すフローチャート。
【図１１】アプリ間におけるイベントの同期処理の具体例を示す図。
【発明を実施するための形態】
【００１０】
以下、図面を参照しながら発明を実施するための形態について詳細に説明する。以下の実施形態において示す構成は一例に過ぎず、本発明は図示された構成に限定されるものではない。
【００１１】
まず、本実施形態におけるイベント同期装置のハードウェア構成を図１に示すブロック図を用いて説明する。制御装置として機能するＣＰＵ１０１は、ハードディスク１０７に格納されている複数のアプリケーションプログラムやオペレーティングシステム（ＯＳ）等のプログラムを実行する。また、ＣＰＵ１０１はＲＡＭ１０３にプログラム実行に必要な情報、ファイル等を一時的に格納する制御を行う。また、ＣＰＵ１０１はディスプレイ１０６上の不図示のマウスカーソル等で指示するコマンドに基づいて、登録された種々のウインドウを開き、種々のデータ処理を実行する。
【００１２】
不揮発性メモリであるＲＯＭ１０２は、内部には基本Ｉ／Ｏプログラム等のプログラムや各種データを記憶している。一時的なメモリであるＲＡＭ１０３は、ＣＰＵ１０１の主メモリやワークエリア等として機能する。入出力インターフェースであるＮＩＣ１０４は、外部装置とのデータのやり取りをイベント同期装置が行う際に用いられる。
【００１３】
指示入力部として機能するキーボード１０５は、ユーザがイベント同期装置に命令等を入力指示するためのものである。表示部として機能するディスプレイ１０６は、ユーザがキーボード１０５から入力したコマンド等を表示するものである。外部記憶装置の一つであり、大容量メモリとして機能するハードディスク（ＨＤ）１０７は、アプリケーションプログラムやＯＳ等を格納している。
【００１４】
次に、本実施形態におけるイベント同期装置のソフトウェア構成を図２に示すブロック図を用いて説明する。アプリケーション（アプリ）は、イベント同期装置上で動くアプリであり、この例ではアプリ２０１Ａ、２０１Ｂ、２０１Ｃの３つのアプリが示されているが、本発明はこれに限定されるものではない。
【００１５】
アプリケーションプラットフォーム２０２は複数のアプリのライフサイクルを管理するものである。ここで、「ライフサイクル」とは、アプリがインストールされて処理を開始するところからその処理を停止してアンインストールされるまでの一連の状態とその流れを表すものである。
【００１６】
イベント同期判断部２０３は、アプリケーションプラットフォーム２０２から、詳細は後述する同期判断用データ（イベントリスナー登録先リスト、同期イベントペアリスト）を受け取る。そして、アプリからイベント同期の問い合わせを受け、アプリ間でイベントが同期しているか否かを同期保証として返す。
【００１７】
以上の構成において、アプリが開始されたときの処理手順を図３に示すフローチャートを用いて説明する。まず、Ｓ３０１において、ユーザからの指示によりアプリケーションプラットフォーム２０２がアプリを開始する。開始されたアプリは、イベントを通知してもらうためにイベントを発行するアプリに対してイベントリスナーを登録する。その登録が終了すると、アプリはＳ３０２において、詳細は後述する同期判断用データを作成する。そして、Ｓ３０３において、アプリは、作成した同期判断用データをアプリケーションプラットフォーム２０２へ渡す。
【００１８】
ここで、同期判断用データの一例を、図４を用いて説明する。まず、同期判断用データは、図４の（Ａ）に示すイベントリスナー登録先リストと、同（Ｂ）に示す同期イベントペアリストとで構成される。イベントリスナー登録先リストは、１つのアプリが作成した「イベント」と「リスナー登録先」の組み合わせを示すリストである。尚、リスナー登録先は、イベントを発行したイベント発行元のアプリである。
【００１９】
一方、同期イベントペアリストは、１つのアプリ内で同期しているイベントの組み合わせを示すリストである。この例では、キーイベントとマウスイベント、マウスイベントとタッチパネルイベントがそれぞれ同期していることを示している。
【００２０】
この同期判断用データ（イベントリスナー登録先リストと同期イベントペアリスト）は、アプリ毎に作成され、アプリケーションプラットフォーム２０２が管理する。そして、アプリケーションプラットフォーム２０２は、各アプリから渡された同期判断用データをイベント同期判断部２０３へ渡す。
【００２１】
一方、イベント同期判断部２０３は、アプリから受け取った同期判断用データに基づき図５の（Ａ）に示すイベント経路リストを作成する。ここで、「経路」とは、アプリ間で通知されるイベントが経由するアプリの順番である。
【００２２】
具体的には、図６に示すように、全てのアプリのイベントリスナー登録先データから、まずイベント毎にデータをまとめ、次にリスナー登録先を「呼び出し元」とし、登録するアプリを「呼び出し先」として、そのイベントが経由するアプリの順番を導き出す。この例では、マウスイベントはアプリ２０１Ａ（アプリＡ）→アプリ２０１Ｂ（アプリＢ）→アプリ２０１Ｃ（アプリＣ）の順番で経路が作成される。マウスイベントの経路と同様に、キーイベントの経路も作成される。
【００２３】
次に、アプリ毎に、図４の（Ｂ）に示す同期イベントペアリストから同期イベント情報である、図５の（Ｂ）に示す同期イベントリストを作成する。例えば、同期イベントペアリストで１つ目の同期しているイベントのペアとしてキーイベントとマウスイベントとが存在し、２つ目のペアとしてマウスイベントとタッチパネルイベントとが存在する。この例では、マウスイベントが双方（１つ目、２つ目）に存在するので、イベント同期判断部２０３は、キーイベント、マウスイベント、タッチパネルイベントの３つが全て同期していると判断する。即ち、イベント同期判断部２０３は、図５の（Ａ）に示すイベント経路リストと、同（Ｂ）に示す同期イベントリストとに基づいて同期判断を行う。
【００２４】
ここで、通知元アプリが通知先アプリへイベントを通知する際の処理手順を図７に示すフローチャートを用いて説明する。まず、Ｓ７０１において、通知元アプリが通知する２つのイベントａ、ｂが同期しているか否かをイベント同期判断部２０３に問い合わせる。その際に、同期を確認したい２つのイベント（イベントａ、ｂ）と通知先アプリの情報とをパラメータとして渡す。尚、このイベント同期判断部２０３による同期判断処理の詳細は、図９に示すフローチャートを用いて後述する。
【００２５】
次に、Ｓ７０２において、通知元アプリはイベント同期判断部２０３からの問い合わせ結果を判定し、その結果が“true”の場合はＳ７０３へ処理を進める。このＳ７０３では、イベントに図８の（Ａ）に示す同期保証の情報として“true”を入れてイベントを通知先アプリに通知する。
【００２６】
一方、イベント同期判断部２０３からの問い合わせ結果が“false”の場合はＳ７０４へ処理を進める。このＳ７０４では、イベントに同期保証の情報として“false”を入れ、図８の（Ｂ）に示すイベントのイベント通知順を入れてイベントを通知先アプリに通知する。
【００２７】
このように、本実施形態では、問い合わせに対して判定結果が“false”の場合にのみイベントにイベント通知順を通知することで、通知先アプリの処理負荷を軽減させることができる。
【００２８】
次に、通知元アプリからイベントの同期問い合わせを受けたイベント同期判断部２０３の同期判断処理の詳細を図９に示すフローチャートを用いて説明する。イベント同期判断部２０３は、通知元アプリからパラメータとして、同期を確認したい２つのイベントａ、ｂと、通知先アプリの情報とを受け取り、以下のように判定する。
【００２９】
まず、Ｓ９０１において、入力された２つのイベントの経路情報が同じであるか否かを判定する。判定の結果、同じ場合はＳ９０２へ処理を進め、図５の（Ａ）に示すイベント経路リストのアプリ全てで、受け取った２つのイベントが同期しているか否かを判定する。ここで、同期している場合はＳ９０３へ処理を進め、問い合わせ結果として“true”を返す。しかし、上述のＳ９０１及びＳ９０２の判定の結果がどちらか一方でもＮＯの場合はＳ９０４へ処理を進め、問い合わせ結果として“false”を返す。
【００３０】
次に、通知先アプリが通知元アプリからイベントを受け取った際の処理手順を図１０に示すフローチャートを用いて説明する。Ｓ１００１において、通知先アプリは、イベントを受け取った際に、まずそのイベントに付加されている同期保証を確認する。ここでは、同期保証が“false”か“true”かを判定し、“true”であればＳ１００６へ処理を進め、そのままイベント処理を行い、この処理を終了する。
【００３１】
一方、同期保証が“false”であればＳ１００２へ処理を進め、イベントに付加されているイベント通知順を調べる。ここで、受け取ったイベントが通知順の一番目ではなく、そのイベントより通知順が前のイベントが未処理だった場合はＳ１００７へ処理を進め、そのイベントを一時記憶に保存し、この処理を終了する。しかし、受け取ったイベントが通知順の一番目か、そのイベントより前のイベントが全て処理済だった場合はＳ１００３へ処理を進め、そのイベントのイベント処理を行う。その後、Ｓ１００４において、一時記憶にイベントが保存されていた場合はＳ１００５へ処理を進め、一時記憶のイベントのイベント処理を行い、この処理を終了する。
【００３２】
ここで、上述したアプリ間のイベント同期処理の具体例を、図１１を用いて説明する。まず、アプリ２０１Ａ（アプリＡ）からマウスイベント、キーイベントの順でイベントをアプリ２０１Ｃ（アプリＣ）に通知する場合を説明する。この場合、アプリＡがイベント同期判断部２０３に問い合わせると、アプリ２０１Ｂ（アプリＢ）が同期しているので、イベント同期判断部２０３から戻り値として“true”が返ってくる。そこで、アプリＡは、イベントに同期保証として“true”を付加してアプリＣにイベント通知を行う。これにより、アプリＣがマウスイベントとキーイベントを受け取り、同期保証を確認する。その結果、同期保証が“true”なので、そのままイベント処理を行う。
【００３３】
次に、アプリＡからマウスイベント、キーイベントの順でイベントをアプリＥに通知する場合を説明する。この場合、アプリＡがイベント同期判断部２０３に問い合わせると、アプリＤが同期していないので、イベント同期判断部２０３から戻り値として“false”が返ってくる。そこで、アプリＡは、イベントに同期保証として“false”を付加すると共にイベント通知順を付加してアプリＥにイベント通知を行う。これにより、アプリＥがマウスイベントとキーイベントを受け取り、同期保証が“false”なので、イベント通知順を見てイベント処理の順番制御を行う。
【００３４】
［他の実施形態］
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
2013182418.tif 000003
【図２】
2013182418.tif 000004
【図３】
2013182418.tif 000005
【図４】
2013182418.tif 000006
【図５】
2013182418.tif 000007
【図６】
2013182418.tif 000008
【図７】
2013182418.tif 000009
【図８】
2013182418.tif 000010
【図９】
2013182418.tif 000011
【図１０】
2013182418.tif 000012
【図１１】
2013182418.tif 000013