Sun GlassFish Enterprise Server v3 管理ガイド

第 6 章 Web アプリケーションの管理

この章では、Sun GlassFishTM Enterprise Server v3 環境で Web アプリケーションを管理する方法について説明します。

ここでは、次のテーマを取り上げます。

これらのタスクの一部を 管理コンソール を使用して実行する場合の手順は、管理コンソール のオンラインヘルプで説明します。

サーブレッドの呼び出し方法について

Enterprise Server に配備されたサーブレットは、ブラウザに URL を指定して呼び出すことができます。また、HTML ファイルや JSP ファイル内にリンクとして埋め込まれたサーブレットも呼び出すことができます。サーブレットの呼び出し URL の形式は次のとおりです。

http://server:port/context-root/servlet-mapping?name=value

次の表に URL の各セクションの意味を示します。

表 6–1 アプリケーション内のサーブレットを呼び出す URL のフィールド

URL 要素 

説明 

server:port

IP アドレス (またはホスト名) および省略可能のポート番号。 

仮想サーバーのデフォルト Web モジュールにアクセスする場合は、この URL セクションだけを指定します。名前と値のパラメータも指定するのでない限り、context-root servlet-name を指定する必要はありません。

context-root

アプリケーションのコンテキストルートは、application.xmlsun-application.xml、または sun-web.xml ファイルの context-root 要素で定義されます。個別に配備される Web モジュールのコンテキストルートは、配備中に指定されます。

アプリケーションと個別に配備された Web モジュールのどちらでも、デフォルトのコンテキストルートは WAR ファイルの名前から .war のサフィックスを除いた文字列になります。

servlet-mapping

web.xml ファイルで設定された servlet-mapping

?name= value...

省略可能な要求のパラメータ。 


例 6–1 URL によるサーブレットの呼び出し

この例では、localhost はホスト名、MortPages はコンテキストルート、および calcMortgage はサーブレットマッピングを表します。

http://localhost:8080/MortPages/calcMortgage?rate=8.0&per=360&bal=180000


例 6–2 JSP ファイル内でのサーブレットの呼び出し

JSP ファイル内でサーブレットを呼び出す場合は、相対パスを使用できます。次に例を示します。

<jsp:forward page="TestServlet"/><jsp:include page="TestServlet"/>

サーブレットのログ出力の変更

ServletContext.log のメッセージは、サーバーログに送信されます。デフォルトでは、サーブレットの System.out および System.err 出力はサーバーログに送信されます。起動中に、サーバーログのメッセージは System.err 出力にエコーされます。またデフォルトでは、System.err 出力用の Windows 専用コンソールはありません。

これらのデフォルト設定は、管理コンソール の「システムログに書き込み」ボックスを使用して変更できます。このボックスにチェックマークを付けると、System.out 出力がサーバーログに送信されます。チェックマークを外すと、System.out 出力はシステムのデフォルトの場所だけに送信されます。

Web アプリケーションのグローバルな機能の定義

default-web.xml ファイルを使用して、フィルタやセキュリティー制約などの、すべての Web アプリケーションに適用される機能を定義できます。

たとえば、ディレクトリの一覧表示は、セキュリティーの強化のためにデフォルトで無効化されます。ドメインの default-web.xml ファイルでディレクトリの一覧表示を有効にするには、servlet-namedefault であるサーブレットの定義を検索し、listings という名前の init-paramtrue に設定します。続いて、サーバーを再起動します。

<init-param>
   <param-name>listings</param-name>
   <param-value>true</param-value>
</init-param>

listingstrue に設定した場合、ディレクトリの一覧表示をソートする方法も決定できます。sortedBy という名前の init-param の値を、NAMESIZE、または LAST_MODIFIED に設定します。続いて、サーバーを再起動します。

<init-param>
   <param-name>sortedBy</param-name>
   <param-value>LAST_MODIFIED</param-value>
</init-param>

