(57)【特許請求の範囲】
【請求項１】
アプリケーションの特性を示す特性情報と該アプリケーションのアクセス先データストアとを対応付けて記憶するアプリ特性記憶部と、
呼び出し要求のあったアプリケーションの特性情報が前記アプリ特性記憶部によって記憶されたアプリケーションの特性情報と一致する場合には、該特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するメソッドを呼び出すメソッド呼出部と、
前記メソッド呼出部によって呼び出されたメソッドを実行して前記特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するコントローラ特定部と、
前記コントローラ特定部によって特定されたコントローラから前記特性情報に対応付けられたデータストアにアクセスするように制御するアクセス制御部と
を有することを特徴とするデータストア切替装置。
【請求項２】
前記メソッド呼出部は、呼び出し要求のあったアプリケーションの特性情報が前記アプリ特性記憶部によって記憶されたアプリケーションの特性情報と一致する場合には、該特性情報に対応付けられたデータストアにアクセスするための複数のコントローラのうち、前記呼び出し要求のあったアプリケーションに対応するコントローラクラスと同じクラスのコントローラを特定するメソッドを呼び出すことを特徴とする請求項１に記載のデータストア切替装置。
【請求項３】
前記アプリ特性記憶部は、特性情報として、パッケージ名、クラス名、メソッド名、引数の型および戻り値の型を記憶することを特徴とする請求項１または２に記載のデータストア切替装置。
【請求項４】
前記アプリ特性記憶部は、アクセス先データストアとして、参照用リレーションデータベースまたはキーバリューストアを記憶することを特徴とする請求項１〜３のいずれか一つに記載のデータストア切替装置。
【請求項５】
アプリケーションの特性を示す特性情報と該アプリケーションのアクセス先データストアとを対応付けてアプリ特性記憶部に記憶する記憶ステップと、
呼び出し要求のあったアプリケーションの特性情報が前記アプリ特性記憶部によって記憶されたアプリケーションの特性情報と一致する場合には、該特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するメソッドを呼び出すメソッド呼出ステップと、
前記メソッド呼出ステップによって呼び出されたメソッドを実行して前記特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するコントローラ特定ステップと、
前記コントローラ特定ステップによって特定されたコントローラから前記特性情報に対応付けられたデータストアにアクセスするように制御するアクセス制御ステップと
を含んだことを特徴とするデータストア切替方法。
【請求項６】
アプリケーションの特性を示す特性情報と該アプリケーションのアクセス先データストアとを対応付けてアプリ特性記憶部に記憶する記憶手順と、
呼び出し要求のあったアプリケーションの特性情報が前記アプリ特性記憶部によって記憶されたアプリケーションの特性情報と一致する場合には、該特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するメソッドを呼び出すメソッド呼出手順と、
前記メソッド呼出手順によって呼び出されたメソッドを実行して前記特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するコントローラ特定手順と、
前記コントローラ特定手順によって特定されたコントローラから前記特性情報に対応付けられたデータストアにアクセスするように制御するアクセス制御手順と
をコンピュータに実行させることを特徴とするデータストア切替プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データストア切替装置、データストア切替方法およびデータストア切替プログラムに関する。
【背景技術】
【０００２】
近年、Ｗｅｂアプリケーションのデータストアとして、複数の情報が相互に関連付けられたレコードを表形式で管理するＲＤＢ（Ｒｅｌａｔｉｏｎａｌ  ＤａｔａＢａｓｅ）が利用されている。このようなＲＤＢでは、ＳＱＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）によるアクセスの統一、トランザクション機能、バックアップ手法の確立などにより安全性の向上が図られている。
【０００３】
また、Ｗｅｂアプリケーションのデータストアとして、ＳＱＬやトランザクション機能がＲＤＢより劣るが、ＲＤＢよりも大規模な分散が可能なＫＶＳ（Ｋｅｙ-Ｖａｌｕｅ  Ｓｔｏｒｅ)データストアが知られている。
【０００４】
Ｗｅｂアプリケーション等のデータを内部に蓄積するシステムでは、アプリケーションの特性に応じて、複数種類のデータストアのうちのいずれかのデータストアにデータを保存することが考えられる。例えば、データの参照しか行わないアプリケーションの場合には、ＲＤＢにデータを保存し、トランザクションや高機能なＳＱＬを必要としないアプリケーションの場合には、ＫＶＳにデータを保存する。
【０００５】
また、保存するデータの一部がトランザクション等ＲＤＢ特有の機能を使うために、格納するデータを分割し、一部のデータをＲＤＢに残したまま一部のデータをＫＶＳに保存する場合が考えられる。このような場合には、データストアを切り替えるためのロジックをプログラム中に埋め込んでアプリケーションのロジックを変更することで、一部のデータをＲＤＢに保存し、一部のデータをＫＶＳに保存するようにする。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００２−１３２５６８号公報
【特許文献２】特開２００６−４３２８号公報
【特許文献３】特開平９−１８１７２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述したデータストアを切り替えるためのロジックをプログラム中に埋め込んでアプリケーションのロジックを変更する手法では、アプリケーションのロジックを変更するための開発コストがかかるとともに、変更後のアプリケーションのテストにコストがかかるという課題があった。
【０００８】
一つの側面では、アプリケーションのロジックを変更することなく早期かつ安価にデータストアを変更することを目的とする。
【課題を解決するための手段】
【０００９】
第一の案では、データストア切替装置は、アプリケーションの特性を示す特性情報と該アプリケーションのアクセス先データストアとを対応付けて記憶するアプリ特性記憶部を有する。そして、データストア切替装置は、呼び出し要求のあったアプリケーションの特性情報がアプリ特性記憶部によって記憶されたアプリケーションの特性情報と一致する場合には、該特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するメソッドを呼び出す。続いて、データストア切替装置は、呼び出されたメソッドを実行して特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定する。その後、データストア切替装置は、特定されたコントローラから特性情報に対応付けられたデータストアにアクセスするように制御する。
【発明の効果】
【００１０】
アプリケーションのロジックを変更することなく早期かつ安価にデータストアを変更することができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施例１に係るデータストア切替装置の構成を示すブロック図である。
【図２】図２は、実施例２に係るＡＰサーバを含むシステムの全体構成を示すブロック図である。
【図３】図３は、実施例２に係るＡＰサーバの構成を示すブロック図である。
【図４】図４は、データストア定義ファイルの一例を示す図である。
【図５】図５は、アプリ特性ファイルおよびアスペクト定義情報の例を説明する図である。
【図６】図６は、コンテキスト切替アドバイスの実装例を説明する図である。
【図７】図７は、コンテキスト管理定義ファイルの例を説明する図である。
【図８】図８は、参照用ＲＤＢ向けＡｐｐｌｉｃａｔｉｏｎＣｏｎｔｅｘｔ定義ファイルを説明する図である。
【図９】図９は、コンテキスト管理機構が管理するインスタンスを説明するための図である。
【図１０】図１０は、コントローラソースの例を説明する図である。
【図１１】図１１は、実施例２に係るＡＰサーバの処理手順を説明するためのフローチャートである。
【図１２】図１２は、実施例２に係るＡＰサーバの処理手順を説明するためのフローチャートである。
【発明を実施するための形態】
【００１２】
以下に、本願の開示するデータストア切替装置、データストア切替方法およびデータストア切替プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００１３】
まず、図１を用いて、実施例１に係るデータストア切替装置の構成について説明する。図１は、実施例１に係るデータストア切替装置の構成を示すブロック図である。
【００１４】
実施例１のデータストア切替装置１は、アプリ特性記憶部２、メソッド呼出部３、コントローラ特定部４、アクセス制御部５を有し、複数種類のデータストア６、７と接続されている。
【００１５】
アプリ特性記憶部２は、アプリケーションの特性を示す特性情報とアプリケーションのアクセス先データストアとを対応付けて記憶する。メソッド呼出部３は、呼び出し要求のあったアプリケーションの特性情報がアプリ特性記憶部２によって記憶されたアプリケーションの特性情報と一致する場合には、特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するメソッドを呼び出す。
【００１６】
コントローラ特定部４は、メソッド呼出部３によって呼び出されたメソッドを実行して特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定する。アクセス制御部５は、コントローラ特定部４によって特定されたコントローラから特性情報に対応付けられたデータストアにアクセスするように制御する。
【００１７】
このように、データストア切替装置１は、アプリケーションの特性に基づいて、アクセス先のデータストアを自動で変更する結果、アプリケーションのロジックを変更することなく早期かつ安価にデータストアを変更することができる。
【実施例２】
【００１８】
以下の実施例では、実施例２に係るＡＰサーバの構成および処理の流れを順に説明し、最後に実施例２による効果を説明する。なお、以下の実施例２では、更新用ＲＤＢサーバ、参照用ＲＤＢサーバおよびＫＶＳサーバがデータストアとしてＡＰサーバに接続されている例を説明する。
【００１９】
［ＡＰサーバの構成］
まず、図２を用いて、ＡＰサーバを含むシステム全体の構成を説明する。図２は、実施例２に係るＡＰサーバを含むシステムの全体構成を示すブロック図である。図２に示すように、このデータベースシステムは、ＡＰ（Ａｐｐｌｉｃａｔｉｏｎ）サーバ１０、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）２０、ロードバランサ３０、ＲＤＢ（Ｒｅｌａｔｉｏｎａｌ  ＤａｔａＢａｓｅ）サーバ４０、ＫＶＳ（Ｋｅｙ−Ｖａｌｕｅ  Ｓｔｏｒｅ）サーバ５０を有する。
【００２０】
ＡＰサーバ１０は、ＰＣ２０から送信されたＨＴＴＰリクエストに応じた処理を行う。具体的には、ＡＰサーバ１０は、ＰＣ２０からＨＴＴＰリクエストを受信し、ＨＴＴＰリクエストに応じて、データの格納またはデータの参照を行うために、ＲＤＢサーバ４０やＫＶＳサーバ５０のデータストアに対してアクセスする。
【００２１】
ＡＰサーバ１０は、開発者によって作成されたプログラムであるアプリケーション１１、Ｗｅｂアプリケーションを容易にするためのＷｅｂフレームワーク１２と、データストアへの接続を一元管理するＯ／Ｒマッパ１３を有する。
【００２２】
また、ＡＰサーバ１０は、Ｗｅｂコンテナは、ＨＴＴＰのリクエストに応じて対応するアプリケーションを呼び出すとともに、セッション情報等のメモリにアクセスする方法を提供するミドルウェアであるＷｅｂコンテナ１４と、各種ファイルを記憶するファイルシステム１５とを有する。なお、ＡＰサーバ１０の詳しい説明については、図３を用いて後に詳述する。
【００２３】
ＰＣ２０は、キーボードやマウス等の入力手段２２と、ディスプレイ等の出力手段２３を有し、インターネット等のネットワークを介してロードバランサ３０に接続される。また、ＰＣ２０は、ブラウザ２１のアプリケーションを通じてユーザとインタラクションを行い、ロードバランサ３０を介してＨＴＴＰリクエストをＡＰサーバ１０に送信する。ロードバランサ３０は、ＰＣ２０からのＨＴＴＰリクエストをＡＰサーバ１０に中継する。
【００２４】
ＲＤＢサーバ４０は、複数の情報が相互に関連付けられたレコードを表形式で管理するデータストアであり、更新用ＲＤＢおよび参照用ＲＤＢを有する。ＲＤＢサーバ４０では、更新用ＲＤＢと参照用ＲＤＢとで分割されており、更新用ＲＤＢに格納されたデータは定期的に参照用ＲＤＢにコピーされる。ＫＶＳサーバ５０は、ＳＱＬやトランザクション機能がＲＤＢサーバ４０より劣るが、ＲＤＢサーバ４０よりも大規模な分散が可能なデータストアである。
【００２５】
ここで、図３を用いてＡＰサーバ１０の詳しい構成について説明する。図３は、実施例２に係るＡＰサーバの構成を示すブロック図である。ＡＰサーバ１０は、アプリケーション１１、Ｗｅｂフレームワーク１２、Ｏ／Ｒマッパフレームワーク１３、Ｗｅｂコンテナ１４、ファイルシステム１５を有する。
【００２６】
アプリケーション１１は、開発者によって作成されたプログラムであって、ＭＶＣ（Ｍｏｄｅｌ  Ｖｉｅｗ  Ｃｏｎｔｒｏｌｌｅｒ）アーキテクチャに則って開発することが、Ｗｅｂフレームワーク１２により指定されている。ＭＶＣアーキテクチャは、アプリケーションの機能ごとに、ビジネスロジックを記述するためのコントローラ（Ｃ）、画面のデザイン等のプレゼンテーション層を扱うためのビュー（Ｖ）、データストアに保存する形式を決定するためのエンティティから構成され、それぞれ複数のファイル、クラスから成る。
【００２７】
アプリケーション１１は、ＪＳＰ（Ｊａｖａ（登録商標）Ｓｅｒｖｅｒ  Ｐａｇｅｓ）ファイル１１ａ、コントローラクラス１１ｂ、エンティティクラス１１ｃを有する。ＪＳＰファイル１１ａは、ＨＴＭＬの中にＪａｖａの計算結果やコードを埋め込んで実行させるための仕組みであるＪＳＰを記憶する。コントローラクラス１１ｂは、Ｗｅｂアプリケーションの動作を制御するためのクラスであり、ＨＴＴＰリクエストに対応して呼び出される。エンティティクラス１１ｃは、データストアに保存する形式を決定するためのクラスである。
【００２８】
ファイルシステム１５は、データストア定義ファイル１５ａ、アプリ特性定義ファイル１５ｂ、コンテキスト構成定義ファイル１５ｃを記憶する。データストア定義ファイル１５ａは、データストアに接続するためのＵＲＬやアクセスするためのＩＤ、パスワードを管理する。具体的には、データストア定義ファイル１５ａは、図４に示すように、ファイル内にはＪＤＢＣ等のデータストアアクセス手段で接続する際の「ドライバ」、「ＵＲＬ」、「ユーザ名」、「パスワード」などが定義されている。また、ファイル名には、各データストアを一意に決定するためのユニーク名が付与されている。
【００２９】
アプリ特性定義ファイル１５ｂは、アプリケーションの特性を示す特性情報とアプリケーションのアクセス先データストアとを対応付けて記憶しており、コントローラの各メソッド（関数）がどのデータストアにアクセスするかを記述する。具体的には、アプリ特性定義ファイル１５ｂは、図５上の表に示すように、ＣＳＶ等の表形式でユーザによって入力された「パッケージ名及びクラス名」、「メソッド名」、「使用するデータストア」をそれぞれ対応付けて記憶する。
【００３０】
このアプリ特性定義ファイル１５ｂは、アプリケーションの実行前に図５の下のようなＸＭＬに変換される。このＸＭＬは、Ｓｐｒｉｎｇフレームワークで使用されるアスペクトの定義ファイルである。なお、アプリ特性定義ファイルを作成せずに、直接ＸＭＬ形式のアスペクト定義ファイルを用意するようにしてもよい。
【００３１】
コンテキスト定義ファイル１５ｃは、コンテキスト管理機構１２ｄが複数のアプリケーションコンテキストを管理するための管理情報を定義する。具体的には、コンテキスト定義ファイル１５ｃには、アプリケーションコンテキスト定義のリストが記述されている。これらの定義ファイル群は、実行時にコンテキスト管理機構１２ｄがどのようなインスタンス（オブジェクト）を管理するかを定義する。
【００３２】
Ｗｅｂフレームワーク１２は、ＨＴＴＰのリクエストを実際のＪａｖａクラスファイルであるコントローラクラス１１ｂにマッピングするとともに、各コントローラクラス１１ｂのインスタンスの作成や削除等のライフサイクルを管理する。Ｗｅｂフレームワーク１２は、ＤＩ機構１２ａ、ＡＯＰ機構１２ｂ、複数のアプリケーションコンテキスト１２ｃ、コンテキスト管理機構１２ｄおよびコンテキスト切替アドバイス１２ｅを有する。
【００３３】
ＤＩ機構１２ａは、インスタンスの生成やインスタンスの削除等のライフサイクル管理を行い、別途用意される定義ファイル等に基づき、インスタンスを生成する。ＡＯＰ機構１２ｂは、特定のメソッドの呼び出し等の条件に合わせて、オリジナルのプログラムとは異なるプログラムの挿入、または、ロジックそのものの変更を行う。
【００３４】
具体的には、ＡＯＰ機構１２ｂは、呼び出し要求のあったアプリケーションの特性情報がアスペクト定義によって定義されたアプリケーションの特性情報と一致する場合には、特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するメソッドであるアドバイスを呼び出す。なお、ＡＯＰで別のプログラムを挿入可能な場所を「ジョインポイント」、変更するための条件を「ポイントカット」、変更後のプログラムを「アドバイス」と呼ぶ。
【００３５】
複数のアプリケーションコンテキスト１２ｃは、アプリケーションが動作するための各種情報を保持し、アプリケーションが使用する各コンポーネントの接続を制御できるようになっている。
【００３６】
コンテキスト管理機構１２ｄは、複数のアプリケーションコンテキスト１２ｃを管理する。具体的には、コンテキスト管理機構１２ｄは、更新用ＲＤＢ、参照用ＲＤＢ、ＫＶＳ等、複数種類のデータストアごとに、複数のアプリケーションコンテキスト１２ｃを管理する。
【００３７】
例えば、コンテキスト管理機構１２ｄは、複数の参照用ＲＤＢ用のアプリケーションコンテキストおよびＫＶＳ用のアプリケーションコンテキスト１２ｃを管理する。そして、コンテキスト管理機構１２ｄは、コンテキスト切替アドバイス１２ｅが呼び出しを変更する際に、複数の参照用ＲＤＢ用のアプリケーションコンテキスト１２ｃまたはＫＶＳ用のアプリケーションコンテキスト１２ｃから一つを選択する。
【００３８】
コンテキスト管理機構１２ｄは、管理対象であるアプリケーションコンテキスト１２ｃのリストであるコンテキスト管理定義ファイルを保持する。ここで、図７の例を用いてコンテキスト管理定義ファイルについて説明する。図７は、コンテキスト管理定義ファイルの例を説明する図である。図７に例示するコンテキスト管理定義ファイル１２ｄは、ＷｅｂフレームワークとしてＳｐｒｉｎｇフレームワークを使用した際の記述例である。
【００３９】
図７に示すように、コンテキスト管理定義ファイルは、（１）と（２）の部分に分かれており、（１）に参照用ＲＤＢ向けアプリケーションコンテキスト定義のリストとＫＶＳ用のアプリケーションコンテキスト定義のリストが記述されている。また、コンテキスト管理定義ファイルは、（２）の部分にデフォルトのデータストアとして更新用ＲＤＢ向けアプリケーションコンテキストの定義が記述されている。
【００４０】
例えば、図８に例示するように、参照用ＲＤＢ向けアプリケーションコンテキスト定義ファイルは、アプリケーションコンテキスト定義のリストが記述されている。これらの定義ファイル群は、実行時にコンテキスト管理機構がどのようなインスタンス（オブジェクト）を管理するかを定義するためのものである。
【００４１】
実行時には、インスタンスの構成が図９のようになる。図９は、コンテキスト管理機構が管理するインスタンスを説明するための図である。Ｓｐｒｉｎｇフレームワークは、実行時の最初にこのインスタンスを作成する。このとき、Ｓｐｒｉｎｇフレームワークは、コンテキスト管理機構が所有するエンティティマネージャファクトリのインスタンスを作成する。コントローラが図１０のようなソースコードの場合には、＠Ａｕｔｏｗｉｒｅｄアノテーションが付与されたフィールド（ここではｅｍｆ変数）にそのインスタンスを代入する（図９Ａ参照）。
【００４２】
これにより図９Ａにおけるコントローラ１〜３は、コンテキスト管理機構が持つ更新用ＲＤＢ用のエンティティマネージャファクトリに対して、変数ｅｍｆを通じてアクセスすることができるようになる。
【００４３】
同様に参照ＲＤＢ用コンテキストは、コントローラ１１〜１３のインスタンスを作成し、それぞれのコントローラインスタンスから参照ＲＤＢ用エンティティマネージャファクトリにアクセスできるようにする。ＫＶＳにおいても同様のことが行われる。
【００４４】
コンテキスト切替アドバイス１２ｅは、ＡＯＰ機構１２ｂにより呼び出され、アプリ特性定義に基づき実行されるアドバイスである。具体的には、コンテキスト切替アドバイス１２ｅは、呼び出し要求のあったアプリケーションの特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するメソッドを保持する。例えば、コンテキスト切替アドバイス１２ｅは、参照ＲＤＢアクセス用のアドバイスメソッド（ｒｄｂＲｅｐｌａｃｅｄＭｅｔｈｏｄ）およびＫＶＳ用のアドバイスメソッド（ｋｖｓＲｅｐｌａｃｅｄＭｅｔｈｏｄ）を保持する。
【００４５】
ここで、Ｗｅｂフレームワーク１２の具体的な処理について説明する。Ｗｅｂフレームワーク１２は、初回起動時において、図５下図のアスペクト定義ファイルを読み取る。そして、Ｗｅｂフレームワーク１２は、ｅｘｐｒｅｓｓｉｏｎで指定されるパッケージ名、クラス名、メソッド名、シグニチャ（引数の型、並びと戻り値の型）が一致する呼び出しがある場合には、ｒｅｆで指定されるアドバイスであるメソッドに呼び出しを変更する。
【００４６】
図５の下図の例では、「（＊  ｃｏｎｔｒｏｌｌｅｒ．ＡｎａｌｙｓｉｓＣｏｎｔｒｏｌｌｅｒ．ｇｒｏｕｐＢｙＢｉｒｔｈＹｅａｒ（．．））”」となっている。つまり、ｅｘｐｒｅｓｓｉｏｎで指定されるパッケージ名及びクラス名が「ｃｏｎｔｒｏｌｌｅｒ．ＡｎａｌｙｓｉｓＣｏｎｔｒｏｌｌｅｒ」であり、メソッド名が「ｇｒｏｕｐＢｙＢｉｒｔｈＹｅａｒ」である。また、「＊」は戻り値があらゆる型で良いことを示すワイルドカード、「．．」は引数の型、並びが何でも良いということを示している。
【００４７】
このため、図５の例では、Ｗｅｂフレームワーク１２は、パッケージ名が「ｃｏｎｔｒｏｌｌｅｒ」、クラス名が「ＡｎａｌｙｓｉｓＣｏｎｔｒｏｌｌｅｒ」、メソッド名が「ｇｒｏｕｐＢｙＢｉｒｔｈＹｅａｒ」である全ての呼び出しを検出する。そして、Ｗｅｂフレームワーク１２は、検出された全ての呼び出しに対して、コンテキスト切替アドバイスである「ｒｄｂＲｅｐｌａｃｅｄＭｅｔｈｏｄ」を呼び出す。このとき、引数として、元々実行しようとしていたクラスのパッケージ名、クラス名、メソッド名、シグニチャの情報を含むジョインポイント情報を付与する。
【００４８】
ここで、図６を用いて、コンテキスト切替アドバイスについて説明する。図６は、コントローラソースの例を説明する図である。Ｗｅｂフレームワーク１２は、初回起動時に、図６の１９行目のｓｅｔＣｏｎｔａｉｎｅｒ（)メソッドを呼び出して、コンテキスト管理機構のインスタンスを変数ｃｏｎｔａｉｎｅｒに格納する。
【００４９】
コンテキスト切替アドバイス１２ｅは、参照ＲＤＢアクセス用及びＫＶＳ用のアドバイスメソッド（それぞれｒｄｂＲｅｐｌａｃｅｄＭｅｔｈｏｄ、ｋｖｓＲｅｐｌａｃｅｄＭｅｔｈｏｄ）を持っている。ｒｄｂＲｅｐｌａｃｅｄＭｅｔｈｏｄは、コンテキスト管理機構１２ｄが持っている参照ＲＤＢコンテキストリストの中から、ラウンドロビンで参照ＲＤＢ用アプリケーションコンテキストを取り出す。
【００５０】
続いて、Ｗｅｂフレームワーク１２は、ジョインポイント情報から、元々実行しようとしていたクラスのパッケージ名、クラス名、メソッド名、シグニチャの情報を取り出す。そして、Ｗｅｂフレームワーク１２は、参照ＲＤＢ用アプリケーションコンテキストが持っているコントローラから同一のパッケージ名、クラス名、メソッド名、シグニチャのメソッドを探し出し、そのメソッドを呼び出す。
【００５１】
また、ＫＶＳの場合も同様に、Ｗｅｂフレームワーク１２は、ＫＶＳコンテキストリストの中からラウンドロビンでＫＶＳ用アプリケーションコンテキストを探し、ＫＶＳ用アプリケーションコンテキストが所有するコントローラを探し出して、元々呼び出そうとしていたメソッドを呼び出す。
【００５２】
ここで、コンテキスト管理機構１２ｄが管理するインスタンスの構成について説明する。図９は、コンテキスト管理機構が管理するインスタンスを説明するための図である。Ｓｐｒｉｎｇフレームワークは、コンテキスト管理機構が所有するエンティティマネージャファクトリのインスタンスを作成する。
【００５３】
コントローラが図１０のようなソースコードの場合に、Ｗｅｂフレームワークは＠Ａｕｔｏｗｉｒｅｄアノテーションが付与されたフィールド（ここではｅｍｆ変数)にそのインスタンスを代入する（図９Ａ）。これにより図９Ａにおけるコントローラ１〜３は、コンテキスト管理機構が持つ更新用ＲＤＢ用のエンティティマネージャファクトリに対して、変数ｅｍｆを通じてアクセスすることができるようになる。
【００５４】
同様に参照ＲＤＢ用コンテキストは、コントローラ１１〜１３のインスタンスを作成し、それぞれのコントローラインスタンスから参照ＲＤＢ用エンティティマネージャファクトリにアクセスできるようにする。ＫＶＳにおいても同様のことが行われる。
【００５５】
つまり、コンテキスト切替アドバイス１２ｅは、上述したようにｒｄｂＲｅｐｌａｃｅｄＭｅｔｈｏｄを呼び出す。そして、ラウンドロビンで参照ＲＤＢ用アプリケーションコンテキストを一つ取り出す。そして、そこから元々実行しようとしていたクラスと同じコントローラインスタンスを呼び出す。これにより、図９の例では、コントローラ１で呼び出そうとしていた場合に、コントローラ１１（又は２１）で呼び出されることになる。
【００５６】
コントローラ１と１１は、同一のクラスであるが、所有するＥｎｔｉｔｙＭａｎａｇｅｒＦａｃｔｏｒｙが異なっている。コントローラ１１が所有するＥｎｔｉｔｙＭａｎａｇｅｒＦａｃｔｏｒｙは、参照ＲＤＢ用のものであるため、このＥｎｔｉｔｙＭａｎａｇｅｒＦａｃｔｏｒｙからアクセスすると、データストア定義ファイルを参照しながら実際のＲＤＢのＵＲＬやドライバ等の情報を取り出し、データは参照用ＲＤＢから取得される。
【００５７】
ＫＶＳ利用の場合も同様である。ＫＶＳでは、呼び出すべきアドバイスとしてｋｖｓＲｅｐｌａｃｅｄＭｅｔｈｏｄメソッドが呼び出される。このメソッドもＲＤＢの場合と同様に、ＫＶＳコンテキストリストの中からラウンドロビンで使用するＫＶＳＡｐｐｌｉｃａｔｉｏｎＣｏｎｔｅｘｔを一つ選択し、そのコンテキストが所有するコントローラの中から、元々のアプリが実行しようとしていたメソッドと同じ名称のものを選択して実行する。これにより、コントローラが所有するＥｎｔｉｔｙＭａｎａｇｅｒＦａｃｔｏｒｙがＫＶＳ用のＥｎｔｉｔｙＭａｎａｇｅｒＦａｃｔｏｒｙとなるため、アクセス先のデータストアを更新用ＲＤＢからＫＶＳに変更することができる。このようにして、アプリケーションのコード自体は変更せずに、アクセス先のデータストアを更新用ＲＤＢから参照用ＲＤＢやＫＶＳに変更することが可能となる。
【００５８】
また、更新用ＲＤＢをそのまま使用する場合について説明する。ＡＯＰがメソッドを変換するためのルールが書かれていない場合に、更新用ＲＤＢが使用される。ＡＯＰ機構が実行時にアスペクトを織り込む場合に、図５で示したアスペクト定義に該当するメソッド実行に対するポイントカットが記載されていないため、メソッドの変換が行われず、コンテキスト管理機構が保有するコントローラ１〜３が呼び出される。これらのコントローラは、更新ＲＤＢ用ＥｎｔｉｔｙＭａｎａｇｅｒＦａｃｔｏｒｙのインスタンスがＤＩ機構による注入されている。このため、更新ＲＤＢ用のＥｎｔｉｔｙＭａｎａｇｅｒＦａｃｔｏｒｙが使用され、更新ＲＤＢへのアクセスが可能となる。
【００５９】
Ｏ／Ｒマッパフレームワーク１３は、Ｊａｖａ等オブジェクト指向言語のオブジェクトをリレーショナルデータベースやＫＶＳに対して永続的に保存する。例えば、ＪＳＲで標準化されたＯ／Ｒマッパフレームワークとして、ＪＰＡ（Ｊａｖａ  Ｐｅｒｓｉｓｔｅｎｃｅ  ＡＰＩ)がある。
【００６０】
Ｏ／Ｒマッパフレームワーク１３は、実際のデータストアにアクセスするためのライブラリとしてエンティティマネージャ（ＥｎｔｉｔｙＭａｎａｇｅｒ）１３ｂ、１３ｄを有する。また、Ｏ／Ｒマッパフレームワーク１３は、エンティティマネージャのインスタンスを生成するためのライブラリとしてエンティティマネージャファクトリ（ＥｎｔｉｔｙＭａｎａｇｅｒＦａｃｔｏｒｙ）１３ａ、１３ｃを有する。
【００６１】
エンティティマネージャファクトリ１３ａ、１３ｃおよびエンティティマネージャ１３ｂ、１３ｄは、使用するデータストアごとに用意される。Ｏ／Ｒマッパフレームワーク１３では、使用する複数のデータストアに対して、それぞれ対応するエンティティマネージャファクトリ１３ａ、１３ｃが用意されている。
【００６２】
ＲＤＢ用エンティティマネージャファクトリ１３ａは、ファクトリ（工場）クラスと呼ばれ、ＲＤＢに接続可能なエンティティマネージャオブジェクトを複数個同時に生成する機能を有している。このため、多数のリクエストが同時に受け付けられた場合には、多数のエンティティマネージャが生成、動作することで性能を維持する機構になっている。
【００６３】
ＫＶＳ用エンティティマネージャファクトリ１３ｃも同様に、ＫＶＳに接続可能なエンティティマネージャオブジェクトを複数個同時に生成する機能を有している。このため、多数のリクエストが同時に受け付けられた場合には、多数のエンティティマネージャが生成、動作することで性能を維持する機構になっている。
【００６４】
エンティティマネージャ１３ｂは、ＲＤＢサーバ４０にアクセスするためのライブラリである。また、エンティティマネージャ１３ｄは、ＫＶＳサーバ５０にアクセスするためのライブラリである。
【００６５】
Ｗｅｂコンテナ１４は、ＨＴＴＰのリクエストに応じて対応するアプリケーションを呼び出すと共に、セッション情報等のメモリにアクセスする方法を提供するミドルウェアである。なお、Ｗｅｂコンテナ１４からは、Ｗｅｂフレームワーク１２がアプリケーションとして認識される。
【００６６】
なお、Ｗｅｂコンテナ１４として、例えば、Ｉｎｔｅｒｓｔａｇｅ  Ａｐｐｌｉｃａｔｉｏｎ  ＳｅｒｖｅｒやＡｐａｃｈｅ  Ｔｏｍｃａｔ等の製品、オープンソースプロダクト等を利用することができる。また、ＡＰサーバ１０では、Ｗｅｂコンテナ１４に加え、開発を容易にするためのフレームワーク群として、Ｗｅｂアプリケーションの開発を容易にするためのＷｅｂフレームワーク１２と、データストアへの接続を一元管理するＯ／Ｒマッパフレームワーク１３とが利用される。
【００６７】
［ＡＰサーバによる処理］
次に、図３を用いて、実施例２に係るＡＰサーバ１０による処理を説明する。図１１および図１２は、実施例２に係るＡＰサーバの処理手順を説明するためのフローチャートである。
【００６８】
図１１に示すように、利用者がブラウザ経由でロードバランサ３０にアクセスすると（ステップＳ１０１）、ロードバランサ３０は、負荷の低いＡＰサーバ１０にリクエストを中継する（ステップＳ１０２）。例えば、利用者がブラウザを操作して「ｈｔｔｐ：／／ｆｏｏ．ｃｏｍ／ａｎａｌｙｓｉｓ／ｇｒｏｕｐＢｙＢｉｒｔｈＹｅａｒ」にアクセスすると、ロードバランサ３０がリクエストを受信してＡＰサーバ１０にリクエストを中継する。
【００６９】
そして、ＡＰサーバ１０は、Ｗｅｂコンテナ１４がＷｅｂフレームワーク呼び出しを行う（ステップＳ１０３）。例えば、ＡＰサーバ１０は、ＡＰサーバで動作しているＷｅｂコンテナは、図示しないＷｅｂ定義ファイル（例えば、Ｊａｖａ  Ｓｅｒｖｌｅｔ仕様ではｗｅｂ．ｘｍｌファイル）に基づいて、Ｗｅｂフレームワークを呼び出す。
【００７０】
そして、ＡＰサーバ１０は、Ｗｅｂフレームワーク１２がアプリケーションのコントローラクラスを決定して、実行する（ステップＳ１０４）。具体的には、Ｗｅｂフレームワーク１２は、ＵＲＬに基づき、呼び出すアプリケーションを決定する。例えば、ＵＲＬの最初のパス名がａｎａｌｙｓｉｓ、2番目のパラメータがｇｒｏｕｐＢｙＢｉｒｔｈＹｅａｒなので、Ｓｐｒｉｎｇフレームワークのルールに基づき、コントローラクラス（図１０参照）におけるｇｒｏｕｐＢｙＢｉｒｔｈＹｅａｒメソッドと決定される。このとき、Ｓｐｒｉｎｇフレームワークが実行するクラスは、コンテキスト管理機構１２ｄが管理するデフォルトのコントローラ１〜３の何れかとなる。
【００７１】
続いて、ＡＰサーバ１０は、実行するコントローラクラスに該当するアスペクト定義があるか判定する（ステップＳ１０５）。この結果、ＡＰサーバ１０は、決定されたコントローラクラスにＡＯＰの定義がある場合には（ステップＳ１０５肯定）、アスペクト定義に記述されたメソッドを呼び出す（ステップＳ１０６）。
【００７２】
例えば、ＡＰサーバ１０のＡＯＰ機構１２ｂは、図５下図のアスペクト定義に基づき、メソッドをアドバイスに変換（図５の例では、アドバイスである「ｒｄｂＲｅｐｌａｃｅｄＭｅｔｈｏｄ」メソッドに変換）する。そして、ＡＰサーバ１０のＷｅｂフレームワーク１２は、ｒｄｂＲｅｐｌａｃｅｄＭｅｔｈｏｄメソッドを実行し、引数として、元々実行しようとしていたクラスのパッケージ名、クラス名、メソッド名、シグニチャ（引数や戻り値等）の情報を含むジョインポイント情報を付与する。
【００７３】
その後、ＡＰサーバ１０は、アドバイスに従い、元々のコントローラのメソッドと同一の名称のメソッドをアプリケーションコンテキストから検索して実行する処理（後に図１２を用いて詳述）を行う（ステップＳ１０７）。
【００７４】
また、ＡＰサーバ１０は、実行するコントローラクラスにＡＯＰの定義がない場合には（ステップＳ１０５否定）、コンテキスト管理機構１２ｄが所有するデフォルトのエンティティマネージャファクトリを利用し（ステップＳ１０８）、アプリケーション１１が更新用ＲＤＢにアクセスする（ステップＳ１０９）。
【００７５】
次に、図１２を用いて、アドバイスに従い、元々のコントローラのメソッドと同一の名称のメソッドをアプリケーションコンテキストから検索して実行する処理について詳しく説明する。なお、以下の処理の説明では、図６に例示したコンテキスト切替アドバイスの例を用いて説明する。
【００７６】
図１２に示すように、ＡＰサーバ１０は、Ｗｅｂフレームワーク１２によりアプリ特性定義ファイルから呼び出し先メソッドをｒｄｂＲｅｐｌａｃｅｄＭｅｔｈｏｄに決定した場合には（ステップＳ６０１肯定）、ｒｄｂＲｅｐｌａｃｅｄＭｅｔｈｏｄ（)メソッド（図６の２７行目参照）を呼び出す（ステップＳ６０２）。
【００７７】
そして、ＡＰサーバ１０は、コンテキスト管理機構１２ｄのｇｅｔＡｐｐｌｉｃａｔｉｏｎＣｏｎｔｅｘｔ（）メソッドを実行し、参照ＲＤＢ用コンテキストリスト（図６の２９行目参照）を取得する（ステップＳ６０３）。続いて、ＡＰサーバ１０は、参照ＲＤＢ用コンテキストリストを引数として、ｉｎｖｏｋｅＲｏｕｎｄＲｏｂｉｎ（）メソッド（図６の２９行目参照）を実行する（ステップＳ６０４）。
【００７８】
また、ＡＰサーバ１０は、Ｗｅｂフレームワーク１２によりアプリ特性定義ファイルから呼び出し先メソッドをｋｖｓＲｅｐｌａｃｅｄＭｅｔｈｏｄに決定した場合には（ステップＳ６０１否定）、ｋｖｓＲｅｐｌａｃｅｄＭｅｔｈｏｄ（)メソッド（図６の３９行目参照）を呼び出す（ステップＳ６１３）。
【００７９】
そして、ＡＰサーバ１０は、コンテキスト管理機構１２ｄのｇｅｔＫｖｓＡｐｐｌｉｃａｔｉｏｎＣｏｎｔｅｘｔ（）メソッドを実行し、ＫＶＳ用コンテキストリスト（図６の４１行目参照）を取得する（ステップＳ６１４）。続いて、ＡＰサーバ１０は、ＫＶＳ用コンテキストリストを引数として、ｉｎｖｏｋｅＲｏｕｎｄＲｏｂｉｎ（）メソッド（図６の４１行目参照）を実行する（ステップＳ６１５）。
【００８０】
その後、ＡＰサーバ１０では、ｉｎｖｏｋｅＲｏｕｎｄＲｏｂｉｎ（)メソッドが、引数で与えられたコンテキストリストの中から、ラウンドロビンで１個のアプリケーションコンテキスト（図６の５１〜６４行目参照）を選ぶ（ステップＳ６０５）。そして、選択されたアプリケーションコンテキストを引数としてｉｎｖｏｋｅ（）メソッド（図６の６７行目参照）を呼び出す（ステップＳ６０６）。
【００８１】
そして、ＡＰサーバ１０では、ｉｎｖｏｋｅ（）メソッド（図６の７０行目参照）が実行され（ステップＳ６０７）、ジョインポイントオブジェクトから元々呼び出そうとしていたコントローラでありターゲットクラスのクラス名である（図６の７３行目参照）を取得する（ステップＳ６０８）。
【００８２】
そして、ＡＰサーバ１０は、引数として渡されたアプリケーションコンテキストが所有する同名のクラス名のクラスのオブジェクト（図６の７４〜８１行目参照）を検索する（ステップＳ６０９）。続いて、ＡＰサーバ１０は、ジョインポイントオブジェクト（変数ｐｊｐ）から元々呼び出そうとしていたメソッドのメソッドシグニチャ（図６の８３行目参照）を取得する（ステップＳ６１０）。
【００８３】
その後、ＡＰサーバ１０は、ジョインポイントオブジェクト（変数ｐｊｐ）から元々呼び出そうとしていたメソッドの引数の一覧（図６の８５行目参照）を取得する（ステップＳ６１１）。その後、ＡＰサーバ１０は、検索したオブジェクトに対して、取得したメソッドシグニチャのメソッドを呼び出す。このとき、メソッドの引数には、で取得した引数一覧（図６の８５行目参照）を使用する（ステップＳ６１２）。
【００８４】
[実施例２の効果]
上述してきたように、ＡＰサーバ１０は、アプリケーションの特性を示す特性情報とアプリケーションのアクセス先データストアとを対応付けて記憶するアプリ特性定義ファイル１５ｂを保持する。そして、ＡＰサーバ１０は、呼び出し要求のあったアプリケーションの特性情報がアプリ特性定義ファイル１５ｂによって記憶されたアプリケーションの特性情報と一致する場合には、特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するメソッドを呼び出す。続いて、ＡＰサーバ１０は、呼び出されたメソッドを実行して特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定する。その後、ＡＰサーバ１０は、特定されたコントローラから特性情報に対応付けられたデータストアにアクセスするように制御する。
【００８５】
このため、ＡＰサーバ１０は、アプリケーションの特性に基づいて、アクセス先のデータストアを自動で変更することができるので、アプリケーションのロジックを変更することなく早期かつ安価にデータストアを変更することができる。
【００８６】
また、実施例２によれば、ＡＰサーバ１０は、呼び出し要求のあったアプリケーションの特性情報がアプリ特性定義ファイル１５ｂによって記憶されたアプリケーションの特性情報と一致する場合には、特性情報に対応付けられたデータストアにアクセスするための複数のコントローラのうち、呼び出し要求のあったアプリケーションに対応するコントローラクラスと同じクラスのコントローラを特定するメソッドを呼び出す。このため、アクセス先のデータストアを適切に変更することができる。
【００８７】
また、実施例２によれば、アプリ特性定義ファイル１５ｂは、特性情報として、パッケージ名、クラス名、メソッド名、引数の型および戻り値の型を記憶するので、アプリの特性に基づいたデータストアの切替を行うことができる。
【００８８】
また、実施例２によれば、ＡＰサーバ１０は、アプリ特性定義ファイル１５ｂがアクセス先データストアとして、参照用リレーションデータベースまたはキーバリューストアを記憶する。このため、データの参照しか行わないアプリケーションについては、複数の参照用ＲＤＢに負荷を分散することができ、大規模なアクセスが発生したときの性能を向上することができる。また、トランザクションや高機能なＳＱＬを必要としないアプリケーションについては、複数のＫＶＳに負荷を分散することができるため、更新も含めた大規模なアクセスが発生したときの性能を向上することができる。
【実施例３】
【００８９】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では実施例３として本発明に含まれる他の実施例を説明する。
【００９０】
（１）システム構成等
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、キャッシュ検索部１３ａとディスク負荷判定部１３ｂを統合してもよい。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００９１】
（２）プログラム
なお、本実施例で説明したデータストア切替方法は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【符号の説明】
【００９２】
１  データストア切替装置
２  アプリ特性記憶部
３  メソッド呼出部
４  コントローラ特定部
５  アクセス制御部
１０  ＡＰサーバ
１１  アプリケーション
１１ａ  ＪＳＰファイル
１１ｂ  コントローラクラス
１１ｃ  エンティティクラス
１２  Ｗｅｂフレームワーク
１３  Ｏ／Ｒマッパフレームワーク
１４  Ｗｅｂコンテナ
１５  ファイルシステム
２０  ＰＣ
２１  ブラウザ
２２  入力手段
２３  出力手段
３０  ロードバランサ
【図１】
0005454201.tif 000002
【図２】
0005454201.tif 000003
【図３】
0005454201.tif 000004
【図４】
0005454201.tif 000005
【図５】
0005454201.tif 000006
【図６】
0005454201.tif 000007
【図７】
0005454201.tif 000008
【図８】
0005454201.tif 000009
【図９】
0005454201.tif 000010
【図１０】
0005454201.tif 000011
【図１１】
0005454201.tif 000012
【図１２】
0005454201.tif 000013