(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-02-20
(45)【発行日】2023-03-01
(54)【発明の名称】イベント基盤パッケージモジュールの呼び出し方法およびシステム
(51)【国際特許分類】
G06F 9/448 20180101AFI20230221BHJP
G06F 9/445 20180101ALI20230221BHJP
A63F 13/35 20140101ALN20230221BHJP
【FI】
G06F9/448 120
G06F9/445 120
A63F13/35
(21)【出願番号】P 2018134255
(22)【出願日】2018-07-17
【審査請求日】2021-07-02
(31)【優先権主張番号】10-2017-0091705
(32)【優先日】2017-07-19
(33)【優先権主張国・地域又は機関】KR
(31)【優先権主張番号】10-2017-0091709
(32)【優先日】2017-07-19
(33)【優先権主張国・地域又は機関】KR
(73)【特許権者】
【識別番号】313011434
【氏名又は名称】エヌエイチエヌ コーポレーション
【住所又は居所原語表記】(Sampyeong-dong),16,Daewangpangyo-ro 645 beon-gil,Bundang-gu,Seongnam-si,Gyeonggi-do Republic of Korea
(74)【代理人】
【識別番号】110000408
【氏名又は名称】弁理士法人高橋・林アンドパートナーズ
(72)【発明者】
【氏名】イ ヒョンゴル
(72)【発明者】
【氏名】キム ジソン
【審査官】杉浦 孝光
(56)【参考文献】
【文献】特開2007-065837(JP,A)
【文献】米国特許出願公開第2012/0102025(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/44 - 9/448
G06F 8/00 - 8/77
G06F 9/54
A63F 13/35
(57)【特許請求の範囲】
【請求項1】
コンピュータによって実行されるイベント基盤パッケージモジュール呼び出し方法であって、
リフレクション(reflection)基盤のプログラミング言語を使用して、特定のイベントと関連する複数の機能が実現されたプログラムパッケージ(program package)をイベントモジュールとしてモジュール化し、
複数のイベント別に前記プログラムパッケージをロード(loading)し、
リフレクション(reflection)を使用してロードされた前記プログラムパッケージを分析し、
分析された前記プログラムパッケージのクラス(class)および関数をイベント別に構造化すること
を含む、イベント基盤パッケージモジュール呼び出し方法。
【請求項2】
前記イベント別に構造化することは、
構造化された前記イベント別のクラス(class)および関数に基づき、クライアントから呼び出し要求された特定のイベントに該当するクラスまたは関数を実行し、
前記クラスまたは関数を実行した実行結果を、呼び出された前記特定のイベントに対する応答として前記クライアントに伝達すること
を含む、請求項1に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項3】
前記特定のイベントと関連するクラスまたは関数を実行するためのイベントモジュールは、同期式または非同期式に呼び出されること
を特徴とする、請求項2に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項4】
前記イベントモジュールとしてモジュール化することは、
前記特定のイベントと関連する複数の機能それぞれを、予め指定されたノーテーション(notation)と関連させてモジュール化すること
を特徴とする、請求項1に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項5】
前記イベント別に構造化することは、
前記プログラムパッケージのクラス(class)および関数をハッシュ(hash)関数に基づいてイベント別に構造化すること
を特徴とする、請求項1に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項6】
前記イベント別に構造化された前記プログラムパッケージのクラスおよび関数が更新のためにロードされた前記イベントモジュールに該当するプログラムパッケージを対象に分析されたクラスおよび関数を示すように更新すること
をさらに含む、請求項1に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項7】
前記プログラムパッケージに該当するイベントモジュールを更新しようとする場合、更新しようとするイベントモジュールの呼び出しに対するロック(Lock)が設定され、
前記プログラムパッケージと関連するイベントの呼び出しに対して設定されたロック(Lock)は、前記更新の終了に伴って解除されること
を特徴とする、請求項1に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項8】
前記プログラムパッケージに該当するイベントモジュールの属性(configuration Items)を更新しようとする場合、前記属性の更新が終了するまで、更新しようとする前記属性と関連するイベントモジュールの呼び出しに対するロック(Lock)が設定されること
を特徴とする、請求項7に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項9】
コンピュータによって実行されるイベント基盤パッケージモジュール呼び出し方法であって、
リフレクション(reflection)基盤のプログラミング言語を使用して特定のイベントと関連する複数の機能が実現されたプログラムパッケージ(program package)をイベントモジュールとしてモジュール化し、
リフレクション(reflection)を使用して複数のイベントモジュールそれぞれに該当するプログラムパッケージを分析し、
分析された各プログラムパッケージのクラス(class)および関数をイベント別に構造化し、
クライアントから特定のイベントの呼び出し要求を受信し、
構造化された各プログラムパッケージのクラスおよび関数のうち、前記呼び出しが要求された特定のイベントに該当するイベントモジュール関連のクラスおよび関数に基づいて発生された複数のメッセージを集めて単一応答メッセージを生成し、
生成された前記単一応答メッセージを前記クライアントに提供すること
を含む、イベント基盤パッケージモジュール呼び出し方法。
【請求項10】
前記単一応答メッセージを生成することは、
前記複数のメッセージを対象に、順序とは無関係なメッセージ(unified message)と順序と関係のあるメッセージ(sequenced message)とを区分して前記単一応答メッセージを生成すること
を特徴とする、請求項9に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項11】
前記順序と関係のあるメッセージは、クライアントで前記呼び出しが要求された特定のイベントに該当する応答を提供するときに提供順序があると指定されたメッセージを示すこと
を特徴とする、請求項10に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項12】
前記単一応答メッセージを生成することは、
前記順序と関係のあるメッセージ(sequenced message)が複数である場合、順序と関係のあるメッセージそれぞれに該当する優先順位を該当のメッセージと関連させて前記単一応答メッセージを生成すること
を特徴とする、請求項10に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項13】
前記単一応答メッセージを生成することは、
構造化されたイベントモジュールを基盤として呼び出し要求された前記特定のイベントに該当する少なくとも1つのイベントモジュールの関数を実行することによって生成された実行結果
として得られる複数のメッセージを集めて前記単一応答メッセージを生成すること
を特徴とする、請求項9に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項14】
前記関数を実行することは、
前記特定のイベントと関連するイベントモジュールが複数である場合、内部循環イベントを通じて複数のイベントモジュールそれぞれを呼び出して該当の関数を実行すること
を含む、請求項13に記載のイベント基盤パッケージモジュール呼び出し方法。
【請求項15】
リフレクション(reflection)基盤のプログラミング言語を使用して特定のイベントと関連する複数の機能が実現されたプログラムパッケージ(program package)をイベントモジュールとしてモジュール化するモジュール化部と、
複数のイベント別に前記プログラムパッケージをロード(loading)し、リフレ
クション(reflection)を使用してロードされた前記プログラムパッケージを分析する分析部と、
分析された前記プログラムパッケージのクラス(class)および関数をイベント別に構造化する構造化部と、
を備える、イベント基盤パッケージモジュール呼び出しシステム。
【請求項16】
前記構造化部は、
構造化された前記イベント別のクラス(class)および関数に基づいてクライアントから呼び出し要求された特定のイベントに該当するクラスまたは関数を実行し、前記クラスまたは関数を実行した実行結果を、呼び出しされた前記特定のイベントに対する応答として前記クライアントに伝達すること
を特徴とする、請求項15に記載のイベント基盤パッケージモジュール呼び出しシステム。
【請求項17】
前記モジュール化部は、
前記特定のイベントと関連する複数の機能それぞれを予め指定されたノーテーション(notation)と関連させてモジュール化すること
を特徴とする、請求項15に記載のイベント基盤パッケージモジュール呼び出しシステム。
【請求項18】
クライアントから前記特定のイベントの呼び出し要求を受信する情報受信部と、
構造化された各プログラムパッケージのクラスおよび関数のうち、前記呼び出しが要求された特定のイベントに該当するイベントモジュール関連クラスおよび関数に基づいて発生した複数のメッセージを集めて単一応答メッセージを生成し、生成された前記単一応答メッセージを前記クライアントに提供するメッセージ生成部と、
をさらに備える、請求項15に記載のイベント基盤パッケージモジュール呼び出しシステム。
【請求項19】
前記メッセージ生成部は、
前記複数のメッセージを対象に、順序とは無関係なメッセージ(unified message)と順序と関係のあるメッセージ(sequenced message)とを区分して前記単一応答メッセージを生成すること
を特徴とする、請求項18に記載のイベント基盤パッケージモジュール呼び出しシステム。
【請求項20】
前記構造化部は、
構造化されたイベントモジュールを基盤として呼び出し要求された前記特定のイベントに該当する少なくとも1つのイベントモジュールの関数を実行し、
前記メッセージ生成部は、
前記関数を実行した実行結果
として得られる複数のメッセージを集めて前記単一応答メッセージを生成すること
を特徴とする、請求項18に記載のイベント基盤パッケージモジュール呼び出しシステム。
【発明の詳細な説明】
【技術分野】
【0001】
以下の説明は、イベント(event)を処理する技術に関し、より詳細には、ゲームやオンラインショッピングなどの多様なサーバ環境において、特定のサービスを提供するためのイベントを処理して応答を提供する技術に関する。
【背景技術】
【0002】
既存のゲームサーバやオンラインショッピングモールなどのような多様なサーバ環境の場合は、特定のイベントを開始点として可変的な1つ以上の機能が呼び出されるが、大部分のシステムでは、サーバから要求されたイベント(例えば、ログイン時のお知らせ事項のポップアップ、連続出席ポイント/報酬、未確認メール/メッセージ関連イベントなど)を処理するとき、スクリプト基盤のプログラミング言語(Script Language)を使用する。例えば、スクリプト基盤のプログラミング言語は、ルア(Lua)、Java(登録商標)スクリプト(Java Script(登録商標))、パイソン(Python)などを含む。
【0003】
スクリプト基盤のプログラミング言語を使ってイベントを処理する場合、ランタイム(runtime)時にスクリプト(script)ファイルに含まれた文章を1つずつ読み取り、1行(line)ずつスクリプトエンジン(例えば、Java(登録商標)エンジンなど)に伝達して処理するため、コンパイル(compiled)されている言語と比較する場合、イベント処理にかかる応答時間が相対的に遅く、性能が低下する。
【0004】
また、スクリプト基盤のプログラミング言語を利用する場合には、デバッギング(debugging)時にはスクリプトエンジンからスクリプト(script)を呼び出すため、スクリプトエンジンまでしかデバッギングされず、スクリプト内をデバッギングするには困難をきたす。言い換えれば、スクリプトファイル内に何があるかを確認するには限界がある。
【0005】
さらに、スクリプト基盤のプログラミング言語の場合は、既存のコードと新たなコード間のコードシェア(code share)に困難がある。すなわち、既に実現されているライブラリ(library)をサーバで使用している場合、外部にあるライブラリをデータベースに入れて既存のものと互換させたり、新たなライブラリを作成して使用したりするなど、既存のコードと新たなコードをコードシェアさせることが難しい。
【0006】
既存では、イベントが発生した場合のサーバの処理ロジックは、既に作成されているサーバコードを修正して新たな企画(すなわち、イベント)の内容を反映したり、アップデートされた企画(すなわち、イベント)の内容を反映したりする方式で処理されていた。このとき、新たな企画内容を反映したり、アップデートされた企画内容を反映したりするときにはサーバの動作が停止し、ユーザの利用に制限が生じるという不便があった。例えば、「2017年07月01日午前12時から6時まで、サーバの点検により利用が制限されます。」などの知らせがクライアント端末に提供されると、該当の期間中は、ゲーム、ショッピング、インターネットバンキングなどのサービスの利用がクライアント端末で制限されていた。
【0007】
特許文献1は、オンラインゲームのためのユーザインタフェース提供装置およびその方法に関し、ゲームエンジンに独立的にユーザインタフェース構成要素を構成して再利用を可能とし、スクリプト(script)基盤でゲーム実行に関する処理を行う技術を開示している。
【先行技術文献】
【特許文献】
【0008】
【文献】韓国公開特許第10-2009-0000651号
【発明の概要】
【発明が解決しようとする課題】
【0009】
リフレクション(reflection)基盤のプログラミング言語を利用してゲームやオンラインショッピングなどのサービスを提供するサーバ環境において、プラグイン(plug in)形式でソースコードを呼び出してクライアントから要求されたイベントを処理する、イベント基盤パッケージモジュールの呼び出し方法およびシステムを提供する。
【課題を解決するための手段】
【0010】
コンピュータによって実行されるイベント基盤パッケージモジュールの呼び出し方法であって、リフレクション(reflection)基盤のプログラミング言語を使用して、特定のイベントと関連する複数の機能が実現されたプログラムパッケージ(program package)をイベントモジュールとしてモジュール化し、複数のイベント別にプログラムパッケージをロード(loading)し、リフレクション(reflection)を使用してロードされたプログラムパッケージを分析する段階、および分析されたプログラムパッケージのクラス(class)および関数をイベント別に構造化することを含んでよい。
【0011】
一実施形態によると、イベント別に構造化されたクラスおよび関数が更新のためにロードされたイベントモジュールに該当するプログラムパッケージを対象に、分析されたクラスおよび関数を示すように更新することをさらに含んでよい。
【0012】
イベント基盤パッケージモジュール呼び出しシステムは、リフレクション(reflection)基盤プログラミング言語を使用して特定のイベントと関連する複数の機能が実現されたプログラムパッケージ(program package)をイベントモジュールとしてモジュール化するモジュール化部と、複数のイベント別にプログラムパッケージをロード(loading)し、リフレクション(reflection)を使用してロードされたプログラムパッケージを分析する分析部と、および分析された前記プログラムパッケージのクラス(class)および関数をイベント別に構造化する構造化部と、を備えてよい。
【0013】
一実施形態によると、プログラムパッケージに該当するイベントモジュールを更新しようとする場合、更新しようとするイベントモジュールの呼び出しに対してロック(Lock)を設定し、更新しようとするイベントモジュールに該当するプログラムパッケージをモジュールデータベースからロードするモジュールアップデート部をさらに備えてよい。
【0014】
コンピュータによって実現されるサーバ装置と接続してイベント基盤パッケージモジュールの呼び出し方法を実行させるために記録媒体に格納されたコンピュータプログラムであって、イベント基盤パッケージモジュールの呼び出し方法は、リフレクション(reflection)基盤のプログラミング言語を使用して特定のイベントと関連する複数の機能が実現されたプログラムパッケージ(program package)をイベントモジュールとしてモジュール化し、複数のイベント別にプログラムパッケージをロード(loading)し、リフレクション(reflection)を使用してロードされたプログラムパッケージを分析し、および分析されたプログラムパッケージのクラス(class)および関数をイベント別に構造化することを含んでよい。
【発明の効果】
【0015】
リフレクション(reflection)基盤のプログラミング言語を利用してゲームやオンラインショッピングなどのサービスを提供するサーバ環境において、プラグイン(plug in)形式でソースコードを呼び出してクライアントから要求されたイベントを処理し、処理結果をクライアントに提供することにより、要求されたイベントに対する応答時間を早めることができる。すなわち、性能を向上させることができる。
【0016】
また、イベントと関連する機能が実現されたプログラムパッケージ(program package)をモジュール化し、モジュールを構造化したモジュールプールによってイベントを処理することにより、新たなイベントモジュールの追加または既存のイベントモジュールの更新時にサーバを中断(stop)しなくても、該当のモジュールを追加または更新(update)することができる。すなわち、サーバの動作状態を中止することなく維持したままで、該当のモジュールのバイナリ(binary)を配布することができる。
【0017】
また、複数のモジュールそれぞれに対して発生する多数の応答メッセージを集めて1つの単一応答メッセージ形態で生成してクライアント端末に提供することにより、クライアントから要求されたイベントに対する応答を一度で処理することが可能となる。すなわち、クライアントにおいて、自身が要求したイベントに関する応答がすべて受信されるまで待機したり、特定のメッセージを受信した後にこのメッセージの次のメッセージが受信されるまで待機したり、受信したメッセージを対象に該当のイベントに対する応答をユーザに提供するために構造化しなくてもよいため、応答速度(すなわち、処理速度)が上昇し、処理のために使われるコンピュータ資源の無駄な消耗を防ぐことができる。
【0018】
また、実際のサーバコードと同一のプログラミング言語(Programming Language)を使用するため、開発者のデバッギング(debugging)の便宜性を高めることができる。
【0019】
さらに、イベントモジュールそれぞれでは、サーバで既に作成された関数(予め生成された関数)を容易に再利用することができるため、モジュールコードを簡潔化させることができる。
【図面の簡単な説明】
【0020】
【
図1】本発明の一実施形態における、イベント基盤パッケージモジュール呼び出しシステムのネットワーク環境を示した図である。
【
図2】本発明の一実施形態における、リフレクション(reflection)基盤のプログラミング言語を利用してイベントが処理されるネットワーク環境を示した概念図である。
【
図3】本発明の一実施形態におけり、イベント基盤パッケージモジュールの呼び出し方法を示したフローチャートである。
【
図4】本発明の一実施形態における、イベント基盤パッケージモジュール呼び出しシステムのプロセッサが含むことのできる構成要素の例を示したブロック図である。
【
図5】本発明の一実施形態における、各プログラムパッケージを対象に分析された情報をイベント別に構造化したデータ構造図の例示図である。
【
図6】本発明の一実施形態における、データ構造化後にクライアントから要求されたイベントに対する応答を提供する動作を示したフローチャートである。
【
図7】本発明の一実施形態における、イベントモジュールおよびモジュール属性を更新または追加する動作を説明するための概念図である。
【
図8】本発明の一実施形態における、イベントモジュールを基盤として単一応答メッセージを提供する動作を示したフローチャートである。
【
図9】本発明の他の実施形態における、プロセッサの内部構成を示したブロック図である。
【
図10】本発明の一実施形態における、単一応答メッセージを生成する動作を説明するために提供される概念図である。
【
図11】本発明の一実施形態における、単一応答メッセージの構造を示した図である。
【発明を実施するための形態】
【0021】
以下、実施形態について、添付の図面を参照しながら詳しく説明する。
【0022】
本実施形態は、イベント基盤パッケージモジュールの呼び出し方法およびシステムに関し、より詳細には、ゲームサーバやオンラインショッピングなどの多様なサーバ環境において、スクリプト(script)基盤のプログラミング言語ではなくリフレクション(reflection)を提供するプログラミング言語を使用してイベントを処理する技術に関する。例えば、リフレクション(reflection)を提供するプログラミング言語は、Java(登録商標)やC#などを含んでよく、Java(登録商標)やC#を利用して作成されてコンパイル(compiled)されたファイルそれぞれをモジュール化してメモリにロード(loading)しておき、クライアントから特定のイベントに対する呼び出しが要求されたときには、該当のイベントに属するクラス(class)または関数を直ぐに実行させ、この実行結果を応答としてクライアント端末に提供する技術に関する。
【0023】
本実施形態において、「イベント」とは、ゲームサーバやオンラインショッピングなどで提供される特定の企画を示すものであって、例えば、出席イベント(例えば、連続出席時の報酬/ポイント支給イベントなど)、ショップイベント、ルーレットイベント(例えば、ログイン時にルーレットを回してゲームアイテム/報酬/ポイントなどを支給するイベントなど)、クリスマスイベント(例えば、クリスマス期間中に特定のゲームキャラクタ/ゲームアイテムの無料利用、クリスマスプレゼントイベントなど)、友だち招待イベント、無料体験イベントなどのような多様な種類のイベントを含んでよい。
【0024】
本実施形態において、「イベントモジュール」は、特定のイベントと関連する複数の機能が実現された関数が含まれた(すなわち、関数が集められた)プログラムパッケージ(program package)をモジュール化したものであって、パッケージモジュールと表現されてもよい。例えば、特定のイベントを開始点とする可変的な1つ以上の機能がモジュール化されてよく、ログインイベントの場合は、連続出席の報酬支給やお知らせ事項のポップアップなどが該当のイベントに関連する機能に属してよく、該当の機能を提供するために実現された関数を集めてパッケージ形態で構成される。また、特定のイベントと関連する機能に対する結果を応答としてクライアント端末に提供するために、すなわち、データベースなどの格納装置からスクリプトファイルを読み取って分析して実行した後に再びデータベースに戻し、実行結果を応答として提供するのではなく、イベントモジュールを通じてシステム自体で該当の関数を直ぐに実行し、この実行結果が応答として提供されるように、プログラムパッケージがイベント別にモジュール化される。
【0025】
本実施形態において、「クライアント」とは、ユーザが所持する端末を示すものであって、例えば、スマートフォン(smart phone)、タブレット(tablet)、ノート型パンコン、デスクトップなどを指す。
【0026】
図1は、本発明の一実施形態における、イベント基盤パッケージモジュール呼び出しシステムのネットワーク環境を示した図である。
【0027】
図1のネットワーク環境は、電子機器110、サーバ150、およびネットワーク170を含む例を示している。電子機器110は、クライアント端末であり、サーバ120は、イベント基盤パッケージモジュール呼び出しシステムである。
図1では、サーバ120にイベント基盤パッケージモジュール呼び出しシステムがプラットフォーム形態で実現される場合を説明しているが、これは実施形態に過ぎず、イベント基盤パッケージモジュール呼び出しシステムは、サーバ150とは別に外部に位置してもよい。例えば、サーバが複数存在する場合、イベント基盤パッケージモジュール呼び出しシステムは、該当のサーバとネットワークによって形成されてもよく、サーバそれぞれで呼び出しされるイベントに対する処理を、イベントモジュールを通じて実行する。
【0028】
電子機器110は、コンピュータ装置によって実現される固定端末や移動端末であってよく、電子機器110の例としては、スマートフォン、携帯電話、ナビゲーション、PC(personal computer)、ノート型パンコン、デジタル放送用端末、PDA(Personal Digital Assistant)、PMP(Portable Multimedia Player)、タブレットなどがある。一例として、電子機器110は、無線または有線通信方式を利用し、ネットワーク170を介してサーバ150と通信する。
【0029】
サーバ150は、電子機器110とネットワーク170を介して通信して命令、コード、ファイル、コンテンツ、サービスなどを提供するコンピュータ装置または複数のコンピュータ装置によって実現される。
【0030】
図1によると、サーバ150であるイベント基盤パッケージモジュール呼び出しシステムと電子機器110は、メモリ111、121、プロセッサ112、122、通信モジュール113、123、および入力/出力インタフェース114、124を含む。メモリ111、121は、コンピュータで読み取り可能な記録媒体であって、RAM(random access memory)、ROM(read only memory)、およびディスクドライブのような永久大容量記憶装置(permanent mass storage device)を含んでよい。また、メモリ111、121には、オペレーティングシステムと、少なくとも1つのプログラムコード(一例として、電子機器110にインストールされて駆動するブラウザやパッケージモジュールの呼び出しのためのアプリケーションなどのコード)が格納される。このようなソフトウェア構成要素は、ドライブメカニズム(drive mechanism)を利用してメモリ111、121とは別のコンピュータで読み取り可能な記録媒体からロードされる。このような別のコンピュータで読み取り可能な記録媒体は、フロッピー(登録商標)ドライブ、ディスク、テープ、DVD/CD-ROMドライブ、メモリカードなどのコンピュータで読み取り可能な記録媒体を含んでよい。他の実施形態において、ソフトウェア構成要素は、コンピュータで読み取り可能な記録媒体ではない通信モジュール113、123を通じてメモリ111、121にロードされてもよい。例えば、少なくとも1つのプログラムは、開発者またはアプリケーションのインストールファイルを配布するファイル配布システム(一例として、上述したサーバ150)がネットワーク170を介して提供するファイルによってインストールされるプログラム(一例として、上述したアプリケーション)に基づいてメモリ111、121にロードされる。
【0031】
プロセッサ112、122は、基本的な算術、ロジック、および入出力演算を実行することにより、コンピュータプログラムの命令を処理するように構成される。命令は、メモリ111、121または通信モジュール113、123によって、プロセッサ112、122に提供される。例えば、プロセッサ112、122は、メモリ111、121のような記録装置に格納されたプログラムコードにしたがって受信される命令を実行するように構成される。
【0032】
通信モジュール113、123は、ネットワーク170を介してクライアント端末である電子機器110とイベント基盤パッケージモジュール呼び出しシステムであるサーバ150とが互いに通信するための機能を提供する。一例として、クライアント端末(電子機器110)のプロセッサ112がメモリ111のような記録装置に格納されたプログラムコードにしたがって生成した要求(一例として、ログインなどのイベントの発生によるログインイベント呼び出しのための要求)が、通信モジュール113の制御にしたがってネットワーク170を介してイベント基盤パッケージモジュール呼び出しシステム(サーバ150)に伝達される。これとは逆に、イベント基盤パッケージモジュール呼び出しシステム(サーバ150)のプロセッサ122の制御にしたがって提供される制御信号や命令、コンテンツ、ファイルなどが、通信モジュール123とネットワーク170を経て電子機器110の通信モジュール113を通じて電子機器110に受信されてもよい。例えば、通信モジュール113を通じて受信したサーバ150の制御信号や命令などは、プロセッサ112やメモリ111に伝達されてよく、コンテンツやファイルなどは、電子機器110がさらに含むことのできる記録媒体に格納される。
【0033】
入力/出力インタフェース114、124は、入力/出力装置115とのインタフェースのための手段であってよい。例えば、入力装置は、キーボードまたはマウスなどの装置を含んでよいし、出力装置は、アプリケーションの通信セッションを表示するためのディスプレイのような装置を含んでよい。他の例として、入力/出力インタフェース114は、タッチスクリーンのように入力と出力のための機能が1つに統合された装置とのインタフェースのための手段であってもよい。より具体的な例として、電子機器110のプロセッサ112は、メモリ111にロードされたコンピュータプログラムの命令を処理するにあたり、サーバ150が提供するデータを利用して構成されるサービス画面やコンテンツが入力/出力インタフェース114を通じてディスプレイに表示される。
【0034】
また、他の実施形態において、クライアント端末である電子機器110およびイベント基盤パッケージモジュール呼び出しシステムであるサーバ150は、
図1の構成要素よりも多くの構成要素を含んでもよい。しかし、大部分の従来技術的構成要素を明確に図に示す必要はない。例えば、電子機器110は、上述した入力/出力装置115のうちの少なくとも一部を含むように実現されてもよいし、トランシーバ、GPS(Global Positioning System)モジュール、カメラ、各種センサ、データベースなどのような他の構成要素をさらに含んでもよい。より具体的な例として、電子機器110がスマートフォンである場合、一般的にスマートフォンが含んでいる加速度センサやジャイロセンサ、カメラ、物理的な各種ボタン、タッチパネルを利用したボタン、入力/出力ポート、振動のための振動器などのような多様な構成要素が電子機器110にさらに含まれるように実現されてもよいことが理解できるであろう。
【0035】
また、イベント基盤パッケージモジュール呼び出しシステムであるサーバ150にデータベースが含まれる場合でも、サーバ150とは別に外部にデータベースが存在してもよく、データベースは、サーバ150で、ゲームまたはショッピングモールなどのウェブサイトに接続したり、アプリケーションから該当のサービスが提供されたりするための通信セッションが設定された複数の電子機器(すなわち、クライアント端末)で発生したイベントに対する呼び出しおよび呼び出されたイベントに対する応答を提供するための多様な情報を格納および管理する。例えば、データベースは、複数のイベントモジュールそれぞれに該当するプログラムパッケージを格納および管理するモジュールデータベース、および複数のイベントそれぞれの属性(configuration Items、例えば、設定(config)ファイル)と関連するプログラムパッケージを格納および管理する属性データベースを含んでよい。
【0036】
本発明の実施形態に係るイベント基盤パッケージモジュール呼び出しシステムは、サーバ150にプラットフォーム(platform)の形態で実現される。以下では、説明の便宜のために、電子機器110にサーバ150との通信セッションを設定し、サーバ150から提供されるサービスを受信するためのアプリケーションまたはブラウザのインストールおよび駆動のためのパッケージファイルが格納され、電子機器110の要求にしたがい(すなわち、電子機器でイベントが発生してサーバからイベントが呼び出されることにしたがい)、サーバ150に実現されるイベント基盤パッケージモジュール呼び出しシステムを通じて呼び出しされたイベントを処理する実施形態について説明する。
【0037】
図2は、本発明の一実施形態における、リフレクション(reflection)基盤のプログラミング言語を利用してイベントが処理されるネットワーク環境を示した概念図である。
【0038】
図2を参照すると、クライアント201は、電子機器110にインストールされたモバイルアプリまたはウェブブラウザなどを示してよく、クライアント201で特定のイベント(ログインなどのイベント1)が発生することにより、サーバ200は、クライアント201にインストールおよび駆動されたアプリケーションまたはウェブブラウザで発生したイベントの呼び出し要求をクライアント201から受信する。
【0039】
サーバ200は、クライアント201から呼び出し要求されたイベント(例えば、イベント1)を確認し、該当のイベントをモジュールプール210から検索して実行し、実行結果を呼び出されたイベントに対する応答としてアプリケーションまたはウェブブラウザを通じてクライアント201に伝達する。すなわち、サーバ200は、呼び出されたイベントと関連する機能が実現された関数を実行する。このとき、リフレクション(reflection)基盤のプログラミング言語を使用してイベントを処理するために、イベント基盤パッケージモジュール呼び出しシステム(サーバ200)は、モジュールプール210およびモジュールローダ220を備えてよく、複数のイベントそれぞれに該当する複数の機能を集めておいたプログラムパッケージは、イベントモジュール230としてモジュール化されてデータベース(すなわち、モジュールデータベースおよび属性データベース)に格納および維持される。
図2では、サーバにモジュールプール210およびモジュールローダ220が備えられた場合を例示して説明しているが、これは実施形態に過ぎず、モジュールプール210は、メモリとしてサーバとは別の外部に位置してもよく、モジュールローダ220は、モジュールプール210の動作を制御するためにサーバまたはサーバとは別の電子機器などのプロセッサに含まれる構造で実現されてもよい。
【0040】
図2において、イベントモジュール230それぞれは、リフレクション(reflection)の基盤プログラミング言語を使用して作成された/生成されたプログラムパッケージ(例えば、Java(登録商標)の場合はJAR(Java(登録商標)ARchive)ファイル、C#の場合DLL(Dynamic Link Library)ファイルなど)をモジュール化したものであって、JARやDLLなどのプログラムパッケージで事前に定義したノーテーション(notation、例えば、Java(登録商標)の場合はAnnotation、C#の場合はAttributeなど)を使用して実現される。ここで、プログラムパッケージは、特定のイベントと関連する機能が実現された少なくとも1つの関数を含んでよく、該当の関数は、事前に定義されたノーテーション(notation、すなわち表記情報)と関連させてプログラムパッケージに定義される。例えば、出席イベントと関連する機能(例えば、出席イベントを提供するウェブページまたは仮想空間への参入、出席確認、連続出席による報酬支給、出席イベントをユーザに提供するウェブページ、または仮想空間からの退場などのアクションによる結果を提供するための関数)を含むプログラムパッケージには、特定の機能に該当する関数別に予め定義されたノーテーション(notation)が関連されて含まれてよい。ここで、ノーテーション(notation)とは、該当の機能が特定のイベントと関連することを識別するための表記情報を示す。ノーテーションの一例として、@ModuleInterfaceが利用されてよく、@の他にも#や%などの多様な記号が利用されてもよく、ModuleInterface以外の文字(character)が利用されてもよい。
【0041】
モジュールローダ220は、リフレクション(Reflection)を使用してプログラムパッケージ(program package)をロード(loading)し、ロードされたプログラムパッケージを対象に、プログラムパッケージ内に事前に定義されたノーテーションに基づき、該当のイベントと関連して定義された関数、関数のパラメータ、およびクラス(class)などを分析する。このとき、プログラムパッケージが1つのイベントモジュールとしてモジュール化されることにより、モジュールローダ220は、ロードされたプログラムパッケージ(すなわち、イベントモジュール)がどのようなクラス、どのようなメンバ数、どのようなメンバ関数(例えば、イベント関数)で構成されたかを分析することができる。
【0042】
モジュールプール(pool)210は、モジュールローダ220で分析されたプログラムパッケージに該当するイベントモジュール別のクラス、関数、および関数のパラメータを、ハッシュ関数を利用して構造化する。例えば、モジュールプール210は、メモリに該当するものであって、モジュールローダを通じてロードされた各プログラムパッケージのクラス、イベント関数、関数のパラメータなどを、ハッシュ(hash)関数を利用してイベント別に区分して構造化する。すなわち、特定のイベントの呼び出しが要求される場合、呼び出し要求された特定のイベントに対する応答をクライアント端末に直ぐに提供するために、各プログラムパッケージのクラス、イベント関数などをイベントの識別子情報とリンク接続するデータ構造化が実行される。その後、データ構造化までの前処理過程が終了し、クライアントから特定のイベントに対する呼び出し要求が受信されれば、モジュールプールを対象に受信した特定のイベントと関連するイベントモジュールに対する呼び出しが要求されて該当の関数が実行される。このとき、イベントモジュールに対する呼び出しは、同期式、非同期式で実行される。例えば、状況に応じてサーバの実行コードがブロック(blocking)されたり、ノンブロック(Non-blocking)されたりすることで、サーバ開発の柔軟性を提供する。
【0043】
図3は、本発明の一実施形態における、イベント基盤パッケージモジュールの呼び出し方法を示したフローチャートであり、
図4は、本発明の一実施形態における、イベント基盤パッケージモジュール呼び出しシステムのプロセッサが含むことのできる構成要素の例を示したブロック図である。
【0044】
図4に示すように、イベント基盤パッケージモジュール呼び出しシステム(サーバ150、200)に含まれるプロセッサ122は、構成要素として、モジュール化部410、分析部420、構造化部430、およびモジュールアップデート部440を備えている。
図4において、分析部420は、
図2のモジュールローダ220に該当する動作を実行または制御し、構造化部430は、
図2のモジュールプール210に該当する動作を実行または制御するために利用される。すなわち、分析部420は、モジュールローダ220の動作中にプロセッサ122によって実行される一部の動作(例えば、メモリにプログラムパッケージがロードされるように制御し、プログラムパッケージを分析する動作など)を実行し、構造化部430は、モジュールプール210の動作中にプロセッサ122によって実行される一部の動作(例えば、メモリで実行される動作を除いた動作であって、呼び出し要求されたイベントに該当する関数などをモジュールプールから検索して実行する動作など)を実行する。
【0045】
また、モジュール化部410、分析部420、構造化部430、およびモジュールアップデート部440は、
図3の各段階310~350を実行するために利用される。
【0046】
段階310で、モジュール化部410は、リフレクション(reflection)基盤のプログラミング言語を使用して特定のイベントと関連する複数の機能が実現されたプログラムパッケージ(program package)をイベントモジュールとしてモジュール化する。ここで、複数のイベントそれぞれをイベントモジュールとしてモジュール化する過程は、サーバが提供する特定のサービス(例えば、ゲームサービスやオンラインショッピングモールサービスなど)を提供するために実現しなければならない機能が実現されたプログラムをDLLファイルやJARファイルなどにモジュール化し、該当のイベントが発生したときに直ぐに実行できるようにするための前処理過程に該当する。すなわち、該当のイベントが発生した場合、DBから該当となるスクリプトファイルを読み取って実行した後に再び元に戻すのではなく、該当のイベントと関連するDLLファイルやJARファイルを直ぐに実行して応答結果を提供する前処理過程に該当する。
【0047】
一例として、ゲームサービスをサーバからクライアント端末に提供する場合、ゲームサービスを受信するときに発生する複数のイベント(例えば、ログインイベント、ログアウトイベント、ショップイベント、出席イベントなど)と関連するアクションの結果を提供するための少なくとも1つの関数(すなわち、イベント関数)が、プログラムパッケージ内に定義される。すなわち、関数内に特定のイベントを実現させるためのプログラムが定義されてよく、ゲームサービスで提供される複数のイベントごとに該当のイベントを実現するための関数がプログラムパッケージとして実現される。例えば、ショップイベントの場合は、ショップイベントを実現するための関数がショップイベントパッケージに含まれるように実現されてよく、出席イベントの場合は、出席イベントを実現するための関数が出席イベントパッケージに含まれるように実現される。
【0048】
このとき、プログラムパッケージをイベントモジュールとしてモジュール化するために、プログラムパッケージは、特定のイベントと関連する複数の機能それぞれを事前に定義されたノーテーション(notation)と関連させて実現する。例えば、出席イベントパッケージは、出席イベントと関連する機能1および機能2に該当する機能1の関数および機能2の関数を含んでよい。機能1の関数および機能2の関数それぞれは、プログラムパッケージ内にノーテーション(notation)と関連させて定義される。例えば、Java(登録商標)の場合はAnnotation、C#の場合はAttributeを利用することにより、ノーテーションを該当の関数に関連させてプログラムパッケージ内に定義することができる。このようにして、複数のイベントごとに、それぞれに該当するプログラムパッケージを、ノーテーションに基づいてイベントモジュールとしてモジュール化する。
【0049】
段階320で、分析部420は、複数のイベントそれぞれに該当するプログラムパッケージをメモリにロード(loading)する。ここで、ロードする分析部420の動作は、
図2のモジュールローダ220に該当する。すなわち、複数のイベントそれぞれに該当するプログラムパッケージがノーテーションに基づいてイベントモジュールとしてモジュール化されると、プログラムパッケージに対する分析のためにプログラムパッケージがメモリにロードされる。
【0050】
段階330で、分析部420は、プログラムパッケージを実現したプログラミング言語で支援するリフレクション(reflection)を使用してロードされた複数のプログラムパッケージのそれぞれを分析する。
【0051】
一例として、分析部420は、Java(登録商標)やC#などのプログラミング言語で支援するリフレクション(reflection)を使用して複数のプログラムパッケージを読み取り、複数のプログラムパッケージを対象に、プログラムパッケージ内で事前に定義されたノーテーションに基づき、該当のノーテーションと関連させて定義された関数(すなわち、イベント関数)、該当する関数のクラス(class)、および関数のパラメータなどを分析する。
【0052】
段階340で、構造化部430は、分析されたプログラムパッケージのクラス(class)および関数(すなわち、イベント関数)をイベント別に構造化する。
【0053】
一例として、構造化部430は、モジュールプール(pool)から特定のイベントに該当するクラスまたは関数の検索が容易かつ迅速になされるように、分析された各プログラムパッケージのクラスおよび関数を、ハッシュ(hash)関数を利用して構造化(すなわち、データ構造化)する。このとき、構造化部430は、分析された各プログラムパッケージのクラスおよびイベント関数をイベント別に構造化(すなわち、データ構造化)する。このとき、クラス、イベント関数の他に、分析された関数のパラメータ(例えば、メンバ変数など)が、ハッシュ関数を利用してクラス、イベント関数と共に構造化されてもよい。ここで、分析された情報(クラス、イベント関数など)を基盤としてデータを構造化する詳しい動作については、以下の
図5を参照しながら説明する。
【0054】
段階350で、更新または追加しようとするイベントモジュールが存在する場合、モジュールアップデート部440は、該当のイベントモジュールの呼び出しに対するロック(Lock)を設定し、該当のモジュールに対する更新または追加を実行する。
【0055】
一例として、更新または追加しようとするイベントの呼び出し要求がクライアントから受信された場合、モジュールアップデート部440は、呼び出し要求を受信した後、呼び出されたイベントに対する処理をいったん待機させてよい。例えば、呼び出し要求されたイベントに該当するイベントモジュールの更新または追加が完了するまで、処理を待機させてよい。この後、モジュールアップデート部440は、更新または追加しようとするイベントモジュールに該当するプログラムパッケージをモジュールデータベースに格納する。これにより、追加または更新のためにモジュールデータベースに格納されたプログラムパッケージに該当するイベントモジュールの更新または追加のためにメモリに該当のプログラムパッケージがロードされてよく、ロードされたプログラムパッケージの分析によって得られたクラス、関数などを基盤として該当のプログラムパッケージ(すなわち、イベントモジュール)と関連して構造化された情報がアップデートされる。例えば、既存に構造化された特定のイベントに該当するプログラムパッケージのクラスおよび関数が、得られたクラス、関数を示すようにアップデートされる。
【0056】
このように、アップデートが終了すると、呼び出しに設定されたロック(Lock)は解除される。ここで、イベントモジュールを更新または追加するための詳しい動作については、
図7を参照しながら後述する。
【0057】
図5は、本発明の一実施形態における、各プログラムパッケージを対象に分析された情報をイベント別に構造化したデータ構造図の例示図である。
【0058】
図5では、ゲームサービスを提供する場合に、ショップイベントと関連するプログラムパッケージ(ショップイベントパッケージ(package))510と出席イベントと関連するプログラムパッケージ(出席イベントパッケージ(package))520がそれぞれイベントモジュールとしてモジュール化された場合、該当のプログラムパッケージを分析してデータ構造化を実行する場合について例示して説明する。
図5のデータ構造図は、実施形態に過ぎず、多様な形態でデータ構造化が実行される。
図5において、モジュールローダ530は
図4の分析部420に該当してもよいし、モジュールプール(pool)540は
図4の構造化部430に該当してもよい。
【0059】
図5の出席イベントパッケージ520を参照すると、出席イベントと関連する機能を実現するための関数(OnJoinRoom、OnLeaveRoom)は、事前に定義されたノーテーション(@ModuleInterface)と関連させてプログラムパッケージ内に定義される。このように、ノーテーションが定義された出席イベントパッケージに該当するDLLまたはJARファイルが、出席イベントに該当するイベントモジュールとしてモジュール化される。
【0060】
モジュールローダ530は、各プログラムパッケージを対象に、パッケージ内にノーテーション(例えば、@ModuleInterface)によって定義された関数(例えば、イベント関数)をロード(loading)する。関数をロードするとき、モジュールローダ530は、リフレクション(reflection)を利用してクラス、関数、および関数のパラメータを読み取ってよい。
【0061】
これにより、モジュールプール540は、迅速な検索のために、ロードされた情報(すなわち、プログラムパッケージ別のクラス、関数、関数のパラメータなど)を、ハッシュ関数を利用して構造化する。このとき、該当のイベントを実現させるためのイベント関数を基準としてイベント別に構造化が実行される。例えば、イベント関数(OnJoinRoom)の場合は、ショップイベント、出席イベント、保管トレイイベントを実現させるために共用されることが可能であるため、各イベント別のプログラムパッケージにノーテーションによって定義される。これにより、OnJoinRoomを基準として該当のイベントであるショップイベント、出席イベント、保管トレイイベントが仮想のリンク接続されるように構造化が実行される。すなわち、特定のイベントのために該当のイベントを提供する仮想空間に参入する動作は、ショップイベント、出席イベント、保管トレイイベントで共通され、該当のイベントで提示するアクションを実行した後に仮想空間から退出する動作は、ショップイベント、出席イベント、保管トレイイベントで共通されるため、OnLeaveRoomを基準に、該当するイベントであるショップイベント、出席イベント、保管トレイイベントが仮想のリンク接続されるように構造化される。
【0062】
図6は、本発明の一実施形態における、データ構造化後にクライアントから要求されたイベントに対する応答を提供する動作を示したフローチャートである。
【0063】
図6の各段階610および620は、
図4の構造化部430によって実行される。
【0064】
複数のイベントを実現させるために複数のイベントそれぞれに該当するプログラムパッケージがイベントモジュールとしてモジュール化され、イベントモジュール別に(すなわち、プログラムパッケージ別に)クラス、関数、および関数のパラメータなどが構造化された後、クライアントから特定のイベントに対する呼び出し要求が発生することがある。例えば、出席イベントが提供する連続出席による報酬を受け取るために、クライアントで出席イベントを提供する仮想空間(例えば、出席イベントポップアップウィンドウ、ロビー画面で出席イベント項目クリックなど)に参入するアクションが発生することにより、サーバであるイベント基盤パッケージモジュール呼び出しシステム200は、出席イベントに対する呼び出し要求を、クライアントで駆動するアプリケーションまたはウェブブラウザを通じて受信する。
【0065】
段階610で、構造化部430は、呼び出し要求されたイベントを確認(すなわち、イベントの識別子情報に基づいて呼び出し要求されたイベントを確認)し、確認されたイベントに該当するクラスおよび関数をモジュールプールから検索する。この後、構造化部430は、検索されたクラス(例えば、出席イベントと関連するプログラムパッケージのクラス)をインスタンス(instance)化して、該当の関数(すなわち、検索されたクラスの関数)を実行させてよい。このとき、一度インスタンス化されたクラスは、直ぐに削除されるのではなく、次の呼び出しで再利用できるように維持される。
【0066】
一例として、構造化部430は、クライアント1で出席イベントに対する呼び出し要求が発生した場合、モジュールプールから検索された出席イベントに該当するクラスを検索してインスタンス化する。このとき、クライアント1と関連して生成されたインスタンスの識別子情報は、クライアント1の識別子情報とマッチングして格納される。この後、クライアント1が出席イベントと関連して連続出席による報酬を受け取り、出席イベントに該当する仮想空間から退出した場合、クライアント1と関連して生成されたインスタンスは、削除されずに再利用される。例えば、クライアント2で出席イベントに対する呼び出し要求が発生した場合、クライアント1のときに生成されたインスタンスが再利用される。このように再利用される場合、インスタンスの識別子情報は、クライアント1の識別子情報からクライアント2の識別子情報に修正される。ここで、インスタンスは、サーバが該当のインスタンスの削除を要求するまで除去されずに再利用される。すなわち、インスタンスの削除が要求されたときに除去される。
【0067】
他の例として、構造化部430は、出席イベントに対する呼び出しが発生してOnJoinRoom関数の実行が要求された場合、モジュールプールから検索されたOnJoinRoomに該当するショップイベント、出席イベント、および保管トレイイベントと関連してクラス(class)をインスタンス化してOnJoinRoom関数を実行する。すなわち、クライアントから、出席イベントの他にショップイベントまたは保管トレイイベントに対する呼び出しが要求された場合、生成されたクラスのインスタンスが、呼び出し要求された保管トレイイベント、ショップイベントに対する応答を提供するために再利用される。
【0068】
段階620で、構造化部430は、クラスおよび関数の実行結果を、呼び出し要求された特定のイベントに対する応答として該当のクライアントに伝達する。このとき、プログラムパッケージ(すなわち、イベントモジュール)のイベント関数を実行した実行結果として複数の応答が存在する場合、複数の応答を集めた1つの単一応答メッセージがクライアントに伝達される。
【0069】
図7は、本発明の一実施形態における、イベントモジュールおよびモジュール属性を更新または追加する動作を説明するための概念図である。
【0070】
図7で、モジュールリポジトリ740は、モジュールデータベースに該当し、モジュール属性リポジトリ750は、属性データベースに該当する。
図7の動作は、
図1のプロセッサ122によって実行される。例えば、プロセッサ122のモジュールアップデート部440によって実行される。
【0071】
サーバ(すなわち、イベント基盤パッケージモジュール呼び出しシステム)、はモジュール管理ツール730を通じてモジュール更新要求710を受信する。例えば、サーバの管理者などからモジュール更新要求710のための表示情報(ボタン、アイコンなど)が選択されてモジュール更新要求710が受信される。
【0072】
このようにモジュール更新要求が受信されると、プロセッサ122は、モジュールデータベースであるモジュールリポジトリ740に、更新または追加要求されたモジュールに該当するプログラムパッケージを格納する。この後、プロセッサ122は、モジュールプール760を対象に、更新または追加要求されたイベントモジュールの更新または追加を要求する。このとき、モジュールプール760で格納されたプログラムパッケージに該当するイベントモジュールを更新または追加する前に、プロセッサ122は、モジュールプール760を対象に更新または追加が終了するまで、該当のイベントと関連するイベントモジュールの呼び出しに対するロック(Lock)を設定する。
【0073】
例えば、出席イベントと関連するプログラムパッケージが修正されて該当のイベントモジュールを更新しようとする場合、修正されたプログラムパッケージがモジュールデータベースであるモジュールリポジトリ740に格納される。このとき、モジュールプールが更新される前にクライアントから出席イベントに対する呼び出し要求が発生した場合、プロセッサ122は、該当のイベントの呼び出し要求を受信した後から更新が終了するまで、一定時間に渡って該当のイベント処理を待機させてよい。すなわち、出席イベントと関連するサービスへのアクセス自体を遮断するのではなく、極めて短い時間で更新がなされるため、出席イベントのための仮想空間へのクライアントアクセスを許容しながら応答をしばらく待機させてよい。このために、プロセッサ122は、クライアントからの呼び出し要求は受信するが、該当のイベントと関連するイベントモジュールの呼び出しに対してはロック(Lock)を設定する。この後、モジュールプールで出席イベント関連の更新が終了すれば、プロセッサ122は、ロックが設定されたイベントモジュールの呼び出しに対するロックを解除(Unlock)する。
【0074】
例えば、ロック(Lock)が設定された後、プロセッサ122は、モジュールリポジトリ740に格納された、更新要求された出席イベントに該当するプログラムパッケージをメモリにロードする。この後、リフレクション(reflection)を利用してロードされたプログラムパッケージを分析してよく、分析によって得られたクラス、関数、関数のパラメータなどに基づき、モジュールプール750で既に構造化された既存の出席イベント関連クラス、関数、関数のパラメータを更新する。これにより、更新要求された出席イベントと関連するイベントモジュールの更新が終了してよく、更新の終了に伴い、プロセッサ122は、出席イベントと関連するイベントモジュールの呼び出しに対するロック(Lock)を解除(Unlock)する。このように、イベントモジュールを追加または更新しようとする場合、サーバをシャットダウン(shutdown)させる必要なく、無停止状態でモジュール配布を行うことができる。
【0075】
イベントモジュールの更新と同じようにイベントモジュールの属性(ConfigurationItems)が更新されてよく、イベントモジュールの属性更新時にも、サーバをショットダウン(shutdown)させる必要なく、無停止状態で更新された属性ファイルの配布を行うことができる。
【0076】
例えば、プロセッサ122は、モジュール管理ツール730を通じてモジュールの属性更新要求を受信する(720)。これにより、属性データベースであるモジュール属性リポジトリ750に該当のプログラムパッケージが格納されてよく、プロセッサ122は、モジュールプール760を対象に、イベントモジュールの更新を実行するために該当のイベントモジュールに対する呼び出しにロック(Lock)を設定する。この後、要求されたイベントモジュールの属性更新が終了すれば、ロックが解除(Unlock)される。
【0077】
このように、イベント処理をモジュールプールおよびモジュールローダを基盤として実行することにより、既存のスクリプト基盤のイベント処理方式とは異なり、スクリプトファイルをDB(すなわち、リポジトリ(repository))に格納した後にサーバに信号(signal)を送信してリロード(reload)するのではなく、サーバがモジュールプールから該当のイベントを検索して直ぐに関数を実行することができる。
【0078】
図8は、本発明の一実施形態における、イベントモジュールを基盤として単一応答メッセージを提供する動作を示したフローチャートであり、
図9は、本発明の他の実施形態における、プロセッサの内部構成を示したブロック図である。
【0079】
図9において、プロセッサ900は、
図2のプロセッサ122に該当してよく、
図4のプロセッサ400に含まれたモジュールアップデート部440の代わりに、情報受信部940およびメッセージ生成部950が含まれてよい。
【0080】
図9によると、プロセッサ900、122は、モジュール化部910、分析部920、構造化部930、情報受信部940、およびメッセージ生成部950を含んでいる。モジュール化部910、分析部920、構造化部930の動作は、上述した
図4のモジュール化部910、分析部920、構造化部930と同じであるため、重複する説明は省略する。すなわち、
図9において、モジュールを基盤としてイベントを処理する前処理過程(モジュール化、リフレクション基盤分析による構造化)は、
図3および
図4を参照しながら説明した前処理過程と同じであるため、
図9では、前処理過程の後にクライアントからイベント呼び出しが要求された場合に、該当のイベントに対する応答をクライアントに提供する場合の処理について説明する。これにより、
図8の段階810の前に前処理のための
図3の各段階が実行されてよく、
図8の各段階810~830は、プロセッサ122、400によって実行される。
【0081】
段階810で、情報受信部940は、クライアントから特定のイベントの呼び出し要求を受信する。例えば、情報受信部940は、クライアントにインストールおよび駆動されたアプリケーションを通じて出席イベントの呼び出し要求を受信する。
【0082】
段階820で、メッセージ生成部950は、構造化された各プログラムパッケージのクラスおよび関数のうち、呼び出しが要求された特定のイベントに該当するイベントモジュールと関連するクラスおよび関数に基づいて発生した複数のメッセージを集めて1つの単一応答メッセージを生成する。
【0083】
段階830で、生成された単一応答メッセージがクライアントに提供される。
【0084】
一例として、モジュールプールを対象に出席イベントに該当するクラスおよび関数が検索されてよく、メッセージ生成部950は、検索されたクラスおよび関数を実行することによって実行結果として得られる応答メッセージを集めて1つの単一応答メッセージを生成する。ここで、複数の応答メッセージは、関数を実行した結果であって、同時に得られないこともあるが、同時に得られる場合もあり、時間差で得られるメッセージが存在する場合もある。これにより、メッセージ生成部950は、クライアントから呼び出し要求された出席イベントに対する応答として、応答メッセージをそのつど提供するのではなく、1つに集めて構造化してからクライアントに提供する。ここで、単一応答メッセージを生成する動作は、
図10を参照しながら詳しく説明する。
【0085】
図10は、本発明の一実施形態における、単一応答メッセージを生成する動作を説明するために提供される概念図であり、
図11は、本発明の一実施形態における、単一応答メッセージの構造を示した図である。
【0086】
図10では、サーバとクライアント間のメッセージングのラウンドトリップ(Roundtrip)を最小化して性能的効果を高めるために、複数の応答を集めて1つ応答として処理する場合を例示して説明するが、これは実施形態に過ぎず、イベントモジュールそれぞれからクライアントにメッセージが直接送信されてもよい。
【0087】
図10の1000を参照すると、クライアントからイベント1に対する呼び出しが要求されると、プロセッサ122、900は、該当のイベントと関連するイベントモジュールを呼び出し、モジュールプールから検索されたクラスおよび関数を実行することによって発生する複数の送信するメッセージ1010、1020を集めて単一応答メッセージ1030を生成する。この後、生成された単一応答メッセージ1030をクライアントに提供する。すなわち、複数の送信するメッセージ(例えば、
図10の8件の応答メッセージ)それぞれが発生するたびにクライアントに送信するのではなく、8件の応答メッセージをバッファなどに臨時保管しておいてから1つの応答(すなわち、単一応答メッセージ)として生成してクライアントに提供する。このとき、すべてのイベントモジュールの呼び出しが終了した後に、クライアントに送信される複数のメッセージが集められて単一応答メッセージが生成される。
【0088】
一例として、プロセッサ(例えば、メッセージ生成部)は、特定のイベント(例えば、イベント1)と関連するイベントモジュール(イベントモジュールA、B)を呼び出して該当のクラスおよび関数を実行し、実行結果として提供される複数の応答メッセージ1010、1020を集めて1つの単一応答メッセージを生成する。このとき、メッセージは、場合によっては、順序のあるメッセージ(すなわち、順序と関係のあるメッセージ(Sequenced Message))を含むこともあるし、順序には関係のないメッセージ(すなわち、順序とは無関係のメッセージ(Unified Message))を含むこともある。これにより、プロセッサ(例えば、メッセージ生成部)は、
図11に示すように、順序に関係のあるメッセージ1120と順序とは無関係なメッセージ1110とを区分して単一応答メッセージ1100を生成する。ここで、順序に関係のあるメッセージ1120とは、クライアントから呼び出しが要求された特定のイベントに該当する応答を提供するとき、提供順序があると指定されたメッセージ(すなわち、応答メッセージ)を示す。
【0089】
例えば、特定のイベントと関連し、実行結果としてウェルカムメッセージ、報酬メッセージ、メール確認メッセージなどが単一応答メッセージを生成するために集められたとする。このとき、認証されたクライアントと関連し(すなわち、ユーザがログインした後)、ウェルカムメッセージ、報酬メッセージ、メール確認メッセージが順にクライアントのディスプレイに表示されるものと予め指定された場合、順序が指定されたメッセージは、それぞれ優先順位情報を該当のメッセージに関連させて単一応答メッセージ内で構成される。例えば、ウェルカムメッセージと関連させて優先順位1を示す情報が、報酬メッセージと関連させて優先順位2を示す情報が、メール確認メッセージと関連させて優先順位3を示す情報が共に単一応答メッセージ内に含まれてよい。このとき、順序とは無関係なメッセージが存在する場合、単一応答メッセージ内には、順序とは無関係なメッセージが共に含まれてよい。
【0090】
このように、クライアントから呼び出し要求されたイベントと関連してサーバが単一応答メッセージを提供することにより、クライアントは、構造化のためのすべてのメッセージが受信されるまで待機する必要なく、構造化された形態の単一応答メッセージを受信することができるため、クライアント端ではイベントに対する応答を一度に処理することができる。
【0091】
図10の1050を参照すると、特定のイベントと関連して処理されるイベントモジュール(すなわち、プログラムパッケージ)の関数を実行しながら、該当の関数を共有する他のイベントモジュール(すなわち、他のプログラムパッケージ)が存在することがある。これにより、プロセッサ122、900は、イベントモジュールを処理しながら内部循環イベントを通じて他のイベントモジュールの関数を再利用することにより、モジュール間の重複コードを防ぐことができる。
【0092】
一例として、特定のイベントと関連するイベントモジュール(例えば、イベントモジュールA、B、C)が複数である場合、プロセッサ122、900は、内部循環イベント1051を通じて複数のイベントモジュールそれぞれを呼び出して該当の関数を実行する。この後、すべてのイベントモジュール(例えば、イベントモジュールA、B、C)と関連する関数の実行が終了すれば、実行結果として複数の応答メッセージが生成される。このとき、プロセッサ122、900は、複数の応答メッセージを集めて単一応答メッセージとして生成してよく、生成された単一応答メッセージをクライアントに提供する。このとき、内部循環イベント1051を通じて他のイベントモジュールを呼び出す場合、同期式または非同期式で他のイベントモジュールが呼び出しされ、該当のイベント関連の関数が実行される。例えば、同期式で処理される場合、サーバの実行コードがブロッキング(blocking)される。すなわち、実行結果に対する応答が発生するまで、次のコードを実行せずに待機する。この後、応答が発生すれば次のコードが実行される。非同期式で処理される場合、サーバの実行コードがノンブロッキング(Non-Blocking)される。例えば、応答が受信されなくても直ぐに次のコードを実行し、次のコードの実行中に応答が発生すれば、発生した応答をクライアントに提供するなどの処理が実行される。
【0093】
上述したシステムまたは装置は、ハードウェア構成要素、ソフトウェア構成要素、またはハードウェア構成要素とソフトウェア構成要素との組み合わせによって実現される。例えば、実施形態で説明された装置および構成要素は、例えば、プロセッサ、コントローラ、ALU(arithmetic logic unit)、デジタル信号プロセッサ、マイクロコンピュータ、FPGA(field programmable gate array)、PLU(programmable logic unit)、マイクロプロセッサ、または命令を実行して応答することができる様々な装置のように、1つ以上の汎用コンピュータまたは特殊目的コンピュータを利用して実現される。処理装置は、オペレーティングシステム(OS)およびOS上で実行される1つ以上のソフトウェアアプリケーションを実行する。また、処理装置は、ソフトウェアの実行に応答し、データにアクセスし、データを格納、操作、処理、および生成してもよい。理解の便宜のために、1つの処理装置が使用されるとして説明される場合もあるが、当業者は、処理装置が複数個の処理要素および/または複数種類の処理要素を含んでもよいことが理解できるであろう。例えば、処理装置は、複数個のプロセッサまたは1つのプロセッサおよび1つのコントローラを含んでよい。また、並列プロセッサのような、他の処理構成も可能である。
【0094】
ソフトウェアは、ネットワークによって接続されたコンピュータシステム上に分散され、分散された状態で格納されても、実行されてもよい。ソフトウェアおよびデータは、1つ以上のコンピュータで読み取り可能な記録媒体に格納される。
【0095】
実施形態に係る方法は、多様なコンピュータ手段によって実行可能なプログラム命令の形態で実現されてコンピュータで読み取り可能な記録媒体に記録されてよい。コンピュータで読み取り可能な記録媒体は、プログラム命令、データファイル、データ構造などを単独でまたは組み合わせて含んでよい。記録媒体に記録されるプログラム命令は、実施形態のために特別に設計されて構成されたものであってもよいし、コンピュータソフトウェア当業者に公知な使用可能なものであってもよい。コンピュータで読み取り可能な記録媒体の例としては、ハードディスク、フロッピー(登録商標)ディスク、および磁気テープのような磁気媒体、CD-ROM、DVDのような光媒体、フロプティカルディスク(floptical disk)のような光磁気媒体、およびROM、RAM、フラッシュメモリなどのようなプログラム命令を格納して実行するように特別に構成されたハードウェア装置が含まれる。プログラム命令の例は、コンパイラによって生成されるもののような機械語コードだけではなく、インタプリタなどを使用してコンピュータによって実行される高級言語コードを含む。
【0096】
以上のように、実施形態を、限定された実施形態と図面に基づいて説明したが、当業者であれば、上述した記載から多様な修正および変形が可能であろう。例えば、説明された技術が、説明された方法とは異なる順序で実行されたり、かつ/あるいは、説明されたシステム、構造、装置、回路などの構成要素が、説明された方法とは異なる形態で接続されたりまたは組み合わされたり、他の構成要素または均等物によって対置されたり置換されたとしても、適切な結果を達成することができる。
【0097】
したがって、異なる実施形態であっても、特許請求の範囲と均等なものであれば、添付される特許請求の範囲に属する。
【符号の説明】
【0098】
200:サーバ
201:クライアント
210:モジュールプール
220:モジュールローダ