JP5552991B2 - アプリケーション配備装置、アプリケーション配備方法およびアプリケーション配備プログラム - Google Patents

アプリケーション配備装置、アプリケーション配備方法およびアプリケーション配備プログラム Download PDF

Info

Publication number
JP5552991B2
JP5552991B2 JP2010219871A JP2010219871A JP5552991B2 JP 5552991 B2 JP5552991 B2 JP 5552991B2 JP 2010219871 A JP2010219871 A JP 2010219871A JP 2010219871 A JP2010219871 A JP 2010219871A JP 5552991 B2 JP5552991 B2 JP 5552991B2
Authority
JP
Japan
Prior art keywords
program
content
storage unit
server
code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2010219871A
Other languages
English (en)
Other versions
JP2012073950A (ja
Inventor
敏裕 小高
智裕 大嶽
裕司 溝渕
佳秀 野村
晃治 山本
裕一 槌本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2010219871A priority Critical patent/JP5552991B2/ja
Publication of JP2012073950A publication Critical patent/JP2012073950A/ja
Application granted granted Critical
Publication of JP5552991B2 publication Critical patent/JP5552991B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

本発明は、アプリケーション配備装置、アプリケーション配備方法およびアプリケーション配備プログラムに関する。
従来、Webアプリケーションシステムでは、複数台用意されたサーバに対して処理を振り分け、この複数台のサーバに負荷を分散することで大量のアクセスを処理することが知られている。
このようなWebアプリケーションシステムにおいて、Webサーバに接続されるデータベースサーバが単一である場合には、単一のデータベースサーバが処理を行うので、データベースサーバがボトルネックとなり、処理が遅延することがある。このため、スケーラビリティ向上のために、Webサーバに複数のデータベースサーバを接続することが実施されている。
具体的には、Webアプリケーションシステムは、データベースサーバとして、参照用データベースサーバ(以下、参照用DBサーバという)および更新用データベースサーバ(以下、更新用DBサーバという)を有する。ここで、図17を用いて、Webアプリケーションシステムについて具体的に説明する。図17に示すように、ロードバランサ(図17の例では、LBと記載)、複数のWebサーバ、参照用DBサーバ、更新用DBサーバおよびバックアップDBサーバを有する。ロードバランサは、複数台用意されたWebサーバのうち、いずれかのWebサーバに対して処理を振り分ける。
このようなWebアプリケーションシステムにおいて、Webサーバは、参照アプリおよび更新アプリを保持する。そして、Webサーバは、ロードバランサを介して更新要求を受け付けた場合には、更新アプリが更新用DBサーバにアクセスして更新用DBの更新を行う。また、Webサーバは、ロードバランサを介して参照要求を受け付けた場合には、参照アプリが参照用DBサーバにアクセスして参照用DBを参照する。
ここで、Webアプリケーションシステムは、更新用DBに格納されたデータを定期的に参照用DBにコピーするレプリケーション処理を行うことで、参照用DBのデータと更新用DBのデータとの一貫性を確保している。ところが、レプリケーション処理を行うまでは参照用DBと更新用DBとで内容が一致しない場合があり、データを更新するユーザが更新用データベースに問い合わせる場合がある。
例えば、日記のようなWebサイトでは、書き込まれた日記がレプリケーション処理を行うまでの数秒〜数分間は読むことができない可能性がある。つまり、日記の所有者は、結果がリアルタイムで反映されないと、本当に日記が登録されたのか確認することができない。このため、コンテンツの所有者(以下、コンテンツ所有者という)が最新のデータを保持する更新用DBに問い合わせを行う場合がある。
例えば、コンテンツ所有者が更新用DBに問い合わせを行う方法として、アプリ内に参照用DBと更新用DBのURLを記述し、Webアプリケーションのなかで接続先データベースを変えるようにプログラムを手動で記述することが考えられる。このようなWebアプリケーションを実行した場合の処理について図18を用いて説明する。例えば、図18に示すように、ブラウザからログイン時に利用者IDが入力された場合に(図18の(1)参照)、APサーバは、Webで利用されるセッション情報記憶部に利用者IDを格納する(図18(2)参照)。
そして、ブラウザからデータの要求を受け付けると(図18の(3)参照)、APサーバは、利用者IDを参照し(図18の(4)参照)、読み込むデータの所有者IDが利用者IDと一致する場合には更新用DBに問い合わせ、一致しない場合には参照用DBに問い合わせる(図18の(5)参照)。
特開2002−132568号公報 特開2006−4328号公報
ところで、上述した接続先データベースを変えるようなプログラムを手動で記述する方法では、プログラムを記述するための開発コストがかかるとともに、変更後のプログラムのテストにコストがかかるという課題があった。
一つの側面では、プログラムを手動で変更することなくアクセス先データベースの振り分けを適切に行うことを目的とする。
第一の案では、アプリケーション配備装置は、コンテンツの所有者の識別子を保存するプログラムをコンテンツへアクセスするコンテンツアクセスプログラムに追加する。そして、アプリケーション配備装置は、コンテンツの参照を要求する利用者の識別子とプログラムによって保存された識別子とを用いて更新用記憶部または参照用記憶部にアクセスするプログラムに、コンテンツアクセスプログラムを変換する。
Webアプリケーションを手動で変更することなくアクセス先データベースの振り分けを適切に行うことができる。
図1は、実施例1に係るアプリケーション配備装置の構成を示すブロック図である。 図2は、実施例2に係るWebアプリケーションシステムの構成を説明する図である。 図3は、実施例2に係る配備サーバの構成を示す図である。 図4は、配備記述子にフィルタ要素を追加する処理を説明する図である。 図5は、DBコネクションの変換処理を説明する図である。 図6は、リスナクラスのプログラム例を示す図である。 図7は、フィルタクラスのプログラム例を示す図である。 図8は、Webアプリケーションシステムの処理を説明する図である。 図9は、コンテンツ所有者がコンテンツを参照する場合の処理を説明する図である。 図10は、コンテンツ読者がコンテンツを参照する場合の処理を説明する図である。 図11は、実施例2に係る配備サーバの配備記述子変更手順を説明するためのフローチャートである。 図12は、実施例2に係る配備サーバのDBコネクション変換手順を説明するためのフローチャートである。 図13は、実施例2に係るWebアプリケーションシステムのコンテンツ追加時の処理手順を説明するためのフローチャートである。 図14は、実施例2に係るWebアプリケーションシステムのコンテンツ参照時の処理手順を説明するためのフローチャートである。 図15は、実施例3に係る配備サーバの構成を示す図である。 図16は、Webアプリケーションシステムの処理を説明する図である。 図17は、従来のWebアプリケーションシステムを説明する図である。 図18は、従来のWebアプリケーションシステムの処理を説明する図である。
以下に、本願の開示するアプリケーション配備装置、アプリケーション配備方法およびアプリケーション配備プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
まず、図1を用いて、実施例1に係るアプリケーション配備装置の構成について説明する。図1は、実施例1に係るアプリケーション配備装置の構成を示すブロック図である。
実施例1のアプリケーション配備装置1は、プログラム追加部1a、プログラム変換部1bを有し、アプリケーションサーバ2に接続されている。アプリケーションサーバ2は、利用者端末3、更新用記憶部4および参照用記憶部5とそれぞれ接続されている。アプリケーションサーバ2は、利用者端末3からの要求に応じて、更新用記憶部4および参照用記憶部5に対してアクセスしてアプリケーションを実行する。
利用者端末3は、アプリケーションサーバ2に対してコンテンツの更新要求または参照要求を送信する。更新用記憶部4は、アプリケーションサーバ2によってアクセスされ、最新のコンテンツを保持する。参照用記憶部5は、アプリケーションサーバ2によってアクセスされ、更新用記憶部4が保持するコンテンツの複製を保持する。
アプリケーション配備装置1のプログラム追加部1aは、更新用記憶部4および参照用記憶部5に記憶されたコンテンツの所有者の識別子を保存するプログラムを、コンテンツへアクセスするコンテンツアクセスプログラムに追加する。プログラム変換部1bは、コンテンツの参照を要求する利用者の識別子とプログラムによって保存された識別子とを用いて更新用記憶部4または参照用記憶部5にアクセスするプログラムに、コンテンツアクセスプログラムを変換する。
このように、アプリケーション配備装置1は、コンテンツへアクセスするコンテンツアクセスプログラムを自動で追加および変換し、更新用記憶部4または参照用記憶部5のいずれかをアクセス先として振り分ける。この結果、アプリケーション配備装置1は、プログラムを手動で変更することなく、プログラムを記述するための開発およびテストにかかるコストを削減してアクセス先の振り分けを適切に行うことができる。
以下の実施例では、実施例2に係るWebアプリケーションシステム、配備サーバの構成および処理の流れを順に説明し、最後に実施例2による効果を説明する。
[Webアプリケーションシステムの構成]
まず、図2を用いて、配備サーバを含むWebアプリケーションシステム全体の構成を説明する。図2は、実施例2に係るWebアプリケーションシステムの構成を説明する図である。図2に示すように、Webアプリケーションシステム100は、配備サーバ10、複数のAP(Application)サーバ20、ブラウザ30、LB(Load Balancer)40、参照用DB(DataBase)50、更新用DB60を有する。
配備サーバ10は、APサーバ20と接続されており、APサーバ20上に配置されたWebアプリのファイル形式であるWarファイルおよびDB定義情報ファイルを読み取り、配備サーバ10上で作成されたWebアプリをAPサーバ20上に配備する。
APサーバ20は、外部との通信やメモリへのアクセス手段を提供するためのプラットフォームであるコンテナ機能を有し、Warファイルとして開発されたWebアプリを実行させる。Webアプリは、APサーバ20内のメモリにセッション情報等を格納することができるようになっている。また、APサーバ20の後方には、更新用DB60と参照用DB50とが接続されている。
APサーバ20は、ロードバランサ40を介して更新要求を受け付けた場合には、更新用DB60のデータを更新を行い、また、ロードバランサ40を介して参照要求を受け付けた場合には、参照用DB50のデータを参照する。また、APサーバ20は、各DB50、60に接続するためのURLが記述されたDB定義情報を保存する。このDB定義情報は、例えばXMLファイルとして保存される。また、APサーバ20は、更新用DB60に格納されたデータを定期的に参照用DB50にコピーするレプリケーション処理を行うことで、参照用DB50のデータと更新用DB60のデータとの一貫性を確保している。
ブラウザ30は、ロードバランサ40とインターネットを介して接続される利用者端末において利用者が情報を閲覧するためのソフトウェアである。具体的には、ブラウザ30は、利用者のリクエストを受け付け、ロードバランサ40にリクエストを送信し、また、ロードバランサから受信したWebページを利用者端末に表示する。
ロードバランサ40は、複数のAPサーバ20と接続され、複数のリクエストの負荷分散を行う。具体的には、ロードバランサ40は、ブラウザ30からリクエストを受信すると、複数用意されたAPサーバ20中の一台を選択し、選択されたAPサーバ20にリクエストを送信する。
次に、図3を用いて、図2に示した配備サーバ10の構成を説明する。図3は、実施例2に係る配備サーバの構成を示すブロック図である。図3に示すように、この配備サーバ10は、ファイル解凍部11、配備記述子変換部12、DBコネクション変換部13、Webコンテンツ変換部14、ファイル圧縮部15を有する。以下にこれらの各部の処理を説明する。
ファイル解凍部11は、圧縮形式のWebアプリファイルであるWarファイルを読み取り、通常のファイルに解凍する。ここでWarファイルとは、JCP(Java(登録商標) Community Process)の定めるServlet仕様に則っており、リクエストに対してどのプログラムを呼び出すかを定義するための配備記述子、Javaのプログラム本体であるクラスファイル、HTMLやJSP等のWebコンテンツから構成される。
配備記述子変換部12は、リクエストに対してどのプログラムを呼び出すかを定義するための配備記述子にServletフィルタを追加する。具体的には、配備記述子変換手段12は、HTTPのリクエストにパスワードが含まれる場合に付随するHTTPクエリテキストをユーザIDとしてHTTPセッション情報に保存するServletフィルタを追加する。
ここで、図4を用いて、配備記述子にフィルタ要素を追加する処理を説明する。図4は、配備記述子にフィルタ要素を追加する処理を説明する図である。まず、配備記述子変換手段12は、配備記述子に<listener>要素があるか判定する。この結果、配備記述子変換手段12は、<listener>要素がないと判定した場合には、図4に示すように、<listener−class>要素を追加する。また、配備記述子変換手段12は、<listener>要素があると判定した場合には、<listener>要素内の最後に<listener−class>要素を追加する。
続いて、配備記述子変換手段12は、<filter>要素があるか判定する。この結果、配備記述子変換手段12は、<filter>要素がないと判定した場合には、図4に示すように、<servlet>要素の直前に<filter>要素(図4の(1)参照)と<filter−mapping>要素(図4の(2)参照)を追加する。
また、配備記述子変換手段12は、<filter>要素があると判定した場合には、最後の<filter>要素の直後に<filter>要素を追加し、最後の<filter−mapping>要素の直後に<filter−mapping>要素を追加する。
このように配備記述子を変更することで、Webアプリの起動時に「com.fujitsu.ServletListener」というリスナクラスが実行され、すべてのリクエスト処理の最初に「com.fujitsu.PasswordFilter」というフィルタクラスが実行されることを定義することができる。なお、リスナクラスおよびフィルタクラスについては、後に図6および図7を用いて詳述する。
DBコネクション変換部13は、データベースへのアクセスを行うJavaクラスに対して、実行されるSQLに所有者IDが含まれていれば更新用DB60へのコネクションを生成し所有者IDが含まれていなければ参照用DB50へのコネクションを生成するプログラムをアスペクト指向技術により埋め込む。
例えば、DBコネクション変換部13は、「Connection#createStatement()」メソッドや「Connection#prepareStatement()」メソッド等の、クエリを実行するためのオブジェクトを作成するコードをアスペクト指向言語等の静的解析技術でJavaクラスファイル内から検索する。
そして、DBコネクション変換部13は、図5の上部に示すようなプログラムの場合には、コネクションを生成するコード部分(図5(3)参照)の前に、コンテンツ所有者IDか否かの候補の一覧を取得するためのコード(図5(4)参照)を追加する。
その後、DBコネクション変換部13は、その所有者IDが、実行されるSQLに含まれるかどうかを判定し、含まれていれば更新用DB60へのコネクションを生成し、含まれていなければ参照用DB50へのコネクションを生成するコード(図5の(5)参照)を追加する。なお、updateやcreate等データベースの更新を行うSQLを実行する場合には、更新用DBへのコネクションを生成するようなコードとする。
Webコンテンツ変換部14は、HTMLファイル及びJSPファイルの中を検索し、type属性が「password」となっている<input>要素があるか否かを判定する。この結果、Webコンテンツ変換部14は、password属性の<input>要素がある場合には、同じフォーム要素内に隠しメッセージである「<input type=“hidden” name=“CONTAINS_PASSWORD_FIELD” Value=“TRUE”>」を追加する処理を行う。
つまり、HTML入力フォームがパスワード情報を含んでおり、所有者がIDを入力した可能性が高いと判断し、“CONTAINS_PASSWORD_FIELD”が含まれていれば、そのときの値をセッションに保存するように隠しメッセージを追加する。なお、IDとパスワードは同一の入力フォームを用いられることが多く、パスワードと一緒に入力される情報の中にID情報が含まれる確率が高い。
ファイル圧縮部15は、変換後配備記述子、変換後クラスファイルおよび変換後Webコンテンツをリスナクラスおよびフィルタクラスとともに圧縮し、変換後アプリとして生成する。この変換後アプリは、APサーバ20上にネットワーク経由で転送、配備され、実行システム上で実行される。
ここで、図6の例を用いてリスナクラスについて説明する。図6は、リスナクラスのプログラム例を示す図である。リスナクラスは、配備されたWebアプリが起動する際に一度だけ実行される。そして、リスナクラスは、図6に示すように、DB定義ファイルから抽出した更新用DB及び参照用DBのURLをメモリ上に保存しておき、後でアプリ内で使えるようにする機能を有している。具体的には図5で示すコード(5)内で使用されている。
図7は、フィルタクラスのプログラム例を示す図である。フィルタクラスは、Servlet仕様により、リクエストの最初に呼び出され、HTTPリクエストの情報を読み取ることができるようになっている。フィルタクラス「PasswordFilter」は、HTTPリクエストの情報を検索し、CONTAINS_PASSWORD_FIELDという名称のパラメータが存在しているかをチェックする。CONTAINS_PASSWORD_FIELDパラメータが存在すれば、ヘルパクラス(ScaleoutHelper)を呼び出し、すべてのパラメータの内容をセッション(ユーザごとのメモリ情報)に保存する。この内容が、所有者IDの候補となる。
ここで、図8を用いて、Webアプリケーションシステムにおけるコンテンツ参照処理を説明する。図8は、Webアプリケーションシステムの処理を説明する図である。図8に示すように、Webアプリケーションシステム100では、ブラウザ30からログイン時に利用者IDの入力が受け付けられると、LB40に利用者IDを送信する(図8の(1)参照)。そして、Webアプリケーションシステム100では、LB40からAPサーバ20に利用者IDが送信されると、フィルタがパスワードとともに送られた文字列を利用者IDと特定し、セッション情報に利用者IDを格納する(図8の(2)参照)。
その後、Webアプリケーションシステム100では、ブラウザ30からデータ参照要求を受け付けると(図8の(3)参照)、LB40を介して、APサーバ20にデータ参照要求を送信する。そして、APサーバ20のアプリは、データ参照要求を受け付けると、SQLを発行する。続いて、APサーバ20のDB振り分けエンジンがSQLを解析し、where句内に利用者IDと一致するものが1件以上あるかセッション情報の利用者IDを参照する(図8の(4)参照)。この結果、where句内に利用者IDと一致するものが1件以上ある場合には、更新用DB60に問い合わせ、また、利用者IDと一致するものがない場合には、参照用DB50に問い合わせる(図8の(5)参照)。
例えば、図9を用いて、コンテンツ所有者がコンテンツを登録し、それを自分自身で確認する場合の処理を説明する。図9は、コンテンツ所有者がコンテンツを参照する場合の処理を説明する図である。トップページのHTMLコンテンツには、ID、パスワードの入力フォームがあり、この入力フォームにはtype=passwordの<input>要素が存在するので、パスワードと同時に入力されたIDが、ヘルパクラスを通じてセッション情報に保存される。例えば、図9の左側に示すように、IDとして「tanaka」と入力した場合には、takanaという文字列がセッション情報に保存される。
その後、コンテンツ利用者が日記等のコンテンツを登録し、再度自身の作成したコンテンツの一覧を表示する。その際に、図9の右上のようなコードが実行されると、statementオブジェクトのid部分には「takana」という文字列が入るので、この文字列がセッション情報の文字列を一致し、更新用DBのURLが使用される。
また、図10を用いて、コンテンツ読者がコンテンツを参照する場合の処理を説明する。図10は、コンテンツ読者がコンテンツを参照する場合の処理を説明する図である。図10に示すように、コンテンツ読者である「suzuki」がコンテンツ所有者「tanaka」とは異なるIDでログインすると、セッション情報に「suzuki」が保存される。次にコンテンツ読者である「suzuki」さんが、tanakaさんのコンテンツ一覧表示を押下すると、図10の右上のようなコードが実行される。ここで、statementオブジェクトのid部分には「takana」という文字列が入るので、この文字列がセッション情報の文字列と一致せず、参照用DBのURLが使用される。
[配備サーバによる処理]
次に、図11および図12を用いて、実施例2に係る配備サーバ10による処理を説明する。図11は、実施例2に係る配備サーバの配備記述子変更手順を説明するためのフローチャートである。図12は、実施例2に係る配備サーバのDBコネクション変換手順を説明するためのフローチャートである。
図11に示すように、配備サーバ10は、配備記述子を読み込むと(ステップS101)、<listener>要素があるか判定する(ステップS102)。この結果、配備サーバ10は、<listener>要素があると判定した場合には(ステップS102肯定)、<listener>要素内の最後に<listener−class>要素を追加する(ステップS103)。
そして、配備サーバ10は、<listener>要素がないと判定した場合には(ステップS102否定)、<listner−class>要素を追加する(ステップS104)。
続いて、配備サーバ10は、<filter>要素があるか判定する(ステップS105)。この結果、配備サーバ10は、<filter>要素があると判定した場合には(ステップS105肯定)、最後の<filter>要素の直後に<filter>要素を追加する(ステップS106)。そして、最後の<filter−mapping>要素の直後に<filter−mapping>要素を追加する(ステップS107)。
また、配備サーバ10は、<filter>要素がないと判定した場合には(ステップS105否定)、<servlet>要素の直前に<filter>要素と<filter−mapping>要素を追加する(ステップS108)。
次に、図12を用いて、DBコネクション変換処理を説明する。図12に示すように、配備サーバ10は、Javaプログラムを読み込み(ステップS201)、コネクション取得部分があるか判定する(ステップS202)。この結果、配備サーバ10は、コネクション取得部分がない場合には(ステップS202否定)、DBコネクション変換処理を終了する。また、配備サーバ10は、コネクション取得部分がある場合には(ステップS202肯定)、プログラムのメソッドの先頭に所有者ID候補一覧を取得する命令を追加する(ステップS203)。
そして、配備サーバ10は、コネクションを生成するコード部分について、実行されるSQLに所有者IDが含まれていれば更新用DB60へのコネクションを生成し所有者IDが含まれていなければ参照用DB50へのコネクションを生成するコードを追加する(ステップS204)。その後、配備サーバ10は、最後の<filter−mapping>要素の直後に<filter−mapping>要素を追加する(ステップS205)。
[Webアプリケーションシステムによる処理]
次に、図13および図14を用いて、実施例2に係るWebアプリケーションシステム100による処理を説明する。図13は、実施例2に係るWebアプリケーションシステムのコンテンツ追加時の処理手順を説明するためのフローチャートである。図14は、実施例2に係るWebアプリケーションシステムのコンテンツ参照時の処理手順を説明するためのフローチャートである。
図13に示すように、APサーバ20は、配備記述子を読み込み(ステップS301)、リスナクラスを実行して(ステップS302)、APサーバ20のメモリ内に参照用DB50および更新用DB60のURLを保存する(ステップS303)。そして、コンテンツ所有者がブラウザ30からサイトのトップページのURLを入力してロードバランサ40にアクセスすると(ステップS304)、ロードバランサ40がHTTPリクエストをAPサーバ20に送信する(ステップS305)。
続いて、APサーバ20は、ロードバランサ40からHTTPリクエストを受信し、配備記述子に従って該当のWebページを返却する(ステップS306)。なお、Webページには、パスワードの入力が含まれるので、「CONTAINS_PASSWORD_FIELD」パラメータが追加されている。
そして、コンテンツ所有者がブラウザ30から「ID」、「パスワード」を入力してログインする(ステップS307)。そして、ブラウザ30からロードバランサ40に「ID」、「パスワード」が通知され、ロードバランサ40が再度同一のAPサーバ20に送信する(ステップS308)。
そして、APサーバ20は、フィルタプログラムを呼び出し、「CONTAINS_PASSWORD_FIELD」パラメータが存在するため、セッション情報にコンテンツ所有者のIDを追加する(ステップS309)。続いて、APサーバ20は、配備記述子に従ってURLに対応するクラスファイルを呼び出し、認証を行ってコンテンツ所有者にWebページを返却する(ステップS310)。
その後、コンテンツ所有者が日記などのコンテンツをブラウザから入力して登録ボタンを押下すると(ステップS311)、コンテンツがロードバランサ40経由でAPサーバ20に送信され、URLに対応するクラスファイルが呼び出される(ステップS312)。そして、登録のプログラムが更新系であるため、更新用DB60に対して書き込みが行われ(ステップS313)、APサーバ20が登録完了ページをコンテンツ所有者に返却する(ステップS314)。
続いて、コンテンツ所有者が自分で登録したコンテンツの一覧の参照を要求するために、コンテンツの一覧の選択ボタンを押下すると(ステップS315)、ロードバランサ40経由でAPサーバ20にリクエストが送信され、URLに対応するクラスファイルが呼び出される(ステップS316)。そして、APサーバ20は、一覧表示画面が参照系であり、所有者のIDがSQL内に含まれているため更新用DB60のコネクションが使用され、更新用DB60に対して参照が行われる(ステップS317)。
次に、図14を用いて、コンテンツ参照処理を説明する。図14に示すように、APサーバ20は、配備記述子を読み込み(ステップS401)、リスナクラスを実行して(ステップS402)、APサーバ20のメモリ内に参照用DB50および更新用DB60のURLを保存する(ステップS403)。そして、コンテンツ読者がブラウザ30からサイトのトップページのURLを入力してロードバランサ40にアクセスすると(ステップS404)、ロードバランサ40がHTTPリクエストをAPサーバ20に送信する(ステップS405)。
続いて、APサーバ20は、ロードバランサ40からHTTPリクエストを受信し、配備記述子に従って該当のWebページを返却する(ステップS406)。なお、Webページには、パスワードの入力が含まれるので、「CONTAINS_PASSWORD_FIELD」パラメータが追加されている。
そして、コンテンツ読者がブラウザ30から「ID」、「パスワード」を入力してログインする(ステップS407)。そして、ブラウザ30からロードバランサ40に「ID」、「パスワード」が通知され、ロードバランサ40が再度同一のAPサーバ20に送信する(ステップS408)。
そして、APサーバ20は、フィルタプログラムを呼び出し、「CONTAINS_PASSWORD_FIELD」パラメータが存在するため、セッション情報にコンテンツ読者のIDを追加する(ステップS409)。続いて、APサーバ20は、配備記述子に従ってURLに対応するクラスファイルを呼び出し、認証を行ってコンテンツ読者にWebページを返却する(ステップS410)。
その後、コンテンツ読者が読みたいコンテンツ所有者を選択し、そのコンテンツ一覧ボタンを押下すると(ステップS411)、ロードバランサ40経由でAPサーバ20にリクエストが送信され、URLに対応するクラスファイルが呼び出される(ステップS412)。そして、APサーバ20は、一覧表示画面が参照系であり、所有者のIDがSQL内に含まれていないため参照用DB50のコネクションが使用され、参照用DB50に対して参照が行われる(ステップS413)。なお、レプリケーションのタイミングによっては、最新のコンテンツが見られない可能性がある。
[実施例2の効果]
上述してきたように、配備サーバ10は、最新のコンテンツを保持する更新用DB60と、更新用DB60が保持するコンテンツの複製を保持する参照用記憶部50とに記憶されたコンテンツの所有者の利用者IDを保存するServletフィルタを配備記述子に追加する。そして、配備サーバ10は、コンテンツの参照を要求する利用者の利用者IDとプログラムによって保存された利用者IDとを用いて更新用DB60または参照用DB50にアクセスするプログラムをデータベースへのアクセスを行うJavaクラスに埋め込む。
このため、配備サーバ10は、プログラムを手動で変更することなく、プログラムを記述するための開発およびテストにかかるコストを削減してアクセス先データベースの振り分けを適切に行うことができる。
また、実施例2によれば、配備サーバ10は、プログラム追加部が追加するプログラムは、利用者のリクエストにパスワードが含まれる場合に、リクエストを記述するリクエストテキストをコンテンツ所有者の利用者IDとして保存する。このため、IDとパスワードは同一の入力フォームを用いられることが多く、適切に利用者IDを取得することができる。
また、実施例2によれば、配備サーバ10は、所有者の利用者IDを保存するプログラムを追加するとともに、更新用DB60および参照用DB50のコネクション情報を作成し、コネクション情報を用いて更新用DB60または参照用DB50にアクセスするプログラムを、データベースへのアクセスを行うJavaクラスに埋め込む。この結果、更新用DB60および参照用DB50に対して事前に作成されたコネクション情報を用いてアクセスすることが可能である。
ところで、上記の実施例2では、Webコンテンツ変換部14の代わりにServletフィルタが、HTMLファイルの中に「<input type=“password” name=“***”>」を検出した場合に、同じフォーム要素内に<input type=“hidden”name=“CONTAINS_PASSWORD_FIELD”value=“TRUE”>を追加するようにしてもよい。
そこで、以下の実施例3では、Servletフィルタが、アプリが出力したHTML情報を変換して、「HTMLファイルの中に「<input type=“password” name=“***”>」を検出した場合に、同じフォーム要素内に<input type=“hidden”name=“CONTAINS_PASSWORD_FIELD”value=“TRUE”>を追加する」処理を行う場合として、図15および図16を用いて、実施例3に係る配備サーバについて説明する。図15は、実施例3に係る配備サーバの構成を示す図である。図16は、Webアプリケーションシステムの処理を説明する図である。
まず最初に、実施例3に係る配備サーバ10aの構成を説明する。図15に示すように、配備サーバ10aは、図3に示した配備サーバ10と比較して、Webコンテンツ変換部14がなく、フィルタクラスAを新たに有する点が相違する。かかる配備サーバ10aにおいて、フィルタクラスAは、内部に前処理を行うための前処理フィルタと、後処理を行うための後処理フィルタを有している。前処理フィルタの役割が実施例3のフィルタクラスと同様であるが、後処理フィルタが後処理としてHTML情報を変更するための処理を行う。
後処理は、アプリが出力したHTMLを変換して、実施例1のWebコンテンツ変換部14と同様に、「HTMLファイルの中に「<input type=“password” name=“***”>」を検出した場合に、同じフォーム要素内に<input type=“hidden”name=“CONTAINS_PASSWORD_FIELD”value=“TRUE”>を追加する」処理を行う。
これにより、実施例2とほぼ同等のフローで同等の機能を提供することが可能となる。また、実施例3では、最終的に出力されるHTML情報に対して変換が行われる利点がある。
ここで、図16を用いて、実施例3にかかるWebアプリケーションシステムの処理を説明する。図16は、Webアプリケーションシステムの処理を説明する図である。図16に示すように、実施例3にかかるWebアプリケーションシステムでは、ブラウザ30からログイン時に利用者IDの入力が受け付けられると、LB40に利用者IDを送信する(図16の(1)参照)。そして、LB40からAPサーバ20に利用者IDが送信されると、フィルタAがパスワードとともに送られた文字列を利用者IDと特定し、セッション情報に利用者IDを格納する(図16の(2)参照)。
その後、ブラウザ30からデータ参照要求を受け付けると(図16の(3)参照)、LB40を介して、APサーバ20にデータ参照要求を送信する。そして、APサーバ20のアプリは、データ参照要求を受け付けると、SQLを発行する。続いて、APサーバ20のDB振り分けエンジンがSQLを解析し、where句内に利用者IDと一致するものが1件以上あるかセッション情報の利用者IDを参照する(図16の(4)参照)。
この結果、where句内に利用者IDと一致するものが1件以上ある場合には、更新用DB60に問い合わせ、また、利用者IDと一致するものがない場合には、参照用DB50に問い合わせる。
このように実施例3によれば、SPファイルやHTMLファイルを使わずに、直接ServletクラスからHTML情報を生成する場合には、最終的に出力されるHTML情報に対して変換を行ことができる。
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では実施例4として本発明に含まれる他の実施例を説明する。
(1)システム構成等
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、ファイル解凍部11と配備記述子変換部12を統合してもよい。
(2)プログラム
なお、本実施例で説明したアプリケーション配備方法は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク(FD)、CD−ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行することもできる。
1 アプリケーション配備装置
1a プログラム追加部
1b プログラム変換部
2 アプリケーションサーバ
3 利用者端末
4 更新用記憶部
5 参照用記憶部
10 配備サーバ
11 ファイル解凍部
12 配備記述子変換部
13 DBコネクション変換部
14 Webコンテンツ変換部
15 ファイル圧縮部
20 APサーバ
30 ブラウザ
40 ロードバランサ
50 参照用DB
60 更新用DB

Claims (5)

  1. 最新のコンテンツを保持する更新用記憶部と、該更新用記憶部が保持するコンテンツの複製を保持する参照用記憶部とに記憶されたコンテンツの所有者の識別子を保存する処理をコンピュータに実行させる保存プログラムのコードを、コンテンツへアクセスする処理をコンピュータに実行させるコンテンツアクセスプログラムのコードへ追加するプログラムコード追加部と、
    前記コンテンツの参照を要求する利用者の識別子と前記保存プログラムの実行によって保存された識別子とを用いて前記更新用記憶部または前記参照用記憶部にアクセスする処理をコンピュータに実行させるアクセスプログラムへ、前記コンテンツアクセスプログラムを変換するプログラム変換部と
    を有することを特徴とするアプリケーション配備装置。
  2. 前記プログラムコード追加部によりコードが追加された前記コンテンツアクセスプログラムは、該コンテンツアクセスプログラムのコードにおける前記利用者のリクエストにパスワードが含まれる場合に、該リクエストを記述するリクエストテキストをコンテンツ所有者の識別子として保存する処理をコンピュータに実行させるプログラムである
    ことを特徴とする請求項1に記載のアプリケーション配備装置。
  3. 前記プログラムコード追加部は、前記所有者の識別子を保存する処理をコンピュータに実行させる前記保存プログラムのコードとともに、前記更新用記憶部および前記参照用記憶部のコネクション情報を作成する情報作成プログラムのコード前記コンテンツアクセスプログラムのコードへ追加し、
    前記プログラム変換部は、前記コネクション情報を用いて前記更新用記憶部または前記参照用記憶部にアクセスするする処理をコンピュータに実行させる前記アクセスプログラムへ、前記コンテンツアクセスプログラムを変換する
    ことを特徴とする請求項1または2に記載のアプリケーション配備装置。
  4. 最新のコンテンツを保持する更新用記憶部と、該更新用記憶部が保持するコンテンツの複製を保持する参照用記憶部とに記憶されたコンテンツの所有者の識別子を保存する処理をコンピュータに実行させる保存プログラムのコードを、コンテンツへアクセスする処理をコンピュータに実行させるコンテンツアクセスプログラムのコードへ追加するプログラムコード追加ステップと、
    前記コンテンツの参照を要求する利用者の識別子と前記保存プログラムの実行によって保存された識別子とを用いて前記更新用記憶部または前記参照用記憶部にアクセスする処理をコンピュータに実行させるアクセスプログラムへ、前記コンテンツアクセスプログラムを変換するプログラム変換ステップと
    を含んだことを特徴とするアプリケーション配備方法。
  5. 最新のコンテンツを保持する更新用記憶部と、該更新用記憶部が保持するコンテンツの複製を保持する参照用記憶部とに記憶されたコンテンツの所有者の識別子を保存する処理をコンピュータに実行させる保存プログラムのコードを、コンテンツへアクセスする処理をコンピュータに実行させるコンテンツアクセスプログラムのコードへ追加するプログラムコード追加手順と、
    前記コンテンツの参照を要求する利用者の識別子と前記保存プログラムの実行によって保存された識別子とを用いて前記更新用記憶部または前記参照用記憶部にアクセスする処理をコンピュータに実行させるアクセスプログラムへ、前記コンテンツアクセスプログラムを変換するプログラム変換手順と
    をコンピュータに実行させることを特徴とするアプリケーション配備プログラム。
JP2010219871A 2010-09-29 2010-09-29 アプリケーション配備装置、アプリケーション配備方法およびアプリケーション配備プログラム Expired - Fee Related JP5552991B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010219871A JP5552991B2 (ja) 2010-09-29 2010-09-29 アプリケーション配備装置、アプリケーション配備方法およびアプリケーション配備プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010219871A JP5552991B2 (ja) 2010-09-29 2010-09-29 アプリケーション配備装置、アプリケーション配備方法およびアプリケーション配備プログラム

Publications (2)

Publication Number Publication Date
JP2012073950A JP2012073950A (ja) 2012-04-12
JP5552991B2 true JP5552991B2 (ja) 2014-07-16

Family

ID=46170029

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010219871A Expired - Fee Related JP5552991B2 (ja) 2010-09-29 2010-09-29 アプリケーション配備装置、アプリケーション配備方法およびアプリケーション配備プログラム

Country Status (1)

Country Link
JP (1) JP5552991B2 (ja)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002132568A (ja) * 2000-10-30 2002-05-10 Nec Corp 顧客管理システム及び顧客管理方法
JP4702835B2 (ja) * 2005-07-06 2011-06-15 株式会社日立ソリューションズ Webサービスカスタマイズシステム
JP2007219608A (ja) * 2006-02-14 2007-08-30 Fujitsu Ltd 負荷分散処理プログラム及び負荷分散装置
JP2008186425A (ja) * 2007-01-31 2008-08-14 Ntt Docomo Inc データ管理システム
JP5454201B2 (ja) * 2010-02-15 2014-03-26 富士通株式会社 データストア切替装置、データストア切替方法およびデータストア切替プログラム

Also Published As

Publication number Publication date
JP2012073950A (ja) 2012-04-12

Similar Documents

Publication Publication Date Title
US10642904B2 (en) Infrastructure enabling intelligent execution and crawling of a web application
CN109104467A (zh) 开发环境构建方法、装置以及平台***和存储介质
US20090288099A1 (en) Apparatus and method for accessing and indexing dynamic web pages
US7797432B2 (en) Sharing state information between dynamic web page generators
US12010165B2 (en) Cross-platform module for loading across a plurality of device types
CN104765592B (zh) 一种面向网页采集任务的插件管理方法及其装置
US20150317042A1 (en) System and Methods for Loading an Application and its Modules in a Client Device
CN101184105A (zh) 一种用于更新数据的客户端装置和方法
CN103248641A (zh) 网络下载方法、装置及***
CN107315972A (zh) 一种大数据非结构化文件动态脱敏方法及***
JP5049172B2 (ja) リバースプロキシシステム
JP2008165447A (ja) データアクセス装置、データアクセス方法、及び、コンピュータプログラム
JP5499524B2 (ja) 中継プログラムおよび中継装置
JP2010102625A (ja) ユニフォームリソースロケータ書換方法及び装置
US7539776B1 (en) Dynamic uniform resource locator compression
CN101300559A (zh) 可扩展远程标签标记***和方法
US20070055663A1 (en) Programmatic response for detected variants of HTTP requests
CN104980464A (zh) 一种网络请求处理方法、网络服务器和网络***
JP2007323225A (ja) システム、端末、サーバ、及び、動的情報提供方法
JP5552991B2 (ja) アプリケーション配備装置、アプリケーション配備方法およびアプリケーション配備プログラム
CN111680247A (zh) 网页字符串的本地调用方法、装置、设备及存储介质
JP2010049397A (ja) コンポーネント連携シナリオ統合開発環境提供システム、シナリオ作成支援方法、及び、プログラム
WO2001048630A9 (en) Client-server data communication system and method for data transfer between a server and different clients
CN102999580A (zh) 密码输入框元素处理方法及浏览器
JP5243452B2 (ja) ブラウザプログラム及び端末装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130702

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140131

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140204

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140407

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140430

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140513

R150 Certificate of patent or registration of utility model

Ref document number: 5552991

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees