説明

データストア切替装置、データストア切替方法およびデータストア切替プログラム

【課題】アプリケーションのロジックを変更することなく早期かつ安価にデータストアを変更することを課題とする。
【解決手段】データストア切替装置1のアプリ特性記憶部2は、アプリケーションの特性を示す特性情報とアプリケーションのアクセス先データストアとを対応付けて記憶する。メソッド呼出部3は、呼び出し要求のあったアプリケーションの特性情報がアプリ特性記憶部2によって記憶されたアプリケーションの特性情報と一致する場合には、特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するメソッドを呼び出す。コントローラ特定部4は、呼び出されたメソッドを実行して特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定する。アクセス制御部5は、特定されたコントローラから特性情報に対応付けられたデータストアにアクセスするように制御する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データストア切替装置、データストア切替方法およびデータストア切替プログラムに関する。
【背景技術】
【0002】
近年、Webアプリケーションのデータストアとして、複数の情報が相互に関連付けられたレコードを表形式で管理するRDB(Relational DataBase)が利用されている。このようなRDBでは、SQL(Structured Query Language)によるアクセスの統一、トランザクション機能、バックアップ手法の確立などにより安全性の向上が図られている。
【0003】
また、Webアプリケーションのデータストアとして、SQLやトランザクション機能がRDBより劣るが、RDBよりも大規模な分散が可能なKVS(Key-Value Store)データストアが知られている。
【0004】
Webアプリケーション等のデータを内部に蓄積するシステムでは、アプリケーションの特性に応じて、複数種類のデータストアのうちのいずれかのデータストアにデータを保存することが考えられる。例えば、データの参照しか行わないアプリケーションの場合には、RDBにデータを保存し、トランザクションや高機能なSQLを必要としないアプリケーションの場合には、KVSにデータを保存する。
【0005】
また、保存するデータの一部がトランザクション等RDB特有の機能を使うために、格納するデータを分割し、一部のデータをRDBに残したまま一部のデータをKVSに保存する場合が考えられる。このような場合には、データストアを切り替えるためのロジックをプログラム中に埋め込んでアプリケーションのロジックを変更することで、一部のデータをRDBに保存し、一部のデータをKVSに保存するようにする。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2002−132568号公報
【特許文献2】特開2006−4328号公報
【特許文献3】特開平9−181723号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、上述したデータストアを切り替えるためのロジックをプログラム中に埋め込んでアプリケーションのロジックを変更する手法では、アプリケーションのロジックを変更するための開発コストがかかるとともに、変更後のアプリケーションのテストにコストがかかるという課題があった。
【0008】
一つの側面では、アプリケーションのロジックを変更することなく早期かつ安価にデータストアを変更することを目的とする。
【課題を解決するための手段】
【0009】
第一の案では、データストア切替装置は、アプリケーションの特性を示す特性情報と該アプリケーションのアクセス先データストアとを対応付けて記憶するアプリ特性記憶部を有する。そして、データストア切替装置は、呼び出し要求のあったアプリケーションの特性情報がアプリ特性記憶部によって記憶されたアプリケーションの特性情報と一致する場合には、該特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するメソッドを呼び出す。続いて、データストア切替装置は、呼び出されたメソッドを実行して特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定する。その後、データストア切替装置は、特定されたコントローラから特性情報に対応付けられたデータストアにアクセスするように制御する。
【発明の効果】
【0010】
アプリケーションのロジックを変更することなく早期かつ安価にデータストアを変更することができる。
【図面の簡単な説明】
【0011】
【図1】図1は、実施例1に係るデータストア切替装置の構成を示すブロック図である。
【図2】図2は、実施例2に係るAPサーバを含むシステムの全体構成を示すブロック図である。
【図3】図3は、実施例2に係るAPサーバの構成を示すブロック図である。
【図4】図4は、データストア定義ファイルの一例を示す図である。
【図5】図5は、アプリ特性ファイルおよびアスペクト定義情報の例を説明する図である。
【図6】図6は、コンテキスト切替アドバイスの実装例を説明する図である。
【図7】図7は、コンテキスト管理定義ファイルの例を説明する図である。
【図8】図8は、参照用RDB向けApplicationContext定義ファイルを説明する図である。
【図9】図9は、コンテキスト管理機構が管理するインスタンスを説明するための図である。
【図10】図10は、コントローラソースの例を説明する図である。
【図11】図11は、実施例2に係るAPサーバの処理手順を説明するためのフローチャートである。
【図12】図12は、実施例2に係るAPサーバの処理手順を説明するためのフローチャートである。
【発明を実施するための形態】
【0012】
以下に、本願の開示するデータストア切替装置、データストア切替方法およびデータストア切替プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例1】
【0013】
まず、図1を用いて、実施例1に係るデータストア切替装置の構成について説明する。図1は、実施例1に係るデータストア切替装置の構成を示すブロック図である。
【0014】
実施例1のデータストア切替装置1は、アプリ特性記憶部2、メソッド呼出部3、コントローラ特定部4、アクセス制御部5を有し、複数種類のデータストア6、7と接続されている。
【0015】
アプリ特性記憶部2は、アプリケーションの特性を示す特性情報とアプリケーションのアクセス先データストアとを対応付けて記憶する。メソッド呼出部3は、呼び出し要求のあったアプリケーションの特性情報がアプリ特性記憶部2によって記憶されたアプリケーションの特性情報と一致する場合には、特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するメソッドを呼び出す。
【0016】
コントローラ特定部4は、メソッド呼出部3によって呼び出されたメソッドを実行して特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定する。アクセス制御部5は、コントローラ特定部4によって特定されたコントローラから特性情報に対応付けられたデータストアにアクセスするように制御する。
【0017】
このように、データストア切替装置1は、アプリケーションの特性に基づいて、アクセス先のデータストアを自動で変更する結果、アプリケーションのロジックを変更することなく早期かつ安価にデータストアを変更することができる。
【実施例2】
【0018】
以下の実施例では、実施例2に係るAPサーバの構成および処理の流れを順に説明し、最後に実施例2による効果を説明する。なお、以下の実施例2では、更新用RDBサーバ、参照用RDBサーバおよびKVSサーバがデータストアとしてAPサーバに接続されている例を説明する。
【0019】
[APサーバの構成]
まず、図2を用いて、APサーバを含むシステム全体の構成を説明する。図2は、実施例2に係るAPサーバを含むシステムの全体構成を示すブロック図である。図2に示すように、このデータベースシステムは、AP(Application)サーバ10、PC(Personal Computer)20、ロードバランサ30、RDB(Relational DataBase)サーバ40、KVS(Key−Value Store)サーバ50を有する。
【0020】
APサーバ10は、PC20から送信されたHTTPリクエストに応じた処理を行う。具体的には、APサーバ10は、PC20からHTTPリクエストを受信し、HTTPリクエストに応じて、データの格納またはデータの参照を行うために、RDBサーバ40やKVSサーバ50のデータストアに対してアクセスする。
【0021】
APサーバ10は、開発者によって作成されたプログラムであるアプリケーション11、Webアプリケーションを容易にするためのWebフレームワーク12と、データストアへの接続を一元管理するO/Rマッパ13を有する。
【0022】
また、APサーバ10は、Webコンテナは、HTTPのリクエストに応じて対応するアプリケーションを呼び出すとともに、セッション情報等のメモリにアクセスする方法を提供するミドルウェアであるWebコンテナ14と、各種ファイルを記憶するファイルシステム15とを有する。なお、APサーバ10の詳しい説明については、図3を用いて後に詳述する。
【0023】
PC20は、キーボードやマウス等の入力手段22と、ディスプレイ等の出力手段23を有し、インターネット等のネットワークを介してロードバランサ30に接続される。また、PC20は、ブラウザ21のアプリケーションを通じてユーザとインタラクションを行い、ロードバランサ30を介してHTTPリクエストをAPサーバ10に送信する。ロードバランサ30は、PC20からのHTTPリクエストをAPサーバ10に中継する。
【0024】
RDBサーバ40は、複数の情報が相互に関連付けられたレコードを表形式で管理するデータストアであり、更新用RDBおよび参照用RDBを有する。RDBサーバ40では、更新用RDBと参照用RDBとで分割されており、更新用RDBに格納されたデータは定期的に参照用RDBにコピーされる。KVSサーバ50は、SQLやトランザクション機能がRDBサーバ40より劣るが、RDBサーバ40よりも大規模な分散が可能なデータストアである。
【0025】
ここで、図3を用いてAPサーバ10の詳しい構成について説明する。図3は、実施例2に係るAPサーバの構成を示すブロック図である。APサーバ10は、アプリケーション11、Webフレームワーク12、O/Rマッパフレームワーク13、Webコンテナ14、ファイルシステム15を有する。
【0026】
アプリケーション11は、開発者によって作成されたプログラムであって、MVC(Model View Controller)アーキテクチャに則って開発することが、Webフレームワーク12により指定されている。MVCアーキテクチャは、アプリケーションの機能ごとに、ビジネスロジックを記述するためのコントローラ(C)、画面のデザイン等のプレゼンテーション層を扱うためのビュー(V)、データストアに保存する形式を決定するためのエンティティから構成され、それぞれ複数のファイル、クラスから成る。
【0027】
アプリケーション11は、JSP(Java(登録商標)Server Pages)ファイル11a、コントローラクラス11b、エンティティクラス11cを有する。JSPファイル11aは、HTMLの中にJavaの計算結果やコードを埋め込んで実行させるための仕組みであるJSPを記憶する。コントローラクラス11bは、Webアプリケーションの動作を制御するためのクラスであり、HTTPリクエストに対応して呼び出される。エンティティクラス11cは、データストアに保存する形式を決定するためのクラスである。
【0028】
ファイルシステム15は、データストア定義ファイル15a、アプリ特性定義ファイル15b、コンテキスト構成定義ファイル15cを記憶する。データストア定義ファイル15aは、データストアに接続するためのURLやアクセスするためのID、パスワードを管理する。具体的には、データストア定義ファイル15aは、図4に示すように、ファイル内にはJDBC等のデータストアアクセス手段で接続する際の「ドライバ」、「URL」、「ユーザ名」、「パスワード」などが定義されている。また、ファイル名には、各データストアを一意に決定するためのユニーク名が付与されている。
【0029】
アプリ特性定義ファイル15bは、アプリケーションの特性を示す特性情報とアプリケーションのアクセス先データストアとを対応付けて記憶しており、コントローラの各メソッド(関数)がどのデータストアにアクセスするかを記述する。具体的には、アプリ特性定義ファイル15bは、図5上の表に示すように、CSV等の表形式でユーザによって入力された「パッケージ名及びクラス名」、「メソッド名」、「使用するデータストア」をそれぞれ対応付けて記憶する。
【0030】
このアプリ特性定義ファイル15bは、アプリケーションの実行前に図5の下のようなXMLに変換される。このXMLは、Springフレームワークで使用されるアスペクトの定義ファイルである。なお、アプリ特性定義ファイルを作成せずに、直接XML形式のアスペクト定義ファイルを用意するようにしてもよい。
【0031】
コンテキスト定義ファイル15cは、コンテキスト管理機構12dが複数のアプリケーションコンテキストを管理するための管理情報を定義する。具体的には、コンテキスト定義ファイル15cには、アプリケーションコンテキスト定義のリストが記述されている。これらの定義ファイル群は、実行時にコンテキスト管理機構12dがどのようなインスタンス(オブジェクト)を管理するかを定義する。
【0032】
Webフレームワーク12は、HTTPのリクエストを実際のJavaクラスファイルであるコントローラクラス11bにマッピングするとともに、各コントローラクラス11bのインスタンスの作成や削除等のライフサイクルを管理する。Webフレームワーク12は、DI機構12a、AOP機構12b、複数のアプリケーションコンテキスト12c、コンテキスト管理機構12dおよびコンテキスト切替アドバイス12eを有する。
【0033】
DI機構12aは、インスタンスの生成やインスタンスの削除等のライフサイクル管理を行い、別途用意される定義ファイル等に基づき、インスタンスを生成する。AOP機構12bは、特定のメソッドの呼び出し等の条件に合わせて、オリジナルのプログラムとは異なるプログラムの挿入、または、ロジックそのものの変更を行う。
【0034】
具体的には、AOP機構12bは、呼び出し要求のあったアプリケーションの特性情報がアスペクト定義によって定義されたアプリケーションの特性情報と一致する場合には、特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するメソッドであるアドバイスを呼び出す。なお、AOPで別のプログラムを挿入可能な場所を「ジョインポイント」、変更するための条件を「ポイントカット」、変更後のプログラムを「アドバイス」と呼ぶ。
【0035】
複数のアプリケーションコンテキスト12cは、アプリケーションが動作するための各種情報を保持し、アプリケーションが使用する各コンポーネントの接続を制御できるようになっている。
【0036】
コンテキスト管理機構12dは、複数のアプリケーションコンテキスト12cを管理する。具体的には、コンテキスト管理機構12dは、更新用RDB、参照用RDB、KVS等、複数種類のデータストアごとに、複数のアプリケーションコンテキスト12cを管理する。
【0037】
例えば、コンテキスト管理機構12dは、複数の参照用RDB用のアプリケーションコンテキストおよびKVS用のアプリケーションコンテキスト12cを管理する。そして、コンテキスト管理機構12dは、コンテキスト切替アドバイス12eが呼び出しを変更する際に、複数の参照用RDB用のアプリケーションコンテキスト12cまたはKVS用のアプリケーションコンテキスト12cから一つを選択する。
【0038】
コンテキスト管理機構12dは、管理対象であるアプリケーションコンテキスト12cのリストであるコンテキスト管理定義ファイルを保持する。ここで、図7の例を用いてコンテキスト管理定義ファイルについて説明する。図7は、コンテキスト管理定義ファイルの例を説明する図である。図7に例示するコンテキスト管理定義ファイル12dは、WebフレームワークとしてSpringフレームワークを使用した際の記述例である。
【0039】
図7に示すように、コンテキスト管理定義ファイルは、(1)と(2)の部分に分かれており、(1)に参照用RDB向けアプリケーションコンテキスト定義のリストとKVS用のアプリケーションコンテキスト定義のリストが記述されている。また、コンテキスト管理定義ファイルは、(2)の部分にデフォルトのデータストアとして更新用RDB向けアプリケーションコンテキストの定義が記述されている。
【0040】
例えば、図8に例示するように、参照用RDB向けアプリケーションコンテキスト定義ファイルは、アプリケーションコンテキスト定義のリストが記述されている。これらの定義ファイル群は、実行時にコンテキスト管理機構がどのようなインスタンス(オブジェクト)を管理するかを定義するためのものである。
【0041】
実行時には、インスタンスの構成が図9のようになる。図9は、コンテキスト管理機構が管理するインスタンスを説明するための図である。Springフレームワークは、実行時の最初にこのインスタンスを作成する。このとき、Springフレームワークは、コンテキスト管理機構が所有するエンティティマネージャファクトリのインスタンスを作成する。コントローラが図10のようなソースコードの場合には、@Autowiredアノテーションが付与されたフィールド(ここではemf変数)にそのインスタンスを代入する(図9A参照)。
【0042】
これにより図9Aにおけるコントローラ1〜3は、コンテキスト管理機構が持つ更新用RDB用のエンティティマネージャファクトリに対して、変数emfを通じてアクセスすることができるようになる。
【0043】
同様に参照RDB用コンテキストは、コントローラ11〜13のインスタンスを作成し、それぞれのコントローラインスタンスから参照RDB用エンティティマネージャファクトリにアクセスできるようにする。KVSにおいても同様のことが行われる。
【0044】
コンテキスト切替アドバイス12eは、AOP機構12bにより呼び出され、アプリ特性定義に基づき実行されるアドバイスである。具体的には、コンテキスト切替アドバイス12eは、呼び出し要求のあったアプリケーションの特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するメソッドを保持する。例えば、コンテキスト切替アドバイス12eは、参照RDBアクセス用のアドバイスメソッド(rdbReplacedMethod)およびKVS用のアドバイスメソッド(kvsReplacedMethod)を保持する。
【0045】
ここで、Webフレームワーク12の具体的な処理について説明する。Webフレームワーク12は、初回起動時において、図5下図のアスペクト定義ファイルを読み取る。そして、Webフレームワーク12は、expressionで指定されるパッケージ名、クラス名、メソッド名、シグニチャ(引数の型、並びと戻り値の型)が一致する呼び出しがある場合には、refで指定されるアドバイスであるメソッドに呼び出しを変更する。
【0046】
図5の下図の例では、「(* controller.AnalysisController.groupByBirthYear(..))”」となっている。つまり、expressionで指定されるパッケージ名及びクラス名が「controller.AnalysisController」であり、メソッド名が「groupByBirthYear」である。また、「*」は戻り値があらゆる型で良いことを示すワイルドカード、「..」は引数の型、並びが何でも良いということを示している。
【0047】
このため、図5の例では、Webフレームワーク12は、パッケージ名が「controller」、クラス名が「AnalysisController」、メソッド名が「groupByBirthYear」である全ての呼び出しを検出する。そして、Webフレームワーク12は、検出された全ての呼び出しに対して、コンテキスト切替アドバイスである「rdbReplacedMethod」を呼び出す。このとき、引数として、元々実行しようとしていたクラスのパッケージ名、クラス名、メソッド名、シグニチャの情報を含むジョインポイント情報を付与する。
【0048】
ここで、図6を用いて、コンテキスト切替アドバイスについて説明する。図6は、コントローラソースの例を説明する図である。Webフレームワーク12は、初回起動時に、図6の19行目のsetContainer()メソッドを呼び出して、コンテキスト管理機構のインスタンスを変数containerに格納する。
【0049】
コンテキスト切替アドバイス12eは、参照RDBアクセス用及びKVS用のアドバイスメソッド(それぞれrdbReplacedMethod、kvsReplacedMethod)を持っている。rdbReplacedMethodは、コンテキスト管理機構12dが持っている参照RDBコンテキストリストの中から、ラウンドロビンで参照RDB用アプリケーションコンテキストを取り出す。
【0050】
続いて、Webフレームワーク12は、ジョインポイント情報から、元々実行しようとしていたクラスのパッケージ名、クラス名、メソッド名、シグニチャの情報を取り出す。そして、Webフレームワーク12は、参照RDB用アプリケーションコンテキストが持っているコントローラから同一のパッケージ名、クラス名、メソッド名、シグニチャのメソッドを探し出し、そのメソッドを呼び出す。
【0051】
また、KVSの場合も同様に、Webフレームワーク12は、KVSコンテキストリストの中からラウンドロビンでKVS用アプリケーションコンテキストを探し、KVS用アプリケーションコンテキストが所有するコントローラを探し出して、元々呼び出そうとしていたメソッドを呼び出す。
【0052】
ここで、コンテキスト管理機構12dが管理するインスタンスの構成について説明する。図9は、コンテキスト管理機構が管理するインスタンスを説明するための図である。Springフレームワークは、コンテキスト管理機構が所有するエンティティマネージャファクトリのインスタンスを作成する。
【0053】
コントローラが図10のようなソースコードの場合に、Webフレームワークは@Autowiredアノテーションが付与されたフィールド(ここではemf変数)にそのインスタンスを代入する(図9A)。これにより図9Aにおけるコントローラ1〜3は、コンテキスト管理機構が持つ更新用RDB用のエンティティマネージャファクトリに対して、変数emfを通じてアクセスすることができるようになる。
【0054】
同様に参照RDB用コンテキストは、コントローラ11〜13のインスタンスを作成し、それぞれのコントローラインスタンスから参照RDB用エンティティマネージャファクトリにアクセスできるようにする。KVSにおいても同様のことが行われる。
【0055】
つまり、コンテキスト切替アドバイス12eは、上述したようにrdbReplacedMethodを呼び出す。そして、ラウンドロビンで参照RDB用アプリケーションコンテキストを一つ取り出す。そして、そこから元々実行しようとしていたクラスと同じコントローラインスタンスを呼び出す。これにより、図9の例では、コントローラ1で呼び出そうとしていた場合に、コントローラ11(又は21)で呼び出されることになる。
【0056】
コントローラ1と11は、同一のクラスであるが、所有するEntityManagerFactoryが異なっている。コントローラ11が所有するEntityManagerFactoryは、参照RDB用のものであるため、このEntityManagerFactoryからアクセスすると、データストア定義ファイルを参照しながら実際のRDBのURLやドライバ等の情報を取り出し、データは参照用RDBから取得される。
【0057】
KVS利用の場合も同様である。KVSでは、呼び出すべきアドバイスとしてkvsReplacedMethodメソッドが呼び出される。このメソッドもRDBの場合と同様に、KVSコンテキストリストの中からラウンドロビンで使用するKVSApplicationContextを一つ選択し、そのコンテキストが所有するコントローラの中から、元々のアプリが実行しようとしていたメソッドと同じ名称のものを選択して実行する。これにより、コントローラが所有するEntityManagerFactoryがKVS用のEntityManagerFactoryとなるため、アクセス先のデータストアを更新用RDBからKVSに変更することができる。このようにして、アプリケーションのコード自体は変更せずに、アクセス先のデータストアを更新用RDBから参照用RDBやKVSに変更することが可能となる。
【0058】
また、更新用RDBをそのまま使用する場合について説明する。AOPがメソッドを変換するためのルールが書かれていない場合に、更新用RDBが使用される。AOP機構が実行時にアスペクトを織り込む場合に、図5で示したアスペクト定義に該当するメソッド実行に対するポイントカットが記載されていないため、メソッドの変換が行われず、コンテキスト管理機構が保有するコントローラ1〜3が呼び出される。これらのコントローラは、更新RDB用EntityManagerFactoryのインスタンスがDI機構による注入されている。このため、更新RDB用のEntityManagerFactoryが使用され、更新RDBへのアクセスが可能となる。
【0059】
O/Rマッパフレームワーク13は、Java等オブジェクト指向言語のオブジェクトをリレーショナルデータベースやKVSに対して永続的に保存する。例えば、JSRで標準化されたO/Rマッパフレームワークとして、JPA(Java Persistence API)がある。
【0060】
O/Rマッパフレームワーク13は、実際のデータストアにアクセスするためのライブラリとしてエンティティマネージャ(EntityManager)13b、13dを有する。また、O/Rマッパフレームワーク13は、エンティティマネージャのインスタンスを生成するためのライブラリとしてエンティティマネージャファクトリ(EntityManagerFactory)13a、13cを有する。
【0061】
エンティティマネージャファクトリ13a、13cおよびエンティティマネージャ13b、13dは、使用するデータストアごとに用意される。O/Rマッパフレームワーク13では、使用する複数のデータストアに対して、それぞれ対応するエンティティマネージャファクトリ13a、13cが用意されている。
【0062】
RDB用エンティティマネージャファクトリ13aは、ファクトリ(工場)クラスと呼ばれ、RDBに接続可能なエンティティマネージャオブジェクトを複数個同時に生成する機能を有している。このため、多数のリクエストが同時に受け付けられた場合には、多数のエンティティマネージャが生成、動作することで性能を維持する機構になっている。
【0063】
KVS用エンティティマネージャファクトリ13cも同様に、KVSに接続可能なエンティティマネージャオブジェクトを複数個同時に生成する機能を有している。このため、多数のリクエストが同時に受け付けられた場合には、多数のエンティティマネージャが生成、動作することで性能を維持する機構になっている。
【0064】
エンティティマネージャ13bは、RDBサーバ40にアクセスするためのライブラリである。また、エンティティマネージャ13dは、KVSサーバ50にアクセスするためのライブラリである。
【0065】
Webコンテナ14は、HTTPのリクエストに応じて対応するアプリケーションを呼び出すと共に、セッション情報等のメモリにアクセスする方法を提供するミドルウェアである。なお、Webコンテナ14からは、Webフレームワーク12がアプリケーションとして認識される。
【0066】
なお、Webコンテナ14として、例えば、Interstage Application ServerやApache Tomcat等の製品、オープンソースプロダクト等を利用することができる。また、APサーバ10では、Webコンテナ14に加え、開発を容易にするためのフレームワーク群として、Webアプリケーションの開発を容易にするためのWebフレームワーク12と、データストアへの接続を一元管理するO/Rマッパフレームワーク13とが利用される。
【0067】
[APサーバによる処理]
次に、図3を用いて、実施例2に係るAPサーバ10による処理を説明する。図11および図12は、実施例2に係るAPサーバの処理手順を説明するためのフローチャートである。
【0068】
図11に示すように、利用者がブラウザ経由でロードバランサ30にアクセスすると(ステップS101)、ロードバランサ30は、負荷の低いAPサーバ10にリクエストを中継する(ステップS102)。例えば、利用者がブラウザを操作して「http://foo.com/analysis/groupByBirthYear」にアクセスすると、ロードバランサ30がリクエストを受信してAPサーバ10にリクエストを中継する。
【0069】
そして、APサーバ10は、Webコンテナ14がWebフレームワーク呼び出しを行う(ステップS103)。例えば、APサーバ10は、APサーバで動作しているWebコンテナは、図示しないWeb定義ファイル(例えば、Java Servlet仕様ではweb.xmlファイル)に基づいて、Webフレームワークを呼び出す。
【0070】
そして、APサーバ10は、Webフレームワーク12がアプリケーションのコントローラクラスを決定して、実行する(ステップS104)。具体的には、Webフレームワーク12は、URLに基づき、呼び出すアプリケーションを決定する。例えば、URLの最初のパス名がanalysis、2番目のパラメータがgroupByBirthYearなので、Springフレームワークのルールに基づき、コントローラクラス(図10参照)におけるgroupByBirthYearメソッドと決定される。このとき、Springフレームワークが実行するクラスは、コンテキスト管理機構12dが管理するデフォルトのコントローラ1〜3の何れかとなる。
【0071】
続いて、APサーバ10は、実行するコントローラクラスに該当するアスペクト定義があるか判定する(ステップS105)。この結果、APサーバ10は、決定されたコントローラクラスにAOPの定義がある場合には(ステップS105肯定)、アスペクト定義に記述されたメソッドを呼び出す(ステップS106)。
【0072】
例えば、APサーバ10のAOP機構12bは、図5下図のアスペクト定義に基づき、メソッドをアドバイスに変換(図5の例では、アドバイスである「rdbReplacedMethod」メソッドに変換)する。そして、APサーバ10のWebフレームワーク12は、rdbReplacedMethodメソッドを実行し、引数として、元々実行しようとしていたクラスのパッケージ名、クラス名、メソッド名、シグニチャ(引数や戻り値等)の情報を含むジョインポイント情報を付与する。
【0073】
その後、APサーバ10は、アドバイスに従い、元々のコントローラのメソッドと同一の名称のメソッドをアプリケーションコンテキストから検索して実行する処理(後に図12を用いて詳述)を行う(ステップS107)。
【0074】
また、APサーバ10は、実行するコントローラクラスにAOPの定義がない場合には(ステップS105否定)、コンテキスト管理機構12dが所有するデフォルトのエンティティマネージャファクトリを利用し(ステップS108)、アプリケーション11が更新用RDBにアクセスする(ステップS109)。
【0075】
次に、図12を用いて、アドバイスに従い、元々のコントローラのメソッドと同一の名称のメソッドをアプリケーションコンテキストから検索して実行する処理について詳しく説明する。なお、以下の処理の説明では、図6に例示したコンテキスト切替アドバイスの例を用いて説明する。
【0076】
図12に示すように、APサーバ10は、Webフレームワーク12によりアプリ特性定義ファイルから呼び出し先メソッドをrdbReplacedMethodに決定した場合には(ステップS601肯定)、rdbReplacedMethod()メソッド(図6の27行目参照)を呼び出す(ステップS602)。
【0077】
そして、APサーバ10は、コンテキスト管理機構12dのgetApplicationContext()メソッドを実行し、参照RDB用コンテキストリスト(図6の29行目参照)を取得する(ステップS603)。続いて、APサーバ10は、参照RDB用コンテキストリストを引数として、invokeRoundRobin()メソッド(図6の29行目参照)を実行する(ステップS604)。
【0078】
また、APサーバ10は、Webフレームワーク12によりアプリ特性定義ファイルから呼び出し先メソッドをkvsReplacedMethodに決定した場合には(ステップS601否定)、kvsReplacedMethod()メソッド(図6の39行目参照)を呼び出す(ステップS613)。
【0079】
そして、APサーバ10は、コンテキスト管理機構12dのgetKvsApplicationContext()メソッドを実行し、KVS用コンテキストリスト(図6の41行目参照)を取得する(ステップS614)。続いて、APサーバ10は、KVS用コンテキストリストを引数として、invokeRoundRobin()メソッド(図6の41行目参照)を実行する(ステップS615)。
【0080】
その後、APサーバ10では、invokeRoundRobin()メソッドが、引数で与えられたコンテキストリストの中から、ラウンドロビンで1個のアプリケーションコンテキスト(図6の51〜64行目参照)を選ぶ(ステップS605)。そして、選択されたアプリケーションコンテキストを引数としてinvoke()メソッド(図6の67行目参照)を呼び出す(ステップS606)。
【0081】
そして、APサーバ10では、invoke()メソッド(図6の70行目参照)が実行され(ステップS607)、ジョインポイントオブジェクトから元々呼び出そうとしていたコントローラでありターゲットクラスのクラス名である(図6の73行目参照)を取得する(ステップS608)。
【0082】
そして、APサーバ10は、引数として渡されたアプリケーションコンテキストが所有する同名のクラス名のクラスのオブジェクト(図6の74〜81行目参照)を検索する(ステップS609)。続いて、APサーバ10は、ジョインポイントオブジェクト(変数pjp)から元々呼び出そうとしていたメソッドのメソッドシグニチャ(図6の83行目参照)を取得する(ステップS610)。
【0083】
その後、APサーバ10は、ジョインポイントオブジェクト(変数pjp)から元々呼び出そうとしていたメソッドの引数の一覧(図6の85行目参照)を取得する(ステップS611)。その後、APサーバ10は、検索したオブジェクトに対して、取得したメソッドシグニチャのメソッドを呼び出す。このとき、メソッドの引数には、で取得した引数一覧(図6の85行目参照)を使用する(ステップS612)。
【0084】
[実施例2の効果]
上述してきたように、APサーバ10は、アプリケーションの特性を示す特性情報とアプリケーションのアクセス先データストアとを対応付けて記憶するアプリ特性定義ファイル15bを保持する。そして、APサーバ10は、呼び出し要求のあったアプリケーションの特性情報がアプリ特性定義ファイル15bによって記憶されたアプリケーションの特性情報と一致する場合には、特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するメソッドを呼び出す。続いて、APサーバ10は、呼び出されたメソッドを実行して特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定する。その後、APサーバ10は、特定されたコントローラから特性情報に対応付けられたデータストアにアクセスするように制御する。
【0085】
このため、APサーバ10は、アプリケーションの特性に基づいて、アクセス先のデータストアを自動で変更することができるので、アプリケーションのロジックを変更することなく早期かつ安価にデータストアを変更することができる。
【0086】
また、実施例2によれば、APサーバ10は、呼び出し要求のあったアプリケーションの特性情報がアプリ特性定義ファイル15bによって記憶されたアプリケーションの特性情報と一致する場合には、特性情報に対応付けられたデータストアにアクセスするための複数のコントローラのうち、呼び出し要求のあったアプリケーションに対応するコントローラクラスと同じクラスのコントローラを特定するメソッドを呼び出す。このため、アクセス先のデータストアを適切に変更することができる。
【0087】
また、実施例2によれば、アプリ特性定義ファイル15bは、特性情報として、パッケージ名、クラス名、メソッド名、引数の型および戻り値の型を記憶するので、アプリの特性に基づいたデータストアの切替を行うことができる。
【0088】
また、実施例2によれば、APサーバ10は、アプリ特性定義ファイル15bがアクセス先データストアとして、参照用リレーションデータベースまたはキーバリューストアを記憶する。このため、データの参照しか行わないアプリケーションについては、複数の参照用RDBに負荷を分散することができ、大規模なアクセスが発生したときの性能を向上することができる。また、トランザクションや高機能なSQLを必要としないアプリケーションについては、複数のKVSに負荷を分散することができるため、更新も含めた大規模なアクセスが発生したときの性能を向上することができる。
【実施例3】
【0089】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では実施例3として本発明に含まれる他の実施例を説明する。
【0090】
(1)システム構成等
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、キャッシュ検索部13aとディスク負荷判定部13bを統合してもよい。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【0091】
(2)プログラム
なお、本実施例で説明したデータストア切替方法は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク(FD)、CD−ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【符号の説明】
【0092】
1 データストア切替装置
2 アプリ特性記憶部
3 メソッド呼出部
4 コントローラ特定部
5 アクセス制御部
10 APサーバ
11 アプリケーション
11a JSPファイル
11b コントローラクラス
11c エンティティクラス
12 Webフレームワーク
13 O/Rマッパフレームワーク
14 Webコンテナ
15 ファイルシステム
20 PC
21 ブラウザ
22 入力手段
23 出力手段
30 ロードバランサ

