| 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. |
|