Oracle Containers for J2EE サーブレット開発者ガイド 10g(10.1.3.1.0) B31859-01 |
|
この章では、サーブレットの効率とパフォーマンスを最大にするためのプログラミングのヒントを提供します。一般的な提案とともに、セッション、セキュリティおよびスレッド・モデルに関する提案を示します。また、パフォーマンスを監視するためのOracleダイナミック・モニタリング・サービス(DMS)の概要も示します。次の項目について説明します。
この項では、セッションを使用する際の考慮事項について説明します。
setAttribute()
コールごとにレプリケーションがトリガーされるため、サーブレットでコールの回数が多い場合、パフォーマンスに影響を与えるおそれがあります。
OC4Jでのクラスタリングの詳細は、『Oracle Containers for J2EE開発者ガイド』を参照してください。
OC4Jサーブレット・コンテナで稼働するWebアプリケーションのセキュリティに関しては、次の点を考慮する必要があります。
global-web-application.xml
ファイルまたはorion-web.xml
ファイルにおいて、<orion-web-app>
の<jazn-web-app>
サブ要素に適切な設定が反映されていることを確認します。特定のセキュリティ・サブジェクトの権限を使用してサーブレットを起動するには、これらの機能を適切に設定する必要があります。 Application Server Controlデプロイ・プラン・エディタのjaznWebApp
プロパティによって、これらを編集できます。詳細は、『Oracle Containers for J2EEデプロイメント・ガイド』を参照してください。
web.xml
デプロイメント・ディスクリプタの<security-role>
要素を使用したセキュリティ制約とセキュリティ・ロールの標準サポートが用意されています。一般情報については、サーブレット仕様を参照してください。OC4Jには、global-web-application.xml
ファイルの<security-role-mapping>
要素を使用した関連サポートも備わっています。
クラス名による起動では、web.xml
ファイルで特に対処しないかぎり、標準のセキュリティ制約が無視されるおそれがあります。また、サーブレットをクラスで起動すると、スローされる例外によって、サーブレットの場所の物理パスが公開される可能性があり、非常に危険です。
特に本番環境でのセキュリティの問題を解決するには、次のいずれかの方法で、クラス名によるサーブレット起動を無効にします。
http.webdir.enable
の値をfalse
に設定。この結果、servlet-webdir
設定は無視されます。 (OC4Jのシステム・プロパティに関する一般的な情報は、『Oracle Containers for J2EE構成および管理ガイド』を参照してください。)
global-web-application.xml
またはorion-web.xml
を使用して、servlet-webdir
の値を""
(空の引用符)に設定。Application Server Controlデプロイ・プラン・エディタのservletWebdir
プロパティによって、これを編集できます。
(servlet-webdir
の設定に関する追加情報を含む、クラス名による起動の詳細は、「OC4J開発時におけるクラス名によるサーブレットの起動」を参照してください。)
たとえば、orion-web.xml
で次のような構成を行うと、クラス名による起動が無効になります。
<orion-web-app ... servlet-webdir="" ... > ... </orion-web-app>
java.security.SecureRandom
機能を使用して、ランダムなセッションID番号を生成します。
追加情報は、「orion-web.xmlおよびglobal-web-application.xmlの要素と属性」に示されている参照ドキュメントも参照してください。
非分散環境のサーブレットでは、サーブレット・コンテナは1回のサーブレット宣言当たり1つのサーブレット・インスタンスのみ使用します。分散環境では、コンテナは各JVMの1回のサーブレット宣言当たり1つのサーブレット・インスタンスを使用します。したがって、OC4Jサーブレット・コンテナを含めたサーブレット・コンテナがサーブレットに対する同時リクエストを処理するには、一般的に複数のスレッドを使用してサーブレットの主要メソッドのservice()
を同時に複数実行します。
サーブレットの開発者は、この点を念頭に置き、複数のスレッドによる同時処理用の措置を講じ、共有リソースへのアクセスが同期化または調整されるよう、サーブレットを設計する必要があります。共有リソースには、主に2種類あります。
1つの方法は、service()
メソッド全体を同期化することです。ただし、一方で、これはパフォーマンスに影響を与えるおそれがあります。
よりよい方法は、同期ブロックにより、インスタンスまたはクラス・フィールドを選択的に保護したり、外部リソースへのアクセスを選択的に保護することです。
これらが実行できない場合のために、サーブレット仕様では、シングルスレッド・モデルをサポートしています。サーブレットがjavax.servlet.SingleThreadModel
インタフェースを実装する場合、サーブレット・コンテナは、サーブレットのどのインスタンスのservice()
メソッドにも、複数のリクエスト・スレッドが存在しないことを保証する必要があります。このために、OC4Jでは、通常サーブレット・インスタンスのプールを作成し、各同時リクエストを個別のインスタンスが処理します。ただし、このプロセスはサーブレット・コンテナのパフォーマンスに大きく影響するおそれがあり、なるべく回避する必要があります。さらに、SingleThreadModel
インタフェースは、サーブレット仕様のバージョン2.4では使用されなくなります。
マルチスレッドの一般情報は、次のWebサイトで、Sun社の『Java Tutorial on Multithreaded Programming』を参照してください。
http://java.sun.com/docs/books/tutorial/essential/threads/multithreaded.html
1つ以上のカスタム・スレッド・プールを作成して、デフォルト・スレッド・プールのかわりに選択したアプリケーションで使用できます。
server.xml
ファイルでカスタム・スレッド・プールを作成し、それを1つ以上の*-web-site.xml
ファイル内で参照してアプリケーションで使用できるようにします。
カスタム・スレッド・プールを作成するには、<custom-thread-pool>
要素をserver.xml
ファイルに追加します。 <custom-thread-pool>
要素は、<application-server>
要素のサブ要素です。
名前の属性は必要ですが、それ以外の属性はすべてオプションです。 <custom-thread-pool>
要素は、『Oracle Containers for J2EE構成および管理ガイド』の第10章「タスク・マネージャとスレッド・プールの構成」で説明する他のスレッド・プール要素と同一の属性を持ちます。 server.xml
ファイルの詳細は、『Oracle Containers for J2EE構成および管理ガイド』の付録B「OC4Jで使用される構成ファイル」の「OC4Jサーバー構成ファイル(server.xml)の概要」を参照してください。
server.xml
ファイルにmypool
という名前のカスタム・スレッド・プールを作成する例を次に示します。 この例では、mypool
を次のように指定します。
<application-server ...> ... <custom-thread-pool name="mypool" min="10" max="100" queue="50" keepAlive="700000" debug="true"/> ... </application-server>
アプリケーションにデフォルト・スレッド・プールのかわりにカスタム・スレッド・プールを使用するよ指示するには、1つ以上の*-web-site.xml
ファイル内の<web-site>
要素のcustom-thread-pool
属性に対する該当するカスタム・スレッド・プールの参照を追加します。
それぞれのWebアプリケーションは、*-web-site.xml
ファイルで指定されたWebサイトおよびポートに、<web-app>
要素で命名されて割り当てられ、custom-thread-pool
属性で命名されたカスタム・スレッド・プールを使用します。
*-web-site.xml
ファイルについては、『Oracle Containers for J2EE構成および管理ガイド』の付録B「OC4Jで使用される構成ファイル」の「Webサイト構成ファイル(*-web-site.xml)の概要」を参照してください。
srdemo-web-site.xml
ファイルの<web-app>
要素で命名するすべてのアプリケーションで使用されるmypool
カスタム・スレッド・プールの命名に使用するcustom-thread-pool
属性の例を次に示します。
<?xml version="1.0" ?>
- <web-site xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/web-site-10_0.xsd"
port="12501" protocol="ajp13" display-name="SRDEMO Web Site" custom-thread-pool="mypool" schema-major-version="10" schema-minor-version="0">
<default-web-app application="default" name="defaultWebApp" root="/j2ee" />
<web-app application="system" name="dms" root="/dmsoc4j" access-log="false" />
<web-app application="system" name="JMXSoapAdapter-web" root="/JMXSoapAdapter" />
<web-app application="default" name="jmsrouter_web" load-on-startup="true" root="/jmsrouter" />
<web-app application="ascontrol" name="ascontrol" load-on-startup="true" root="/em" />
<web-app application="bc4j" name="webapp" load-on-startup="true" root="/webapp" />
<web-app application="SRDEMO" name="SRDEMO-WEB" load-on-startup="true" root="/SRDEMO" />
<access-log path="../log/default-web-access.log" split="day" />
</web-site>
この項では、パフォーマンスに影響を与える可能性のある問題(主にこのマニュアルの他の部分で説明している内容)をまとめます。
global-web-application.xml
またはorion-web.xml
内の<orion-web-app>
の<expiration-setting>
サブ要素に反映されているように、指定したURLパターンに一致するページの期限を設定することが可能です。適切な設定により、アプリケーションへの負荷が減少し、パフォーマンスが向上します。 Application Server Controlデプロイ・プラン・エディタのexpirationSettings
プロパティによって、これを編集できます。詳細は、『Oracle Containers for J2EEデプロイメント・ガイド』を参照してください。
global-web-application.xml
またはorion-web.xml
内の<orion-web-app>
要素のfile-modification-check-interval
属性に反映されているように、ファイル変更チェック間隔の使用には注意が必要です。これは、Application Server Controlコンソールの「構成プロパティ」ページ(「「構成プロパティ」ページ」を参照)で、またはApplication Server Controlデプロイ・プラン・エディタのfileModificationCheckInterval
プロパティによって構成できます。 また、default-web-site.xml
内の<web-site>
要素のuse-keep-alives
属性にも注意が必要です。 この属性については、『Oracle Containers for J2EE構成および管理ガイド』を参照してください。
global-web-application.xml
またはorion-web.xml
内の<orion-web-app>
要素のsimple-jsp-mapping
およびenable-jsp-dispatcher-shortcut
属性は、パフォーマンスに大きな影響を与える可能性があります。 Application Server Controlデプロイ・プラン・エディタのenableJspDispatcherShortcut
およびsimpleJspMapping
プロパティによって、これらを編集できます。
default-web-site.xml
内の<web-app>
要素のshared
属性によって有効にすることができます。
server.xml
の<application-server>
要素のcheck-for-updates
フラグがオフになっていることを確認してください。このパラメータについては、『Oracle Containers for J2EE構成および管理ガイド』および『Oracle Containers for J2EEデプロイメント・ガイド』を参照してください。
追加情報は、「orion-web.xmlおよびglobal-web-application.xmlの要素と属性」に示されている参照ドキュメントも参照してください。
この項では、サーブレットのパフォーマンスの監視について説明します。
Oracle Application Server環境では、ダイナミック・モニタリング・サービス(DMS)により、OC4Jを含めた様々なコンポーネントにパフォーマンス監視機能が追加されます。DMSの目的は、組込みパフォーマンス測定により、実行時動作に関する情報をユーザーに提供し、ユーザーがパフォーマンスの問題を診断、分析およびデバッグできるようにすることです。DMSはこの情報をパッケージで提供し、この情報はライブ・デプロイ中を含め、いつでも使用できます。データはHTTPを通じて公開され、ブラウザで表示できます。
DMSモジュールの標準構成は、OC4Jのsystem-application.xml
ファイルおよびdefault-web-site.xml
ファイルに反映されます。system-application.xml
では、Webモジュールのdms
と、そのWARファイルへのパスが指定されます。default-web-site.xml
ファイルは、このWebモジュールがOC4Jデフォルト・アプリケーションにデプロイされていることを指定し、コンテキスト・パスにバインドします。これらのDMS構成は、直接変更しないでください。
DMSへのアクセス、DMS情報の表示およびDMSの構成(適切な場合)には、Application Server Controlを使用してください。
DMSの詳細は、『Oracle Application Serverパフォーマンス・ガイド』を参照してください。グローバルapplication.xml
ファイル(orion-application.xml
ファイルと同じ仕様を使用)の詳細は、『Oracle Containers for J2EE開発者ガイド』を参照してください。また、WebサイトのXMLファイルの詳細は、『Oracle Containers for J2EE構成および管理ガイド』を参照してください。
|
Copyright © 2006 Oracle Corporation. All Rights Reserved. |
|