【特許請求の範囲】
【請求項1】
アプリケーションの特性を示す特性情報と該アプリケーションのアクセス先データストアとを対応付けて記憶するアプリ特性記憶部と、
呼び出し要求のあったアプリケーションの特性情報が前記アプリ特性記憶部によって記憶されたアプリケーションの特性情報と一致する場合には、該特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するメソッドを呼び出すメソッド呼出部と、
前記メソッド呼出部によって呼び出されたメソッドを実行して前記特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するコントローラ特定部と、
前記コントローラ特定部によって特定されたコントローラから前記特性情報に対応付けられたデータストアにアクセスするように制御するアクセス制御部と
を有することを特徴とするデータストア切替装置。
【請求項2】
前記メソッド呼出部は、呼び出し要求のあったアプリケーションの特性情報が前記アプリ特性記憶部によって記憶されたアプリケーションの特性情報と一致する場合には、該特性情報に対応付けられたデータストアにアクセスするための複数のコントローラのうち、前記呼び出し要求のあったアプリケーションに対応するコントローラクラスと同じクラスのコントローラを特定するメソッドを呼び出すことを特徴とする請求項1に記載のデータストア切替装置。
【請求項3】
前記アプリ特性記憶部は、特性情報として、パッケージ名、クラス名、メソッド名、引数の型および戻り値の型を記憶することを特徴とする請求項1または2に記載のデータストア切替装置。
【請求項4】
前記アプリ特性記憶部は、アクセス先データストアとして、参照用リレーションデータベースまたはキーバリューストアを記憶することを特徴とする請求項1〜3のいずれか一つに記載のデータストア切替装置。
【請求項5】
アプリケーションの特性を示す特性情報と該アプリケーションのアクセス先データストアとを対応付けてアプリ特性記憶部に記憶する記憶ステップと、
呼び出し要求のあったアプリケーションの特性情報が前記アプリ特性記憶部によって記憶されたアプリケーションの特性情報と一致する場合には、該特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するメソッドを呼び出すメソッド呼出ステップと、
前記メソッド呼出ステップによって呼び出されたメソッドを実行して前記特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するコントローラ特定ステップと、
前記コントローラ特定ステップによって特定されたコントローラから前記特性情報に対応付けられたデータストアにアクセスするように制御するアクセス制御ステップと
を含んだことを特徴とするデータストア切替方法。
【請求項6】
アプリケーションの特性を示す特性情報と該アプリケーションのアクセス先データストアとを対応付けてアプリ特性記憶部に記憶する記憶手順と、
呼び出し要求のあったアプリケーションの特性情報が前記アプリ特性記憶部によって記憶されたアプリケーションの特性情報と一致する場合には、該特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するメソッドを呼び出すメソッド呼出手順と、
前記メソッド呼出手順によって呼び出されたメソッドを実行して前記特性情報に対応付けられたデータストアにアクセスするためのコントローラを特定するコントローラ特定手順と、
前記コントローラ特定手順によって特定されたコントローラから前記特性情報に対応付けられたデータストアにアクセスするように制御するアクセス制御手順と
をコンピュータに実行させることを特徴とするデータストア切替プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate


【公開番号】特開2011−165148(P2011−165148A)
【公開日】平成23年8月25日(2011.8.25)
【国際特許分類】
【出願番号】特願2010−30686(P2010−30686)
【出願日】平成22年2月15日(2010.2.15)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】