2. Webアプリケーション

本編では、具体的な事例を用意し、それに応じた Webアプリケーションの設計方法について説明します。

2.1. システム構成

Webサーバマシン上にWebサーバとWebコンテナをインストールしたシステム構成を想定しています。
また、[ 2.4. Webアプリケーション/Webサーバの負荷分散 ]では、Webサーバマシンを複数台用いるシステム構成を想定しています。

2.2. アプリケーション設計

Webアプリケーションの設計については、 [ アプリケーション開発ガイド(Java EE) > 2. Webアプリケーションの開発 ] を参照してください。

2.3. Webアプリケーションのセキュリティ

WebOTX Webコンテナでは、SecurityManagerを利用しています。

SecurityManagerを利用することにより、Webアプリケーションに含まれるトロイの木馬的な コードや、その他の不正なコードからサーバを保護することができます。
SecurityManagerがセキュリティポリシーの違反を検出したとき、AccessControlExceptionまたはSecurityExceptionが発生します。

2.3.1. ポリシの追加

Webコンテナ、および Webアプリケーションのセキュリティポリシーは、ドメインディレクトリ config 配下にある server.policy というファイルに記述します。このファイルに必要なポリシーを追加します。追加したらドメインを再起動します。

2.3.2. その他ファイル、ディレクトリへのアクセス権

Webコンテナは、さまざまなディレクトリやファイルにアクセスしながら動作します。ログ/デバッグ設定の「ログ出力ディレクトリ」など、ディレクトリを変更できる箇所も多数あります。このディレクトリやファイルを変更した時、変更先のパスに Webコンテナのアクセス権がない場合に Webコンテナが正常に動作しない可能性があります。特に Unix環境では厳しいアクセス制限がかけられている場合が多いため、ディレクトリ等を変更した時に動作がおかしい場合は、アクセス権を確認してみてください。

2.4. Webアプリケーション/Webサーバの負荷分散

Webアプリケーション/Webサーバの負荷分散を行うには、負荷分散装置(サーバスイッチ)等を利用し、複数のWebサーバで処理を分散させて実行させる方法が一般的です。
この章ではサーバスイッチを利用したWebアプリケーション/Webサーバの負荷分散について説明します。

2.4.1. サーバスイッチとは

クライアントからの要求を一元的に管理し、同等の機能を持つ複数のサーバ(Webサーバ)に要求を転送する装置です。各サーバに要求を分散して送信し、各サーバが快適な応答速度を保つことを目的としています。単純なWebアプリケーションなら、各Webサーバに要求を均等に配分できれば十分ですが、サーバの能力にばらつきがある場合や、Webアプリケーションの処理が複雑で要求毎に処理時間が違うような場合には、各サーバの反応速度に応じて要求を転送するような機能を持つ負荷分散装置が必要になります。また、Webアプリケーションで、クライアント毎に情報を保持して一連のトランザクションを行う場合には、同じクライアントからの通信を常に同じサーバに転送するという機能も必要となります。

サーバスイッチとして、NECからはSS8000シリーズなどが提供されています。

2.4.2. Webアプリケーション作成時の留意事項

Webアプリケーションでクライアントとの間で会話的な処理をする場合には、次のように2つの方法があります。

Webアプリケーションでセッションオブジェクトに情報を保持する場合、サーバスイッチの設定で、同じクライアントからの要求は一定時間常に同じWebサーバへ転送するか、Webコンテナの提供するクラスタ対応の機能を利用します。

Webコンテナのクラスタ対応の機能では、JNDIを利用していますので、Webコンテナが動作する各マシンにJNDIをインストールする必要があります。クラスタ化したWebコンテナ上で動作させるWebアプリケーションの配備記述子(web.xml)には、<distributable>の指定が必要です。また、セッションオブジェクトに保持できる情報は、シリアライズ可能な情報に限られます。

その他の方法として、クライアント毎の情報をデータベースに保持する方法もあります。この場合、データベース上の情報とクライアントとの関連づけをおこなう必要があります。その方法としては、Cookieを使う方法とURLRewritingを使う方法、hiddenタグを使う方法などがあります。

2.4.3. サーバスイッチの設定

[ 2.4.2. Webアプリケーション作成時の留意事項 ] にあるように、Webアプリケーションでセッションオブジェクトを利用して、情報を保持する場合にはサーバスイッチに設定が必要になります。

サーバスイッチは、同じクライアントからの要求を一定時間同じサーバへ転送するよう設定する必要があります。その時間は、Webアプリケーションのセッションタイムアウト時間より長くする必要があります。

サーバスイッチの詳細については、導入されるサーバスイッチのマニュアルを参照してください。

2.5. Webアプリケーションの性能改善

Webアプリケーションの性能改善のポイントは次のようになります。

2.6. Webアプリケーションにおけるリソースの有効活用

Webアプリケーションにおいてリソースを有効に活用するには次のようなポイントがあります。