default-web.xml ファイルの mime-mapping 要素はグローバルで、すべての Web アプリケーションで継承されます。Web アプリケーションの web.xml ファイルで mime-mapping 要素を使用して、これらのマッピングを上書きするか、独自に定義することができます。mime-mapping 要素の詳細は、Servlet 仕様を参照してください。

default-web.xml ファイルは、管理コンソール を使用して編集するか、次の手順で直接編集することができます。

Proceduredefault-web.xml ファイルを使用する

  1. フィルタ、セキュリティー制約、またはその他の機能の JAR ファイルを、domain-dir/lib ディレクトリに配置します。

  2. 配置した JAR ファイルを参照するように、domain-dir/config/default-web.xml ファイルを編集します。

  3. 変更内容を適用するために、Enterprise Server を再起動します。

    「ドメインの再起動」を参照してください。

URL のリダイレクト

古い URL に対する要求を、新しい URL に対する要求として処理するように指定できます。この処理は、URL の「リダイレクト」と呼ばれます。

仮想サーバーのリダイレクトされる URL を指定するには、redirect_ n プロパティーを使用します。n は正の整数で、複数の指定が可能です。各 redirect_n プロパティーは、仮想サーバーに配備されたすべての Web アプリケーションによって継承されます。

redirect_n プロパティーの値には 2 つの構成要素があり、任意の順番で指定できます。


例 6–3 URL のリダイレクト

この例では、from に指定した dummyetude にリダイレクトします。

<property name="redirect_1" value="from=/dummy url-prefix=http://etude"/>

mod_jk の管理

mod_jk コネクタを使用すると、Web コンテナを Apache HTTP Server などの Web サーバーに接続できます。mod_jk は Enterprise Server に付属するコネクタで、これを使用することにより、Enterprise Server の前に Apach HTTP Server をたてることができます。この処理の一般的な目的は、静的なリソースに対する要求を Apache HTTP Server に処理させ、サーブレットや JavaServerTM Pages (JSP) などの動的なリソースに対する要求を、Enterprise Server のバックエンドインスタンスに転送して処理することです。

負荷分散の目的で、mod_jk を JSP またはサーブレットエンジンで直接使用することもできます。

ここでは、次のテーマを取り上げます。

Proceduremod_jk を有効にする

