(57)【要約】【課題】イベント基盤パッケージモジュール呼び出し方法およびシステムを提供する。【解決手段】コンピュータによって実行されるイベント基盤パッケージモジュール呼び出し方法であって、リフレクション（ｒｅｆｌｅｃｔｉｏｎ）基盤のプログラミング言語を使用して特定のイベントと関連する複数の機能が実現されたプログラムパッケージ（ｐｒｏｇｒａｍ  ｐａｃｋａｇｅ）をイベントモジュールとしてモジュール化し、複数のイベント別に前記プログラムパッケージをロード（ｌｏａｄｉｎｇ）し、前記リフレクション（ｒｅｆｌｅｃｔｉｏｎ）を使用してロードされた前記プログラムパッケージを分析する段階、および分析された前記プログラムパッケージのクラス（ｃｌａｓｓ）および関数をイベント別に構造化することを含む。【選択図】図２
2019021312.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータによって実行されるイベント基盤パッケージモジュール呼び出し方法であって、
リフレクション（ｒｅｆｌｅｃｔｉｏｎ）基盤のプログラミング言語を使用して、特定のイベントと関連する複数の機能が実現されたプログラムパッケージ（ｐｒｏｇｒａｍ  ｐａｃｋａｇｅ）をイベントモジュールとしてモジュール化し、
複数のイベント別に前記プログラムパッケージをロード（ｌｏａｄｉｎｇ）し、
リフレクション（ｒｅｆｌｅｃｔｉｏｎ）を使用してロードされた前記プログラムパッケージを分析し、
分析された前記プログラムパッケージのクラス（ｃｌａｓｓ）および関数をイベント別に構造化すること
を含む、イベント基盤パッケージモジュール呼び出し方法。
【請求項２】
前記イベント別に構造化することは、
構造化された前記イベント別のクラス（ｃｌａｓｓ）および関数に基づき、クライアントから呼び出し要求された特定のイベントに該当するクラスまたは関数を実行し、
前記クラスまたは関数を実行した実行結果を、呼び出された前記特定のイベントに対する応答として前記クライアントに伝達すること
を含む、請求項１に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項３】
前記特定のイベントと関連するクラスまたは関数を実行するためのイベントモジュールは、同期式または非同期式に呼び出されること
を特徴とする、請求項２に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項４】
前記イベントモジュールとしてモジュール化することは、
前記特定のイベントと関連する複数の機能それぞれを、予め指定されたノーテーション（ｎｏｔａｔｉｏｎ）と関連させてモジュール化すること
を特徴とする、請求項１に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項５】
前記イベント別に構造化することは、
前記プログラムパッケージのクラス（ｃｌａｓｓ）および関数をハッシュ（ｈａｓｈ）関数に基づいてイベント別に構造化すること
を特徴とする、請求項１に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項６】
前記イベント別に構造化された前記プログラムパッケージのクラスおよび関数が更新のためにロードされた前記イベントモジュールに該当するプログラムパッケージを対象に分析されたクラスおよび関数を示すように更新すること
をさらに含む、請求項１に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項７】
前記プログラムパッケージに該当するイベントモジュールを更新しようとする場合、更新しようとするイベントモジュールの呼び出しに対するロック（Ｌｏｃｋ）が設定され、
前記プログラムパッケージと関連するイベントの呼び出しに対して設定されたロック（Ｌｏｃｋ）は、前記更新の終了に伴って解除されること
を特徴とする、請求項１に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項８】
前記プログラムパッケージに該当するイベントモジュールの属性（ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｉｔｅｍｓ）を更新しようとする場合、前記属性の更新が終了するまで、更新しようとする前記属性と関連するイベントモジュールの呼び出しに対するロック（Ｌｏｃｋ）が設定されること
を特徴とする、請求項７に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項９】
コンピュータによって実行されるイベント基盤パッケージモジュール呼び出し方法であって、
リフレクション（ｒｅｆｌｅｃｔｉｏｎ）基盤のプログラミング言語を使用して特定のイベントと関連する複数の機能が実現されたプログラムパッケージ（ｐｒｏｇｒａｍ  ｐａｃｋａｇｅ）をイベントモジュールとしてモジュール化し、
リフレクション（ｒｅｆｌｅｃｔｉｏｎ）を使用して複数のイベントモジュールそれぞれに該当するプログラムパッケージを分析し、
分析された各プログラムパッケージのクラス（ｃｌａｓｓ）および関数をイベント別に構造化し、
クライアントから特定のイベントの呼び出し要求を受信し、
構造化された各プログラムパッケージのクラスおよび関数のうち、前記呼び出しが要求された特定のイベントに該当するイベントモジュール関連のクラスおよび関数に基づいて発生された複数のメッセージを集めて単一応答メッセージを生成し、
生成された前記単一応答メッセージを前記クライアントに提供すること
を含む、イベント基盤パッケージモジュール呼び出し方法。
【請求項１０】
前記単一応答メッセージを生成することは、
前記複数のメッセージを対象に、順序とは無関係なメッセージ（ｕｎｉｆｉｅｄ  ｍｅｓｓａｇｅ）と順序と関係のあるメッセージ（ｓｅｑｕｅｎｃｅｄ  ｍｅｓｓａｇｅ）とを区分して前記単一応答メッセージを生成すること
を特徴とする、請求項９に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項１１】
前記順序と関係のあるメッセージは、クライアントで前記呼び出しが要求された特定のイベントに該当する応答を提供するときに提供順序があると指定されたメッセージを示すこと
を特徴とする、請求項１０に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項１２】
前記単一応答メッセージを生成することは、
前記順序と関係のあるメッセージ（ｓｅｑｕｅｎｃｅｄ  ｍｅｓｓａｇｅ）が複数である場合、順序と関係のあるメッセージそれぞれに該当する優先順位を該当のメッセージと関連させて前記単一応答メッセージを生成すること
を特徴とする、請求項１０に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項１３】
前記単一応答メッセージを生成することは、
構造化されたイベントモジュールを基盤として呼び出し要求された前記特定のイベントに該当する少なくとも１つのイベントモジュールの関数を実行することによって生成された実行結果別にメッセージを集めて前記単一応答メッセージを生成すること
を特徴とする、請求項９に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項１４】
前記関数を実行することは、
前記特定のイベントと関連するイベントモジュールが複数である場合、内部循環イベントを通じて複数のイベントモジュールそれぞれを呼び出して該当の関数を実行すること
を含む、請求項１３に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項１５】
リフレクション（ｒｅｆｌｅｃｔｉｏｎ）基盤のプログラミング言語を使用して特定のイベントと関連する複数の機能が実現されたプログラムパッケージ（ｐｒｏｇｒａｍ  ｐａｃｋａｇｅ）をイベントモジュールとしてモジュール化するモジュール化部と、
複数のイベント別に前記プログラムパッケージをロード（ｌｏａｄｉｎｇ）し、リフレクション（ｒｅｆｌｅｃｔｉｏｎ）を使用してロードされた前記プログラムパッケージを分析する分析部と、
分析された前記プログラムパッケージのクラス（ｃｌａｓｓ）および関数をイベント別に構造化する構造化部と、
を備える、イベント基盤パッケージモジュール呼び出しシステム。
【請求項１６】
前記構造化部は、
構造化された前記イベント別のクラス（ｃｌａｓｓ）および関数に基づいてクライアントから呼び出し要求された特定のイベントに該当するクラスまたは関数を実行し、前記クラスまたは関数を実行した実行結果を、呼び出しされた前記特定のイベントに対する応答として前記クライアントに伝達すること
を特徴とする、請求項１５に記載のイベント基盤パッケージモジュール呼び出しシステム。
【請求項１７】
前記モジュール化部は、
前記特定のイベントと関連する複数の機能それぞれを予め指定されたノーテーション（ｎｏｔａｔｉｏｎ）と関連させてモジュール化すること
を特徴とする、請求項１５に記載のイベント基盤パッケージモジュール呼び出しシステム。
【請求項１８】
クライアントから前記特定のイベントの呼び出し要求を受信する情報受信部と、
構造化された各プログラムパッケージのクラスおよび関数のうち、前記呼び出しが要求された特定のイベントに該当するイベントモジュール関連クラスおよび関数に基づいて発生した複数のメッセージを集めて単一応答メッセージを生成し、生成された前記単一応答メッセージを前記クライアントに提供するメッセージ生成部と、
をさらに備える、請求項１５に記載のイベント基盤パッケージモジュール呼び出しシステム。
【請求項１９】
前記メッセージ生成部は、
前記複数のメッセージを対象に、順序とは無関係なメッセージ（ｕｎｉｆｉｅｄ  ｍｅｓｓａｇｅ）と順序と関係のあるメッセージ（ｓｅｑｕｅｎｃｅｄ  ｍｅｓｓａｇｅ）とを区分して前記単一応答メッセージを生成すること
を特徴とする、請求項１８に記載のイベント基盤パッケージモジュール呼び出しシステム。
【請求項２０】
前記構造化部は、
構造化されたイベントモジュールを基盤として呼び出し要求された前記特定のイベントに該当する少なくとも１つのイベントモジュールの関数を実行し、
前記メッセージ生成部は、
前記関数を実行した実行結果別にメッセージを集めて前記単一応答メッセージを生成すること
を特徴とする、請求項１８に記載のイベント基盤パッケージモジュール呼び出しシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
以下の説明は、イベント（ｅｖｅｎｔ）を処理する技術に関し、より詳細には、ゲームやオンラインショッピングなどの多様なサーバ環境において、特定のサービスを提供するためのイベントを処理して応答を提供する技術に関する。
【背景技術】
【０００２】
既存のゲームサーバやオンラインショッピングモールなどのような多様なサーバ環境の場合は、特定のイベントを開始点として可変的な１つ以上の機能が呼び出されるが、大部分のシステムでは、サーバから要求されたイベント（例えば、ログイン時のお知らせ事項のポップアップ、連続出席ポイント／報酬、未確認メール／メッセージ関連イベントなど）を処理するとき、スクリプト基盤のプログラミング言語（Ｓｃｒｉｐｔ  Ｌａｎｇｕａｇｅ）を使用する。例えば、スクリプト基盤のプログラミング言語は、ルア（Ｌｕａ）、Ｊａｖａ(登録商標）スクリプト（Ｊａｖａ  Ｓｃｒｉｐｔ（登録商標））、パイソン（Ｐｙｔｈｏｎ）などを含む。
【０００３】
スクリプト基盤のプログラミング言語を使ってイベントを処理する場合、ランタイム（ｒｕｎｔｉｍｅ）時にスクリプト（ｓｃｒｉｐｔ）ファイルに含まれた文章を１つずつ読み取り、１行（ｌｉｎｅ）ずつスクリプトエンジン（例えば、Ｊａｖａ（登録商標）エンジンなど）に伝達して処理するため、コンパイル（ｃｏｍｐｉｌｅｄ）されている言語と比較する場合、イベント処理にかかる応答時間が相対的に遅く、性能が低下する。
【０００４】
また、スクリプト基盤のプログラミング言語を利用する場合には、デバッギング（ｄｅｂｕｇｇｉｎｇ）時にはスクリプトエンジンからスクリプト（ｓｃｒｉｐｔ）を呼び出すため、スクリプトエンジンまでしかデバッギングされず、スクリプト内をデバッギングするには困難をきたす。言い換えれば、スクリプトファイル内に何があるかを確認するには限界がある。
【０００５】
さらに、スクリプト基盤のプログラミング言語の場合は、既存のコードと新たなコード間のコードシェア（ｃｏｄｅ  ｓｈａｒｅ）に困難がある。すなわち、既に実現されているライブラリ（ｌｉｂｒａｒｙ）をサーバで使用している場合、外部にあるライブラリをデータベースに入れて既存のものと互換させたり、新たなライブラリを作成して使用したりするなど、既存のコードと新たなコードをコードシェアさせることが難しい。
【０００６】
既存では、イベントが発生した場合のサーバの処理ロジックは、既に作成されているサーバコードを修正して新たな企画（すなわち、イベント）の内容を反映したり、アップデートされた企画（すなわち、イベント）の内容を反映したりする方式で処理されていた。このとき、新たな企画内容を反映したり、アップデートされた企画内容を反映したりするときにはサーバの動作が停止し、ユーザの利用に制限が生じるという不便があった。例えば、「２０１７年０７月０１日午前１２時から６時まで、サーバの点検により利用が制限されます。」などの知らせがクライアント端末に提供されると、該当の期間中は、ゲーム、ショッピング、インターネットバンキングなどのサービスの利用がクライアント端末で制限されていた。
【０００７】
特許文献１は、オンラインゲームのためのユーザインタフェース提供装置およびその方法に関し、ゲームエンジンに独立的にユーザインタフェース構成要素を構成して再利用を可能とし、スクリプト（ｓｃｒｉｐｔ）基盤でゲーム実行に関する処理を行う技術を開示している。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】韓国公開特許第１０−２００９−００００６５１号
【発明の概要】
【発明が解決しようとする課題】
【０００９】
リフレクション（ｒｅｆｌｅｃｔｉｏｎ）基盤のプログラミング言語を利用してゲームやオンラインショッピングなどのサービスを提供するサーバ環境において、プラグイン（ｐｌｕｇ  ｉｎ）形式でソースコードを呼び出してクライアントから要求されたイベントを処理する、イベント基盤パッケージモジュールの呼び出し方法およびシステムを提供する。
【課題を解決するための手段】
【００１０】
コンピュータによって実行されるイベント基盤パッケージモジュールの呼び出し方法であって、リフレクション（ｒｅｆｌｅｃｔｉｏｎ）基盤のプログラミング言語を使用して、特定のイベントと関連する複数の機能が実現されたプログラムパッケージ（ｐｒｏｇｒａｍ  ｐａｃｋａｇｅ）をイベントモジュールとしてモジュール化し、複数のイベント別にプログラムパッケージをロード（ｌｏａｄｉｎｇ）し、リフレクション（ｒｅｆｌｅｃｔｉｏｎ）を使用してロードされたプログラムパッケージを分析する段階、および分析されたプログラムパッケージのクラス（ｃｌａｓｓ）および関数をイベント別に構造化することを含んでよい。
【００１１】
一実施形態によると、イベント別に構造化されたクラスおよび関数が更新のためにロードされたイベントモジュールに該当するプログラムパッケージを対象に、分析されたクラスおよび関数を示すように更新することをさらに含んでよい。
【００１２】
イベント基盤パッケージモジュール呼び出しシステムは、リフレクション（ｒｅｆｌｅｃｔｉｏｎ）基盤プログラミング言語を使用して特定のイベントと関連する複数の機能が実現されたプログラムパッケージ（ｐｒｏｇｒａｍ  ｐａｃｋａｇｅ）をイベントモジュールとしてモジュール化するモジュール化部と、複数のイベント別にプログラムパッケージをロード（ｌｏａｄｉｎｇ）し、リフレクション（ｒｅｆｌｅｃｔｉｏｎ）を使用してロードされたプログラムパッケージを分析する分析部と、および分析された前記プログラムパッケージのクラス（ｃｌａｓｓ）および関数をイベント別に構造化する構造化部と、を備えてよい。
【００１３】
一実施形態によると、プログラムパッケージに該当するイベントモジュールを更新しようとする場合、更新しようとするイベントモジュールの呼び出しに対してロック（Ｌｏｃｋ）を設定し、更新しようとするイベントモジュールに該当するプログラムパッケージをモジュールデータベースからロードするモジュールアップデート部をさらに備えてよい。
【００１４】
コンピュータによって実現されるサーバ装置と接続してイベント基盤パッケージモジュールの呼び出し方法を実行させるために記録媒体に格納されたコンピュータプログラムであって、イベント基盤パッケージモジュールの呼び出し方法は、リフレクション（ｒｅｆｌｅｃｔｉｏｎ）基盤のプログラミング言語を使用して特定のイベントと関連する複数の機能が実現されたプログラムパッケージ（ｐｒｏｇｒａｍ  ｐａｃｋａｇｅ）をイベントモジュールとしてモジュール化し、複数のイベント別にプログラムパッケージをロード（ｌｏａｄｉｎｇ）し、リフレクション（ｒｅｆｌｅｃｔｉｏｎ）を使用してロードされたプログラムパッケージを分析し、および分析されたプログラムパッケージのクラス（ｃｌａｓｓ）および関数をイベント別に構造化することを含んでよい。
【発明の効果】
【００１５】
リフレクション（ｒｅｆｌｅｃｔｉｏｎ）基盤のプログラミング言語を利用してゲームやオンラインショッピングなどのサービスを提供するサーバ環境において、プラグイン（ｐｌｕｇ  ｉｎ）形式でソースコードを呼び出してクライアントから要求されたイベントを処理し、処理結果をクライアントに提供することにより、要求されたイベントに対する応答時間を早めることができる。すなわち、性能を向上させることができる。
【００１６】
また、イベントと関連する機能が実現されたプログラムパッケージ（ｐｒｏｇｒａｍ  ｐａｃｋａｇｅ）をモジュール化し、モジュールを構造化したモジュールプールによってイベントを処理することにより、新たなイベントモジュールの追加または既存のイベントモジュールの更新時にサーバを中断（ｓｔｏｐ）しなくても、該当のモジュールを追加または更新（ｕｐｄａｔｅ）することができる。すなわち、サーバの動作状態を中止することなく維持したままで、該当のモジュールのバイナリ（ｂｉｎａｒｙ）を配布することができる。
【００１７】
また、複数のモジュールそれぞれに対して発生する多数の応答メッセージを集めて１つの単一応答メッセージ形態で生成してクライアント端末に提供することにより、クライアントから要求されたイベントに対する応答を一度で処理することが可能となる。すなわち、クライアントにおいて、自身が要求したイベントに関する応答がすべて受信されるまで待機したり、特定のメッセージを受信した後にこのメッセージの次のメッセージが受信されるまで待機したり、受信したメッセージを対象に該当のイベントに対する応答をユーザに提供するために構造化しなくてもよいため、応答速度（すなわち、処理速度）が上昇し、処理のために使われるコンピュータ資源の無駄な消耗を防ぐことができる。
【００１８】
また、実際のサーバコードと同一のプログラミング言語（Ｐｒｏｇｒａｍｍｉｎｇ  Ｌａｎｇｕａｇｅ）を使用するため、開発者のデバッギング（ｄｅｂｕｇｇｉｎｇ）の便宜性を高めることができる。
【００１９】
さらに、イベントモジュールそれぞれでは、サーバで既に作成された関数（予め生成された関数）を容易に再利用することができるため、モジュールコードを簡潔化させることができる。
【図面の簡単な説明】
【００２０】
【図１】本発明の一実施形態における、イベント基盤パッケージモジュール呼び出しシステムのネットワーク環境を示した図である。
【図２】本発明の一実施形態における、リフレクション（ｒｅｆｌｅｃｔｉｏｎ）基盤のプログラミング言語を利用してイベントが処理されるネットワーク環境を示した概念図である。
【図３】本発明の一実施形態におけり、イベント基盤パッケージモジュールの呼び出し方法を示したフローチャートである。
【図４】本発明の一実施形態における、イベント基盤パッケージモジュール呼び出しシステムのプロセッサが含むことのできる構成要素の例を示したブロック図である。
【図５】本発明の一実施形態における、各プログラムパッケージを対象に分析された情報をイベント別に構造化したデータ構造図の例示図である。
【図６】本発明の一実施形態における、データ構造化後にクライアントから要求されたイベントに対する応答を提供する動作を示したフローチャートである。
【図７】本発明の一実施形態における、イベントモジュールおよびモジュール属性を更新または追加する動作を説明するための概念図である。
【図８】本発明の一実施形態における、イベントモジュールを基盤として単一応答メッセージを提供する動作を示したフローチャートである。
【図９】本発明の他の実施形態における、プロセッサの内部構成を示したブロック図である。
【図１０】本発明の一実施形態における、単一応答メッセージを生成する動作を説明するために提供される概念図である。
【図１１】本発明の一実施形態における、単一応答メッセージの構造を示した図である。
【発明を実施するための形態】
【００２１】
以下、実施形態について、添付の図面を参照しながら詳しく説明する。
【００２２】
本実施形態は、イベント基盤パッケージモジュールの呼び出し方法およびシステムに関し、より詳細には、ゲームサーバやオンラインショッピングなどの多様なサーバ環境において、スクリプト（ｓｃｒｉｐｔ）基盤のプログラミング言語ではなくリフレクション（ｒｅｆｌｅｃｔｉｏｎ）を提供するプログラミング言語を使用してイベントを処理する技術に関する。例えば、リフレクション（ｒｅｆｌｅｃｔｉｏｎ）を提供するプログラミング言語は、Ｊａｖａ（登録商標）やＣ＃などを含んでよく、Ｊａｖａ（登録商標）やＣ＃を利用して作成されてコンパイル（ｃｏｍｐｉｌｅｄ）されたファイルそれぞれをモジュール化してメモリにロード（ｌｏａｄｉｎｇ）しておき、クライアントから特定のイベントに対する呼び出しが要求されたときには、該当のイベントに属するクラス（ｃｌａｓｓ）または関数を直ぐに実行させ、この実行結果を応答としてクライアント端末に提供する技術に関する。
【００２３】
本実施形態において、「イベント」とは、ゲームサーバやオンラインショッピングなどで提供される特定の企画を示すものであって、例えば、出席イベント（例えば、連続出席時の報酬／ポイント支給イベントなど）、ショップイベント、ルーレットイベント（例えば、ログイン時にルーレットを回してゲームアイテム／報酬／ポイントなどを支給するイベントなど）、クリスマスイベント（例えば、クリスマス期間中に特定のゲームキャラクタ／ゲームアイテムの無料利用、クリスマスプレゼントイベントなど）、友だち招待イベント、無料体験イベントなどのような多様な種類のイベントを含んでよい。
【００２４】
本実施形態において、「イベントモジュール」は、特定のイベントと関連する複数の機能が実現された関数が含まれた（すなわち、関数が集められた）プログラムパッケージ（ｐｒｏｇｒａｍ  ｐａｃｋａｇｅ）をモジュール化したものであって、パッケージモジュールと表現されてもよい。例えば、特定のイベントを開始点とする可変的な１つ以上の機能がモジュール化されてよく、ログインイベントの場合は、連続出席の報酬支給やお知らせ事項のポップアップなどが該当のイベントに関連する機能に属してよく、該当の機能を提供するために実現された関数を集めてパッケージ形態で構成される。また、特定のイベントと関連する機能に対する結果を応答としてクライアント端末に提供するために、すなわち、データベースなどの格納装置からスクリプトファイルを読み取って分析して実行した後に再びデータベースに戻し、実行結果を応答として提供するのではなく、イベントモジュールを通じてシステム自体で該当の関数を直ぐに実行し、この実行結果が応答として提供されるように、プログラムパッケージがイベント別にモジュール化される。
【００２５】
本実施形態において、「クライアント」とは、ユーザが所持する端末を示すものであって、例えば、スマートフォン（ｓｍａｒｔ  ｐｈｏｎｅ）、タブレット（ｔａｂｌｅｔ）、ノート型パンコン、デスクトップなどを指す。
【００２６】
図１は、本発明の一実施形態における、イベント基盤パッケージモジュール呼び出しシステムのネットワーク環境を示した図である。
【００２７】
図１のネットワーク環境は、電子機器１１０、サーバ１５０、およびネットワーク１７０を含む例を示している。電子機器１１０は、クライアント端末であり、サーバ１２０は、イベント基盤パッケージモジュール呼び出しシステムである。図１では、サーバ１２０にイベント基盤パッケージモジュール呼び出しシステムがプラットフォーム形態で実現される場合を説明しているが、これは実施形態に過ぎず、イベント基盤パッケージモジュール呼び出しシステムは、サーバ１５０とは別に外部に位置してもよい。例えば、サーバが複数存在する場合、イベント基盤パッケージモジュール呼び出しシステムは、該当のサーバとネットワークによって形成されてもよく、サーバそれぞれで呼び出しされるイベントに対する処理を、イベントモジュールを通じて実行する。
【００２８】
電子機器１１０は、コンピュータ装置によって実現される固定端末や移動端末であってよく、電子機器１１０の例としては、スマートフォン、携帯電話、ナビゲーション、ＰＣ（ｐｅｒｓｏｎａｌ  ｃｏｍｐｕｔｅｒ）、ノート型パンコン、デジタル放送用端末、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）、ＰＭＰ（Ｐｏｒｔａｂｌｅ  Ｍｕｌｔｉｍｅｄｉａ  Ｐｌａｙｅｒ）、タブレットなどがある。一例として、電子機器１１０は、無線または有線通信方式を利用し、ネットワーク１７０を介してサーバ１５０と通信する。
【００２９】
サーバ１５０は、電子機器１１０とネットワーク１７０を介して通信して命令、コード、ファイル、コンテンツ、サービスなどを提供するコンピュータ装置または複数のコンピュータ装置によって実現される。
【００３０】
図１によると、サーバ１５０であるイベント基盤パッケージモジュール呼び出しシステムと電子機器１１０は、メモリ１１１、１２１、プロセッサ１１２、１２２、通信モジュール１１３、１２３、および入力／出力インタフェース１１４、１２４を含む。メモリ１１１、１２１は、コンピュータで読み取り可能な記録媒体であって、ＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、ＲＯＭ（ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）、およびディスクドライブのような永久大容量記憶装置（ｐｅｒｍａｎｅｎｔ  ｍａｓｓ  ｓｔｏｒａｇｅ  ｄｅｖｉｃｅ）を含んでよい。また、メモリ１１１、１２１には、オペレーティングシステムと、少なくとも１つのプログラムコード（一例として、電子機器１１０にインストールされて駆動するブラウザやパッケージモジュールの呼び出しのためのアプリケーションなどのコード）が格納される。このようなソフトウェア構成要素は、ドライブメカニズム（ｄｒｉｖｅ  ｍｅｃｈａｎｉｓｍ）を利用してメモリ１１１、１２１とは別のコンピュータで読み取り可能な記録媒体からロードされる。このような別のコンピュータで読み取り可能な記録媒体は、フロッピー（登録商標）ドライブ、ディスク、テープ、ＤＶＤ／ＣＤ−ＲＯＭドライブ、メモリカードなどのコンピュータで読み取り可能な記録媒体を含んでよい。他の実施形態において、ソフトウェア構成要素は、コンピュータで読み取り可能な記録媒体ではない通信モジュール１１３、１２３を通じてメモリ１１１、１２１にロードされてもよい。例えば、少なくとも１つのプログラムは、開発者またはアプリケーションのインストールファイルを配布するファイル配布システム（一例として、上述したサーバ１５０）がネットワーク１７０を介して提供するファイルによってインストールされるプログラム（一例として、上述したアプリケーション）に基づいてメモリ１１１、１２１にロードされる。
【００３１】
プロセッサ１１２、１２２は、基本的な算術、ロジック、および入出力演算を実行することにより、コンピュータプログラムの命令を処理するように構成される。命令は、メモリ１１１、１２１または通信モジュール１１３、１２３によって、プロセッサ１１２、１２２に提供される。例えば、プロセッサ１１２、１２２は、メモリ１１１、１２１のような記録装置に格納されたプログラムコードにしたがって受信される命令を実行するように構成される。
【００３２】
通信モジュール１１３、１２３は、ネットワーク１７０を介してクライアント端末である電子機器１１０とイベント基盤パッケージモジュール呼び出しシステムであるサーバ１５０とが互いに通信するための機能を提供する。一例として、クライアント端末（電子機器１１０）のプロセッサ１１２がメモリ１１１のような記録装置に格納されたプログラムコードにしたがって生成した要求（一例として、ログインなどのイベントの発生によるログインイベント呼び出しのための要求）が、通信モジュール１１３の制御にしたがってネットワーク１７０を介してイベント基盤パッケージモジュール呼び出しシステム（サーバ１５０）に伝達される。これとは逆に、イベント基盤パッケージモジュール呼び出しシステム（サーバ１５０）のプロセッサ１２２の制御にしたがって提供される制御信号や命令、コンテンツ、ファイルなどが、通信モジュール１２３とネットワーク１７０を経て電子機器１１０の通信モジュール１１３を通じて電子機器１１０に受信されてもよい。例えば、通信モジュール１１３を通じて受信したサーバ１５０の制御信号や命令などは、プロセッサ１１２やメモリ１１１に伝達されてよく、コンテンツやファイルなどは、電子機器１１０がさらに含むことのできる記録媒体に格納される。
【００３３】
入力／出力インタフェース１１４、１２４は、入力／出力装置１１５とのインタフェースのための手段であってよい。例えば、入力装置は、キーボードまたはマウスなどの装置を含んでよいし、出力装置は、アプリケーションの通信セッションを表示するためのディスプレイのような装置を含んでよい。他の例として、入力／出力インタフェース１１４は、タッチスクリーンのように入力と出力のための機能が１つに統合された装置とのインタフェースのための手段であってもよい。より具体的な例として、電子機器１１０のプロセッサ１１２は、メモリ１１１にロードされたコンピュータプログラムの命令を処理するにあたり、サーバ１５０が提供するデータを利用して構成されるサービス画面やコンテンツが入力／出力インタフェース１１４を通じてディスプレイに表示される。
【００３４】
また、他の実施形態において、クライアント端末である電子機器１１０およびイベント基盤パッケージモジュール呼び出しシステムであるサーバ１５０は、図１の構成要素よりも多くの構成要素を含んでもよい。しかし、大部分の従来技術的構成要素を明確に図に示す必要はない。例えば、電子機器１１０は、上述した入力／出力装置１１５のうちの少なくとも一部を含むように実現されてもよいし、トランシーバ、ＧＰＳ（Ｇｌｏｂａｌ  Ｐｏｓｉｔｉｏｎｉｎｇ  Ｓｙｓｔｅｍ）モジュール、カメラ、各種センサ、データベースなどのような他の構成要素をさらに含んでもよい。より具体的な例として、電子機器１１０がスマートフォンである場合、一般的にスマートフォンが含んでいる加速度センサやジャイロセンサ、カメラ、物理的な各種ボタン、タッチパネルを利用したボタン、入力／出力ポート、振動のための振動器などのような多様な構成要素が電子機器１１０にさらに含まれるように実現されてもよいことが理解できるであろう。
【００３５】
また、イベント基盤パッケージモジュール呼び出しシステムであるサーバ１５０にデータベースが含まれる場合でも、サーバ１５０とは別に外部にデータベースが存在してもよく、データベースは、サーバ１５０で、ゲームまたはショッピングモールなどのウェブサイトに接続したり、アプリケーションから該当のサービスが提供されたりするための通信セッションが設定された複数の電子機器（すなわち、クライアント端末）で発生したイベントに対する呼び出しおよび呼び出されたイベントに対する応答を提供するための多様な情報を格納および管理する。例えば、データベースは、複数のイベントモジュールそれぞれに該当するプログラムパッケージを格納および管理するモジュールデータベース、および複数のイベントそれぞれの属性（ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｉｔｅｍｓ、例えば、設定（ｃｏｎｆｉｇ）ファイル）と関連するプログラムパッケージを格納および管理する属性データベースを含んでよい。
【００３６】
本発明の実施形態に係るイベント基盤パッケージモジュール呼び出しシステムは、サーバ１５０にプラットフォーム（ｐｌａｔｆｏｒｍ）の形態で実現される。以下では、説明の便宜のために、電子機器１１０にサーバ１５０との通信セッションを設定し、サーバ１５０から提供されるサービスを受信するためのアプリケーションまたはブラウザのインストールおよび駆動のためのパッケージファイルが格納され、電子機器１１０の要求にしたがい（すなわち、電子機器でイベントが発生してサーバからイベントが呼び出されることにしたがい）、サーバ１５０に実現されるイベント基盤パッケージモジュール呼び出しシステムを通じて呼び出しされたイベントを処理する実施形態について説明する。
【００３７】
図２は、本発明の一実施形態における、リフレクション（ｒｅｆｌｅｃｔｉｏｎ）基盤のプログラミング言語を利用してイベントが処理されるネットワーク環境を示した概念図である。
【００３８】
図２を参照すると、クライアント２０１は、電子機器１１０にインストールされたモバイルアプリまたはウェブブラウザなどを示してよく、クライアント２０１で特定のイベント（ログインなどのイベント１）が発生することにより、サーバ２００は、クライアント２０１にインストールおよび駆動されたアプリケーションまたはウェブブラウザで発生したイベントの呼び出し要求をクライアント２０１から受信する。
【００３９】
サーバ２００は、クライアント２０１から呼び出し要求されたイベント（例えば、イベント１）を確認し、該当のイベントをモジュールプール２１０から検索して実行し、実行結果を呼び出されたイベントに対する応答としてアプリケーションまたはウェブブラウザを通じてクライアント２０１に伝達する。すなわち、サーバ２００は、呼び出されたイベントと関連する機能が実現された関数を実行する。このとき、リフレクション（ｒｅｆｌｅｃｔｉｏｎ）基盤のプログラミング言語を使用してイベントを処理するために、イベント基盤パッケージモジュール呼び出しシステム（サーバ２００）は、モジュールプール２１０およびモジュールローダ２２０を備えてよく、複数のイベントそれぞれに該当する複数の機能を集めておいたプログラムパッケージは、イベントモジュール２３０としてモジュール化されてデータベース（すなわち、モジュールデータベースおよび属性データベース）に格納および維持される。図２では、サーバにモジュールプール２１０およびモジュールローダ２２０が備えられた場合を例示して説明しているが、これは実施形態に過ぎず、モジュールプール２１０は、メモリとしてサーバとは別の外部に位置してもよく、モジュールローダ２２０は、モジュールプール２１０の動作を制御するためにサーバまたはサーバとは別の電子機器などのプロセッサに含まれる構造で実現されてもよい。
【００４０】
図２において、イベントモジュール２３０それぞれは、リフレクション（ｒｅｆｌｅｃｔｉｏｎ）の基盤プログラミング言語を使用して作成された／生成されたプログラムパッケージ（例えば、Ｊａｖａ（登録商標）の場合はＪＡＲ（Ｊａｖａ（登録商標）ＡＲｃｈｉｖｅ）ファイル、Ｃ＃の場合ＤＬＬ（Ｄｙｎａｍｉｃ  Ｌｉｎｋ  Ｌｉｂｒａｒｙ）ファイルなど）をモジュール化したものであって、ＪＡＲやＤＬＬなどのプログラムパッケージで事前に定義したノーテーション（ｎｏｔａｔｉｏｎ、例えば、Ｊａｖａ（登録商標）の場合はＡｎｎｏｔａｔｉｏｎ、Ｃ＃の場合はＡｔｔｒｉｂｕｔｅなど）を使用して実現される。ここで、プログラムパッケージは、特定のイベントと関連する機能が実現された少なくとも１つの関数を含んでよく、該当の関数は、事前に定義されたノーテーション（ｎｏｔａｔｉｏｎ、すなわち表記情報）と関連させてプログラムパッケージに定義される。例えば、出席イベントと関連する機能（例えば、出席イベントを提供するウェブページまたは仮想空間への参入、出席確認、連続出席による報酬支給、出席イベントをユーザに提供するウェブページ、または仮想空間からの退場などのアクションによる結果を提供するための関数）を含むプログラムパッケージには、特定の機能に該当する関数別に予め定義されたノーテーション（ｎｏｔａｔｉｏｎ）が関連されて含まれてよい。ここで、ノーテーション（ｎｏｔａｔｉｏｎ）とは、該当の機能が特定のイベントと関連することを識別するための表記情報を示す。ノーテーションの一例として、＠ＭｏｄｕｌｅＩｎｔｅｒｆａｃｅが利用されてよく、＠の他にも＃や％などの多様な記号が利用されてもよく、ＭｏｄｕｌｅＩｎｔｅｒｆａｃｅ以外の文字（ｃｈａｒａｃｔｅｒ）が利用されてもよい。
【００４１】
モジュールローダ２２０は、リフレクション（Ｒｅｆｌｅｃｔｉｏｎ）を使用してプログラムパッケージ（ｐｒｏｇｒａｍ  ｐａｃｋａｇｅ）をロード（ｌｏａｄｉｎｇ）し、ロードされたプログラムパッケージを対象に、プログラムパッケージ内に事前に定義されたノーテーションに基づき、該当のイベントと関連して定義された関数、関数のパラメータ、およびクラス（ｃｌａｓｓ）などを分析する。このとき、プログラムパッケージが１つのイベントモジュールとしてモジュール化されることにより、モジュールローダ２２０は、ロードされたプログラムパッケージ（すなわち、イベントモジュール）がどのようなクラス、どのようなメンバ数、どのようなメンバ関数（例えば、イベント関数）で構成されたかを分析することができる。
【００４２】
モジュールプール（ｐｏｏｌ）２１０は、モジュールローダ２２０で分析されたプログラムパッケージに該当するイベントモジュール別のクラス、関数、および関数のパラメータを、ハッシュ関数を利用して構造化する。例えば、モジュールプール２１０は、メモリに該当するものであって、モジュールローダを通じてロードされた各プログラムパッケージのクラス、イベント関数、関数のパラメータなどを、ハッシュ（ｈａｓｈ）関数を利用してイベント別に区分して構造化する。すなわち、特定のイベントの呼び出しが要求される場合、呼び出し要求された特定のイベントに対する応答をクライアント端末に直ぐに提供するために、各プログラムパッケージのクラス、イベント関数などをイベントの識別子情報とリンク接続するデータ構造化が実行される。その後、データ構造化までの前処理過程が終了し、クライアントから特定のイベントに対する呼び出し要求が受信されれば、モジュールプールを対象に受信した特定のイベントと関連するイベントモジュールに対する呼び出しが要求されて該当の関数が実行される。このとき、イベントモジュールに対する呼び出しは、同期式、非同期式で実行される。例えば、状況に応じてサーバの実行コードがブロック（ｂｌｏｃｋｉｎｇ）されたり、ノンブロック（Ｎｏｎ−ｂｌｏｃｋｉｎｇ）されたりすることで、サーバ開発の柔軟性を提供する。
【００４３】
図３は、本発明の一実施形態における、イベント基盤パッケージモジュールの呼び出し方法を示したフローチャートであり、図４は、本発明の一実施形態における、イベント基盤パッケージモジュール呼び出しシステムのプロセッサが含むことのできる構成要素の例を示したブロック図である。
【００４４】
図４に示すように、イベント基盤パッケージモジュール呼び出しシステム（サーバ１５０、２００）に含まれるプロセッサ１２２は、構成要素として、モジュール化部４１０、分析部４２０、構造化部４３０、およびモジュールアップデート部４４０を備えている。図４において、分析部４２０は、図２のモジュールローダ２２０に該当する動作を実行または制御し、構造化部４３０は、図２のモジュールプール２１０に該当する動作を実行または制御するために利用される。すなわち、分析部４２０は、モジュールローダ２２０の動作中にプロセッサ１２２によって実行される一部の動作（例えば、メモリにプログラムパッケージがロードされるように制御し、プログラムパッケージを分析する動作など）を実行し、構造化部４３０は、モジュールプール２１０の動作中にプロセッサ１２２によって実行される一部の動作（例えば、メモリで実行される動作を除いた動作であって、呼び出し要求されたイベントに該当する関数などをモジュールプールから検索して実行する動作など）を実行する。
【００４５】
また、モジュール化部４１０、分析部４２０、構造化部４３０、およびモジュールアップデート部４４０は、図３の各段階３１０〜３５０を実行するために利用される。
【００４６】
段階３１０で、モジュール化部４１０は、リフレクション（ｒｅｆｌｅｃｔｉｏｎ）基盤のプログラミング言語を使用して特定のイベントと関連する複数の機能が実現されたプログラムパッケージ（ｐｒｏｇｒａｍ  ｐａｃｋａｇｅ）をイベントモジュールとしてモジュール化する。ここで、複数のイベントそれぞれをイベントモジュールとしてモジュール化する過程は、サーバが提供する特定のサービス（例えば、ゲームサービスやオンラインショッピングモールサービスなど）を提供するために実現しなければならない機能が実現されたプログラムをＤＬＬファイルやＪＡＲファイルなどにモジュール化し、該当のイベントが発生したときに直ぐに実行できるようにするための前処理過程に該当する。すなわち、該当のイベントが発生した場合、ＤＢから該当となるスクリプトファイルを読み取って実行した後に再び元に戻すのではなく、該当のイベントと関連するＤＬＬファイルやＪＡＲファイルを直ぐに実行して応答結果を提供する前処理過程に該当する。
【００４７】
一例として、ゲームサービスをサーバからクライアント端末に提供する場合、ゲームサービスを受信するときに発生する複数のイベント（例えば、ログインイベント、ログアウトイベント、ショップイベント、出席イベントなど）と関連するアクションの結果を提供するための少なくとも１つの関数（すなわち、イベント関数）が、プログラムパッケージ内に定義される。すなわち、関数内に特定のイベントを実現させるためのプログラムが定義されてよく、ゲームサービスで提供される複数のイベントごとに該当のイベントを実現するための関数がプログラムパッケージとして実現される。例えば、ショップイベントの場合は、ショップイベントを実現するための関数がショップイベントパッケージに含まれるように実現されてよく、出席イベントの場合は、出席イベントを実現するための関数が出席イベントパッケージに含まれるように実現される。
【００４８】
このとき、プログラムパッケージをイベントモジュールとしてモジュール化するために、プログラムパッケージは、特定のイベントと関連する複数の機能それぞれを事前に定義されたノーテーション（ｎｏｔａｔｉｏｎ）と関連させて実現する。例えば、出席イベントパッケージは、出席イベントと関連する機能１および機能２に該当する機能１の関数および機能２の関数を含んでよい。機能１の関数および機能２の関数それぞれは、プログラムパッケージ内にノーテーション（ｎｏｔａｔｉｏｎ）と関連させて定義される。例えば、Ｊａｖａ(登録商標）の場合はＡｎｎｏｔａｔｉｏｎ、Ｃ＃の場合はＡｔｔｒｉｂｕｔｅを利用することにより、ノーテーションを該当の関数に関連させてプログラムパッケージ内に定義することができる。このようにして、複数のイベントごとに、それぞれに該当するプログラムパッケージを、ノーテーションに基づいてイベントモジュールとしてモジュール化する。
【００４９】
段階３２０で、分析部４２０は、複数のイベントそれぞれに該当するプログラムパッケージをメモリにロード（ｌｏａｄｉｎｇ）する。ここで、ロードする分析部４２０の動作は、図２のモジュールローダ２２０に該当する。すなわち、複数のイベントそれぞれに該当するプログラムパッケージがノーテーションに基づいてイベントモジュールとしてモジュール化されると、プログラムパッケージに対する分析のためにプログラムパッケージがメモリにロードされる。
【００５０】
段階３３０で、分析部４２０は、プログラムパッケージを実現したプログラミング言語で支援するリフレクション（ｒｅｆｌｅｃｔｉｏｎ）を使用してロードされた複数のプログラムパッケージのそれぞれを分析する。
【００５１】
一例として、分析部４２０は、Ｊａｖａ（登録商標）やＣ＃などのプログラミング言語で支援するリフレクション（ｒｅｆｌｅｃｔｉｏｎ）を使用して複数のプログラムパッケージを読み取り、複数のプログラムパッケージを対象に、プログラムパッケージ内で事前に定義されたノーテーションに基づき、該当のノーテーションと関連させて定義された関数（すなわち、イベント関数）、該当する関数のクラス（ｃｌａｓｓ）、および関数のパラメータなどを分析する。
【００５２】
段階３４０で、構造化部４３０は、分析されたプログラムパッケージのクラス（ｃｌａｓｓ）および関数（すなわち、イベント関数）をイベント別に構造化する。
【００５３】
一例として、構造化部４３０は、モジュールプール（ｐｏｏｌ）から特定のイベントに該当するクラスまたは関数の検索が容易かつ迅速になされるように、分析された各プログラムパッケージのクラスおよび関数を、ハッシュ（ｈａｓｈ）関数を利用して構造化（すなわち、データ構造化）する。このとき、構造化部４３０は、分析された各プログラムパッケージのクラスおよびイベント関数をイベント別に構造化（すなわち、データ構造化）する。このとき、クラス、イベント関数の他に、分析された関数のパラメータ（例えば、メンバ変数など）が、ハッシュ関数を利用してクラス、イベント関数と共に構造化されてもよい。ここで、分析された情報（クラス、イベント関数など）を基盤としてデータを構造化する詳しい動作については、以下の図５を参照しながら説明する。
【００５４】
段階３５０で、更新または追加しようとするイベントモジュールが存在する場合、モジュールアップデート部４４０は、該当のイベントモジュールの呼び出しに対するロック（Ｌｏｃｋ）を設定し、該当のモジュールに対する更新または追加を実行する。
【００５５】
一例として、更新または追加しようとするイベントの呼び出し要求がクライアントから受信された場合、モジュールアップデート部４４０は、呼び出し要求を受信した後、呼び出されたイベントに対する処理をいったん待機させてよい。例えば、呼び出し要求されたイベントに該当するイベントモジュールの更新または追加が完了するまで、処理を待機させてよい。この後、モジュールアップデート部４４０は、更新または追加しようとするイベントモジュールに該当するプログラムパッケージをモジュールデータベースに格納する。これにより、追加または更新のためにモジュールデータベースに格納されたプログラムパッケージに該当するイベントモジュールの更新または追加のためにメモリに該当のプログラムパッケージがロードされてよく、ロードされたプログラムパッケージの分析によって得られたクラス、関数などを基盤として該当のプログラムパッケージ（すなわち、イベントモジュール）と関連して構造化された情報がアップデートされる。例えば、既存に構造化された特定のイベントに該当するプログラムパッケージのクラスおよび関数が、得られたクラス、関数を示すようにアップデートされる。
【００５６】
このように、アップデートが終了すると、呼び出しに設定されたロック（Ｌｏｃｋ）は解除される。ここで、イベントモジュールを更新または追加するための詳しい動作については、図７を参照しながら後述する。
【００５７】
図５は、本発明の一実施形態における、各プログラムパッケージを対象に分析された情報をイベント別に構造化したデータ構造図の例示図である。
【００５８】
図５では、ゲームサービスを提供する場合に、ショップイベントと関連するプログラムパッケージ（ショップイベントパッケージ（ｐａｃｋａｇｅ））５１０と出席イベントと関連するプログラムパッケージ（出席イベントパッケージ（ｐａｃｋａｇｅ））５２０がそれぞれイベントモジュールとしてモジュール化された場合、該当のプログラムパッケージを分析してデータ構造化を実行する場合について例示して説明する。図５のデータ構造図は、実施形態に過ぎず、多様な形態でデータ構造化が実行される。図５において、モジュールローダ５３０は図４の分析部４２０に該当してもよいし、モジュールプール（ｐｏｏｌ）５４０は図４の構造化部４３０に該当してもよい。
【００５９】
図５の出席イベントパッケージ５２０を参照すると、出席イベントと関連する機能を実現するための関数（ＯｎＪｏｉｎＲｏｏｍ、ＯｎＬｅａｖｅＲｏｏｍ）は、事前に定義されたノーテーション（＠ＭｏｄｕｌｅＩｎｔｅｒｆａｃｅ）と関連させてプログラムパッケージ内に定義される。このように、ノーテーションが定義された出席イベントパッケージに該当するＤＬＬまたはＪＡＲファイルが、出席イベントに該当するイベントモジュールとしてモジュール化される。
【００６０】
モジュールローダ５３０は、各プログラムパッケージを対象に、パッケージ内にノーテーション（例えば、＠ＭｏｄｕｌｅＩｎｔｅｒｆａｃｅ）によって定義された関数（例えば、イベント関数）をロード（ｌｏａｄｉｎｇ）する。関数をロードするとき、モジュールローダ５３０は、リフレクション（ｒｅｆｌｅｃｔｉｏｎ）を利用してクラス、関数、および関数のパラメータを読み取ってよい。
【００６１】
これにより、モジュールプール５４０は、迅速な検索のために、ロードされた情報（すなわち、プログラムパッケージ別のクラス、関数、関数のパラメータなど）を、ハッシュ関数を利用して構造化する。このとき、該当のイベントを実現させるためのイベント関数を基準としてイベント別に構造化が実行される。例えば、イベント関数（ＯｎＪｏｉｎＲｏｏｍ）の場合は、ショップイベント、出席イベント、保管トレイイベントを実現させるために共用されることが可能であるため、各イベント別のプログラムパッケージにノーテーションによって定義される。これにより、ＯｎＪｏｉｎＲｏｏｍを基準として該当のイベントであるショップイベント、出席イベント、保管トレイイベントが仮想のリンク接続されるように構造化が実行される。すなわち、特定のイベントのために該当のイベントを提供する仮想空間に参入する動作は、ショップイベント、出席イベント、保管トレイイベントで共通され、該当のイベントで提示するアクションを実行した後に仮想空間から退出する動作は、ショップイベント、出席イベント、保管トレイイベントで共通されるため、ＯｎＬｅａｖｅＲｏｏｍを基準に、該当するイベントであるショップイベント、出席イベント、保管トレイイベントが仮想のリンク接続されるように構造化される。
【００６２】
図６は、本発明の一実施形態における、データ構造化後にクライアントから要求されたイベントに対する応答を提供する動作を示したフローチャートである。
【００６３】
図６の各段階６１０および６２０は、図４の構造化部４３０によって実行される。
【００６４】
複数のイベントを実現させるために複数のイベントそれぞれに該当するプログラムパッケージがイベントモジュールとしてモジュール化され、イベントモジュール別に（すなわち、プログラムパッケージ別に）クラス、関数、および関数のパラメータなどが構造化された後、クライアントから特定のイベントに対する呼び出し要求が発生することがある。例えば、出席イベントが提供する連続出席による報酬を受け取るために、クライアントで出席イベントを提供する仮想空間（例えば、出席イベントポップアップウィンドウ、ロビー画面で出席イベント項目クリックなど）に参入するアクションが発生することにより、サーバであるイベント基盤パッケージモジュール呼び出しシステム２００は、出席イベントに対する呼び出し要求を、クライアントで駆動するアプリケーションまたはウェブブラウザを通じて受信する。
【００６５】
段階６１０で、構造化部４３０は、呼び出し要求されたイベントを確認（すなわち、イベントの識別子情報に基づいて呼び出し要求されたイベントを確認）し、確認されたイベントに該当するクラスおよび関数をモジュールプールから検索する。この後、構造化部４３０は、検索されたクラス（例えば、出席イベントと関連するプログラムパッケージのクラス）をインスタンス（ｉｎｓｔａｎｃｅ）化して、該当の関数（すなわち、検索されたクラスの関数）を実行させてよい。このとき、一度インスタンス化されたクラスは、直ぐに削除されるのではなく、次の呼び出しで再利用できるように維持される。
【００６６】
一例として、構造化部４３０は、クライアント１で出席イベントに対する呼び出し要求が発生した場合、モジュールプールから検索された出席イベントに該当するクラスを検索してインスタンス化する。このとき、クライアント１と関連して生成されたインスタンスの識別子情報は、クライアント１の識別子情報とマッチングして格納される。この後、クライアント１が出席イベントと関連して連続出席による報酬を受け取り、出席イベントに該当する仮想空間から退出した場合、クライアント１と関連して生成されたインスタンスは、削除されずに再利用される。例えば、クライアント２で出席イベントに対する呼び出し要求が発生した場合、クライアント１のときに生成されたインスタンスが再利用される。このように再利用される場合、インスタンスの識別子情報は、クライアント１の識別子情報からクライアント２の識別子情報に修正される。ここで、インスタンスは、サーバが該当のインスタンスの削除を要求するまで除去されずに再利用される。すなわち、インスタンスの削除が要求されたときに除去される。
【００６７】
他の例として、構造化部４３０は、出席イベントに対する呼び出しが発生してＯｎＪｏｉｎＲｏｏｍ関数の実行が要求された場合、モジュールプールから検索されたＯｎＪｏｉｎＲｏｏｍに該当するショップイベント、出席イベント、および保管トレイイベントと関連してクラス（ｃｌａｓｓ）をインスタンス化してＯｎＪｏｉｎＲｏｏｍ関数を実行する。すなわち、クライアントから、出席イベントの他にショップイベントまたは保管トレイイベントに対する呼び出しが要求された場合、生成されたクラスのインスタンスが、呼び出し要求された保管トレイイベント、ショップイベントに対する応答を提供するために再利用される。
【００６８】
段階６２０で、構造化部４３０は、クラスおよび関数の実行結果を、呼び出し要求された特定のイベントに対する応答として該当のクライアントに伝達する。このとき、プログラムパッケージ（すなわち、イベントモジュール）のイベント関数を実行した実行結果として複数の応答が存在する場合、複数の応答を集めた１つの単一応答メッセージがクライアントに伝達される。
【００６９】
図７は、本発明の一実施形態における、イベントモジュールおよびモジュール属性を更新または追加する動作を説明するための概念図である。
【００７０】
図７で、モジュールリポジトリ７４０は、モジュールデータベースに該当し、モジュール属性リポジトリ７５０は、属性データベースに該当する。図７の動作は、図１のプロセッサ１２２によって実行される。例えば、プロセッサ１２２のモジュールアップデート部４４０によって実行される。
【００７１】
サーバ（すなわち、イベント基盤パッケージモジュール呼び出しシステム）、はモジュール管理ツール７３０を通じてモジュール更新要求７１０を受信する。例えば、サーバの管理者などからモジュール更新要求７１０のための表示情報（ボタン、アイコンなど）が選択されてモジュール更新要求７１０が受信される。
【００７２】
このようにモジュール更新要求が受信されると、プロセッサ１２２は、モジュールデータベースであるモジュールリポジトリ７４０に、更新または追加要求されたモジュールに該当するプログラムパッケージを格納する。この後、プロセッサ１２２は、モジュールプール７６０を対象に、更新または追加要求されたイベントモジュールの更新または追加を要求する。このとき、モジュールプール７６０で格納されたプログラムパッケージに該当するイベントモジュールを更新または追加する前に、プロセッサ１２２は、モジュールプール７６０を対象に更新または追加が終了するまで、該当のイベントと関連するイベントモジュールの呼び出しに対するロック（Ｌｏｃｋ）を設定する。
【００７３】
例えば、出席イベントと関連するプログラムパッケージが修正されて該当のイベントモジュールを更新しようとする場合、修正されたプログラムパッケージがモジュールデータベースであるモジュールリポジトリ７４０に格納される。このとき、モジュールプールが更新される前にクライアントから出席イベントに対する呼び出し要求が発生した場合、プロセッサ１２２は、該当のイベントの呼び出し要求を受信した後から更新が終了するまで、一定時間に渡って該当のイベント処理を待機させてよい。すなわち、出席イベントと関連するサービスへのアクセス自体を遮断するのではなく、極めて短い時間で更新がなされるため、出席イベントのための仮想空間へのクライアントアクセスを許容しながら応答をしばらく待機させてよい。このために、プロセッサ１２２は、クライアントからの呼び出し要求は受信するが、該当のイベントと関連するイベントモジュールの呼び出しに対してはロック（Ｌｏｃｋ）を設定する。この後、モジュールプールで出席イベント関連の更新が終了すれば、プロセッサ１２２は、ロックが設定されたイベントモジュールの呼び出しに対するロックを解除（Ｕｎｌｏｃｋ）する。
【００７４】
例えば、ロック（Ｌｏｃｋ）が設定された後、プロセッサ１２２は、モジュールリポジトリ７４０に格納された、更新要求された出席イベントに該当するプログラムパッケージをメモリにロードする。この後、リフレクション（ｒｅｆｌｅｃｔｉｏｎ）を利用してロードされたプログラムパッケージを分析してよく、分析によって得られたクラス、関数、関数のパラメータなどに基づき、モジュールプール７５０で既に構造化された既存の出席イベント関連クラス、関数、関数のパラメータを更新する。これにより、更新要求された出席イベントと関連するイベントモジュールの更新が終了してよく、更新の終了に伴い、プロセッサ１２２は、出席イベントと関連するイベントモジュールの呼び出しに対するロック（Ｌｏｃｋ）を解除（Ｕｎｌｏｃｋ）する。このように、イベントモジュールを追加または更新しようとする場合、サーバをシャットダウン（ｓｈｕｔｄｏｗｎ）させる必要なく、無停止状態でモジュール配布を行うことができる。
【００７５】
イベントモジュールの更新と同じようにイベントモジュールの属性（ＣｏｎｆｉｇｕｒａｔｉｏｎＩｔｅｍｓ）が更新されてよく、イベントモジュールの属性更新時にも、サーバをショットダウン（ｓｈｕｔｄｏｗｎ）させる必要なく、無停止状態で更新された属性ファイルの配布を行うことができる。
【００７６】
例えば、プロセッサ１２２は、モジュール管理ツール７３０を通じてモジュールの属性更新要求を受信する（７２０）。これにより、属性データベースであるモジュール属性リポジトリ７５０に該当のプログラムパッケージが格納されてよく、プロセッサ１２２は、モジュールプール７６０を対象に、イベントモジュールの更新を実行するために該当のイベントモジュールに対する呼び出しにロック（Ｌｏｃｋ）を設定する。この後、要求されたイベントモジュールの属性更新が終了すれば、ロックが解除（Ｕｎｌｏｃｋ）される。
【００７７】
このように、イベント処理をモジュールプールおよびモジュールローダを基盤として実行することにより、既存のスクリプト基盤のイベント処理方式とは異なり、スクリプトファイルをＤＢ（すなわち、リポジトリ（ｒｅｐｏｓｉｔｏｒｙ））に格納した後にサーバに信号（ｓｉｇｎａｌ）を送信してリロード（ｒｅｌｏａｄ）するのではなく、サーバがモジュールプールから該当のイベントを検索して直ぐに関数を実行することができる。
【００７８】
図８は、本発明の一実施形態における、イベントモジュールを基盤として単一応答メッセージを提供する動作を示したフローチャートであり、図９は、本発明の他の実施形態における、プロセッサの内部構成を示したブロック図である。
【００７９】
図９において、プロセッサ９００は、図２のプロセッサ１２２に該当してよく、図４のプロセッサ４００に含まれたモジュールアップデート部４４０の代わりに、情報受信部９４０およびメッセージ生成部９５０が含まれてよい。
【００８０】
図９によると、プロセッサ９００、１２２は、モジュール化部９１０、分析部９２０、構造化部９３０、情報受信部９４０、およびメッセージ生成部９５０を含んでいる。モジュール化部９１０、分析部９２０、構造化部９３０の動作は、上述した図４のモジュール化部９１０、分析部９２０、構造化部９３０と同じであるため、重複する説明は省略する。すなわち、図９において、モジュールを基盤としてイベントを処理する前処理過程（モジュール化、リフレクション基盤分析による構造化）は、図３および図４を参照しながら説明した前処理過程と同じであるため、図９では、前処理過程の後にクライアントからイベント呼び出しが要求された場合に、該当のイベントに対する応答をクライアントに提供する場合の処理について説明する。これにより、図８の段階８１０の前に前処理のための図３の各段階が実行されてよく、図８の各段階８１０〜８３０は、プロセッサ１２２、４００によって実行される。
【００８１】
段階８１０で、情報受信部９４０は、クライアントから特定のイベントの呼び出し要求を受信する。例えば、情報受信部９４０は、クライアントにインストールおよび駆動されたアプリケーションを通じて出席イベントの呼び出し要求を受信する。
【００８２】
段階８２０で、メッセージ生成部９５０は、構造化された各プログラムパッケージのクラスおよび関数のうち、呼び出しが要求された特定のイベントに該当するイベントモジュールと関連するクラスおよび関数に基づいて発生した複数のメッセージを集めて１つの単一応答メッセージを生成する。
【００８３】
段階８３０で、生成された単一応答メッセージがクライアントに提供される。
【００８４】
一例として、モジュールプールを対象に出席イベントに該当するクラスおよび関数が検索されてよく、メッセージ生成部９５０は、検索されたクラスおよび関数を実行することによって実行結果として得られる応答メッセージを集めて１つの単一応答メッセージを生成する。ここで、複数の応答メッセージは、関数を実行した結果であって、同時に得られないこともあるが、同時に得られる場合もあり、時間差で得られるメッセージが存在する場合もある。これにより、メッセージ生成部９５０は、クライアントから呼び出し要求された出席イベントに対する応答として、応答メッセージをそのつど提供するのではなく、１つに集めて構造化してからクライアントに提供する。ここで、単一応答メッセージを生成する動作は、図１０を参照しながら詳しく説明する。
【００８５】
図１０は、本発明の一実施形態における、単一応答メッセージを生成する動作を説明するために提供される概念図であり、図１１は、本発明の一実施形態における、単一応答メッセージの構造を示した図である。
【００８６】
図１０では、サーバとクライアント間のメッセージングのラウンドトリップ（Ｒｏｕｎｄｔｒｉｐ）を最小化して性能的効果を高めるために、複数の応答を集めて１つ応答として処理する場合を例示して説明するが、これは実施形態に過ぎず、イベントモジュールそれぞれからクライアントにメッセージが直接送信されてもよい。
【００８７】
図１０の１０００を参照すると、クライアントからイベント１に対する呼び出しが要求されると、プロセッサ１２２、９００は、該当のイベントと関連するイベントモジュールを呼び出し、モジュールプールから検索されたクラスおよび関数を実行することによって発生する複数の送信するメッセージ１０１０、１０２０を集めて単一応答メッセージ１０３０を生成する。この後、生成された単一応答メッセージ１０３０をクライアントに提供する。すなわち、複数の送信するメッセージ（例えば、図１０の８件の応答メッセージ）それぞれが発生するたびにクライアントに送信するのではなく、８件の応答メッセージをバッファなどに臨時保管しておいてから１つの応答（すなわち、単一応答メッセージ）として生成してクライアントに提供する。このとき、すべてのイベントモジュールの呼び出しが終了した後に、クライアントに送信される複数のメッセージが集められて単一応答メッセージが生成される。
【００８８】
一例として、プロセッサ（例えば、メッセージ生成部）は、特定のイベント（例えば、イベント１）と関連するイベントモジュール（イベントモジュールＡ、Ｂ）を呼び出して該当のクラスおよび関数を実行し、実行結果として提供される複数の応答メッセージ１０１０、１０２０を集めて１つの単一応答メッセージを生成する。このとき、メッセージは、場合によっては、順序のあるメッセージ（すなわち、順序と関係のあるメッセージ（Ｓｅｑｕｅｎｃｅｄ  Ｍｅｓｓａｇｅ））を含むこともあるし、順序には関係のないメッセージ（すなわち、順序とは無関係のメッセージ（Ｕｎｉｆｉｅｄ  Ｍｅｓｓａｇｅ））を含むこともある。これにより、プロセッサ（例えば、メッセージ生成部）は、図１１に示すように、順序に関係のあるメッセージ１１２０と順序とは無関係なメッセージ１１１０とを区分して単一応答メッセージ１１００を生成する。ここで、順序に関係のあるメッセージ１１２０とは、クライアントから呼び出しが要求された特定のイベントに該当する応答を提供するとき、提供順序があると指定されたメッセージ（すなわち、応答メッセージ）を示す。
【００８９】
例えば、特定のイベントと関連し、実行結果としてウェルカムメッセージ、報酬メッセージ、メール確認メッセージなどが単一応答メッセージを生成するために集められたとする。このとき、認証されたクライアントと関連し（すなわち、ユーザがログインした後）、ウェルカムメッセージ、報酬メッセージ、メール確認メッセージが順にクライアントのディスプレイに表示されるものと予め指定された場合、順序が指定されたメッセージは、それぞれ優先順位情報を該当のメッセージに関連させて単一応答メッセージ内で構成される。例えば、ウェルカムメッセージと関連させて優先順位１を示す情報が、報酬メッセージと関連させて優先順位２を示す情報が、メール確認メッセージと関連させて優先順位３を示す情報が共に単一応答メッセージ内に含まれてよい。このとき、順序とは無関係なメッセージが存在する場合、単一応答メッセージ内には、順序とは無関係なメッセージが共に含まれてよい。
【００９０】
このように、クライアントから呼び出し要求されたイベントと関連してサーバが単一応答メッセージを提供することにより、クライアントは、構造化のためのすべてのメッセージが受信されるまで待機する必要なく、構造化された形態の単一応答メッセージを受信することができるため、クライアント端ではイベントに対する応答を一度に処理することができる。
【００９１】
図１０の１０５０を参照すると、特定のイベントと関連して処理されるイベントモジュール（すなわち、プログラムパッケージ）の関数を実行しながら、該当の関数を共有する他のイベントモジュール（すなわち、他のプログラムパッケージ）が存在することがある。これにより、プロセッサ１２２、９００は、イベントモジュールを処理しながら内部循環イベントを通じて他のイベントモジュールの関数を再利用することにより、モジュール間の重複コードを防ぐことができる。
【００９２】
一例として、特定のイベントと関連するイベントモジュール（例えば、イベントモジュールＡ、Ｂ、Ｃ）が複数である場合、プロセッサ１２２、９００は、内部循環イベント１０５１を通じて複数のイベントモジュールそれぞれを呼び出して該当の関数を実行する。この後、すべてのイベントモジュール（例えば、イベントモジュールＡ、Ｂ、Ｃ）と関連する関数の実行が終了すれば、実行結果として複数の応答メッセージが生成される。このとき、プロセッサ１２２、９００は、複数の応答メッセージを集めて単一応答メッセージとして生成してよく、生成された単一応答メッセージをクライアントに提供する。このとき、内部循環イベント１０５１を通じて他のイベントモジュールを呼び出す場合、同期式または非同期式で他のイベントモジュールが呼び出しされ、該当のイベント関連の関数が実行される。例えば、同期式で処理される場合、サーバの実行コードがブロッキング（ｂｌｏｃｋｉｎｇ）される。すなわち、実行結果に対する応答が発生するまで、次のコードを実行せずに待機する。この後、応答が発生すれば次のコードが実行される。非同期式で処理される場合、サーバの実行コードがノンブロッキング（Ｎｏｎ−Ｂｌｏｃｋｉｎｇ）される。例えば、応答が受信されなくても直ぐに次のコードを実行し、次のコードの実行中に応答が発生すれば、発生した応答をクライアントに提供するなどの処理が実行される。
【００９３】
上述したシステムまたは装置は、ハードウェア構成要素、ソフトウェア構成要素、またはハードウェア構成要素とソフトウェア構成要素との組み合わせによって実現される。例えば、実施形態で説明された装置および構成要素は、例えば、プロセッサ、コントローラ、ＡＬＵ（ａｒｉｔｈｍｅｔｉｃ  ｌｏｇｉｃ  ｕｎｉｔ）、デジタル信号プロセッサ、マイクロコンピュータ、ＦＰＧＡ（ｆｉｅｌｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）、ＰＬＵ（ｐｒｏｇｒａｍｍａｂｌｅ  ｌｏｇｉｃ  ｕｎｉｔ）、マイクロプロセッサ、または命令を実行して応答することができる様々な装置のように、１つ以上の汎用コンピュータまたは特殊目的コンピュータを利用して実現される。処理装置は、オペレーティングシステム（ＯＳ）およびＯＳ上で実行される１つ以上のソフトウェアアプリケーションを実行する。また、処理装置は、ソフトウェアの実行に応答し、データにアクセスし、データを格納、操作、処理、および生成してもよい。理解の便宜のために、１つの処理装置が使用されるとして説明される場合もあるが、当業者は、処理装置が複数個の処理要素および／または複数種類の処理要素を含んでもよいことが理解できるであろう。例えば、処理装置は、複数個のプロセッサまたは１つのプロセッサおよび１つのコントローラを含んでよい。また、並列プロセッサのような、他の処理構成も可能である。
【００９４】
ソフトウェアは、ネットワークによって接続されたコンピュータシステム上に分散され、分散された状態で格納されても、実行されてもよい。ソフトウェアおよびデータは、１つ以上のコンピュータで読み取り可能な記録媒体に格納される。
【００９５】
実施形態に係る方法は、多様なコンピュータ手段によって実行可能なプログラム命令の形態で実現されてコンピュータで読み取り可能な記録媒体に記録されてよい。コンピュータで読み取り可能な記録媒体は、プログラム命令、データファイル、データ構造などを単独でまたは組み合わせて含んでよい。記録媒体に記録されるプログラム命令は、実施形態のために特別に設計されて構成されたものであってもよいし、コンピュータソフトウェア当業者に公知な使用可能なものであってもよい。コンピュータで読み取り可能な記録媒体の例としては、ハードディスク、フロッピー（登録商標）ディスク、および磁気テープのような磁気媒体、ＣＤ−ＲＯＭ、ＤＶＤのような光媒体、フロプティカルディスク（ｆｌｏｐｔｉｃａｌ  ｄｉｓｋ）のような光磁気媒体、およびＲＯＭ、ＲＡＭ、フラッシュメモリなどのようなプログラム命令を格納して実行するように特別に構成されたハードウェア装置が含まれる。プログラム命令の例は、コンパイラによって生成されるもののような機械語コードだけではなく、インタプリタなどを使用してコンピュータによって実行される高級言語コードを含む。
【００９６】
以上のように、実施形態を、限定された実施形態と図面に基づいて説明したが、当業者であれば、上述した記載から多様な修正および変形が可能であろう。例えば、説明された技術が、説明された方法とは異なる順序で実行されたり、かつ／あるいは、説明されたシステム、構造、装置、回路などの構成要素が、説明された方法とは異なる形態で接続されたりまたは組み合わされたり、他の構成要素または均等物によって対置されたり置換されたとしても、適切な結果を達成することができる。
【００９７】
したがって、異なる実施形態であっても、特許請求の範囲と均等なものであれば、添付される特許請求の範囲に属する。
【符号の説明】
【００９８】
２００：サーバ
２０１：クライアント
２１０：モジュールプール
２２０：モジュールローダ
【図１】
2019021312.tif 000003
【図２】
2019021312.tif 000004
【図３】
2019021312.tif 000005
【図４】
2019021312.tif 000006
【図５】
2019021312.tif 000007
【図６】
2019021312.tif 000008
【図７】
2019021312.tif 000009
【図８】
2019021312.tif 000010
【図９】
2019021312.tif 000011
【図１０】
2019021312.tif 000012
【図１１】
2019021312.tif 000013