ここで説明するように mod_jk コネクタを有効化することで、Enterprise Server と Apache HTTP Server を連携させることができます。ネットワークリスナーの jk-enabled 属性を使用する場合、追加の JAR ファイルを /lib ディレクトリにコピーする必要はありません。ネットワークリスナー属性の jk-enabled を使用することで、JK コネクタを別の仮想サーバーに作成することもできます。

  1. Apache HTTP Server と mod_jk をインストールします。

  2. 次のファイルを設定します。

    • apache2/conf/httpd.conf (Apache の主要な構成ファイル)

    • apache2/config/workers.properties または domain-dir /config/glassfish-jk.properties (http://tomcat.apache.org/tomcat-5.5-doc/config/ajp.html で説明されている属性のデフォルト以外の値を使用する場合)

    worker.properties ファイルと glassfish-jk.properties ファイルの両方を使用する場合は、httpd.conf で参照されている (または、httpd.conf で最初に参照される) ファイルが優先されます。

  3. Apache HTTP Server (httpd) を起動します。

  4. Web アプリケーションが少なくとも 1 つ配備されている Enterprise Server を起動します。

    配備済み Web アプリケーションを少なくとも 1 つ使用する Web コンテナが起動されていなければ、mod_jk コネクタは起動できません。

  5. 次のコマンドを実行して、HTTP リスナーを作成します。


    asadmin> create-http-listener --listenerport 8009 
    --listeneraddress 0.0.0.0 --defaultvs server listener-name
    
  6. 次のコマンドを実行して、mod_jk を有効にします。


    asadmin> set server-config.network-config.network-listeners.
    network-listener.listener-name.jk-enabled=true
    

    listener-name は、mod_jk を有効にするネットワークリスナーの ID です。

  7. glassfish-jk.properties ファイルを使用していて、httpd.conf でこのファイルを参照していない場合は、次のコマンドを実行してファイルの場所を指定します。


    asadmin> create-jvm-options -Dcom.sun.enterprise.web.connector.enableJK.propertyFile=
    domain-dir/config/glassfish-jk.properties
    
  8. 変更内容を適用するために、Enterprise Server を再起動します。

    「ドメインの再起動」を参照してください。


例 6–4 mod_jk を使用する場合の httpd.conf ファイルの設定

この例では、httpd.conf ファイルを示します。

LoadModule jk_module /usr/lib/httpd/modules/mod_jk.so
JkWorkersFile /etc/httpd/conf/worker.properties
# Where to put jk logs
JkLogFile /var/log/httpd/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel debug
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
# Send all jsp requests to GlassFish
JkMount /*.jsp worker1
# Send all glassfish-test requests to GlassFish
JkMount /glassfish-test/* worker1


例 6–5 mod_jk を使用する場合の worker.properties ファイルの設定

この例では、worker.properties または glassfish-jk.properties ファイルを示します。

# Define 1 real worker using ajp13
worker.list=worker1
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009

参照

Apache の詳細は、http://httpd.apache.org/ を参照してください。

Proceduremod_jk と Enterprise Server を使用して負荷分散する

負荷分散は、1 台のコンピュータで実行しなければならない作業を複数のコンピュータに分配し、同じ時間でより多くの作業を行う処理です。

  1. 「mod_jk を有効にする」の手順を実行します。

  2. 少なくとも 1 つの Web アプリケーションが配備されている、別の Enterprise Server を起動します。

    配備済み Web アプリケーションを少なくとも 1 つ使用する Web コンテナが起動されていなければ、mod_jk コネクタは起動できません。

  3. 次のようなコマンドを実行して、HTTP リスナーを作成します。


    asadmin> create-http-listener --listenerport 8010 --listeneraddress 0.0.0.0 
    --defaultvs server my-connector
    

    複数のインスタンスが同じマシンで動作している場合は、別の JK ポートを選択する必要があります。ポートは worker.properties ファイルの worker.worker*.port に一致する必要があります。以下のプロパティーファイルの例を参照してください。

  4. 次のコマンドを実行して、mod_jk を有効にします。


    asadmin> set server-config.network-config.network-listeners.
    network-listener.listener-name.jk-enabled=true
    

    listener-name は、mod_jk を有効にするネットワークリスナーの ID です。

  5. 変更を適用するには、Apache と Enterprise Server を再起動します。

    「ドメインの再起動」を参照してください。


例 6–6 負荷分散を行う場合の httpd.conf ファイルの設定

この例では、httpd.conf ファイルを示します。


LoadModule jk_module /usr/lib/httpd/modules/mod_jk.so 
JkWorkersFile /etc/httpd/conf/worker.properties 
# Where to put jk logs 
JkLogFile /var/log/httpd/mod_jk.log 
# Set the jk log level [debug/error/info] 
JkLogLevel debug 
# Select the log format 
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " 
# JkOptions indicate to send SSL KEY SIZE, 
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories 
# JkRequestLogFormat set the request format 
JkRequestLogFormat "%w %V %T" 
# Send all jsp requests to GlassFish 
JkMount /*.jsp worker1 
# Send all glassfish-test requests to GlassFish 
JkMount /glassfish-test/* loadbalancer


例 6–7 負荷分散を行う場合の worker.properties ファイルの設定

この例では、worker.properties または glassfish-jk.properties ファイルを示します。worker.worker*.port は、作成した JK ポートに一致している必要があります。


worker.list=loadbalancer
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=1
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300
worker.worker2.type=ajp13
worker.worker2.host=localhost
worker.worker2.port=8010
worker.worker2.lbfactor=1
worker.worker2.socket_keepalive=1
worker.worker2.socket_timeout=300
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=worker1,worker2