Sun Java System Application Server Platform Edition 8.2 リリースノート

Web コンテナ

この節では、Web コンテナに関する既知の問題とその解決方法を示します。

--precompilejsp=true を使用してアプリケーションを配備すると、アプリケーションの JAR ファイルがロックされ、その後の配備取り消しや再配備に失敗することがある。(Windows のみ) (ID 5004315)

Windows にアプリケーションを配備するときに JSP のプリコンパイルを要求すると、それ以降、そのアプリケーションの配備取り消しや、そのアプリケーション (または同一モジュール ID を持つ任意のアプリケーション) の再配備を試みても、予期したとおりに動作しません。この問題は、JSP のプリコンパイル処理でアプリケーションの JAR ファイルが開かれたまま閉じられないため、Windows がこれらのファイルを配備取り消しで削除することや、これらのファイルを再配備で上書きすることを許可しないことにあります。

配備取り消しは、Application Server からアプリケーションが論理的に削除されるという点では成功します。また、asadmin ユーティリティーからエラーメッセージは返されませんが、アプリケーションのディレクトリとロックされた jar ファイルはサーバー上に残っています。サーバーのログファイルには、ファイルと アプリケーションのディレクトリの削除に失敗した旨のメッセージが出力されます。

配備取り消し後のアプリケーションの再配備が失敗するのは、既存のファイルとディレクトリをサーバーが削除しようとして失敗するからです。これは、最初に配備されたアプリケーションと同じモジュール ID を持つアプリケーションを配備しようとしたときにも発生します。アプリケーションのファイルを保持するディレクトリの名前を、サーバーはモジュール ID から決定するからです。

同様の理由から、配備取り消しをせずにアプリケーションを再配備しようとすると失敗します。

診断

アプリケーションを再配備しようとすると、または、配備取り消しを行なってから配備しようとすると、asadmin ユーティリティーは次のようなエラーを返します。

An exception occurred while running the command.  The exception message 
is: CLI171 Command deploy failed : Deploying application in domain failed;
Cannot deploy. Module directory is locked and can\qt be deleted

解決法

アプリケーションの配備時に --precompilejsps=false を指定すると (デフォルト設定)、この問題は発生しません。そのアプリケーションを最初に使用するときに JSP コンパイルが起動されるため、最初の要求に対する応答時間は、その後の要求に比べて長くなります。

また、プリコンパイルを行う場合には、そのアプリケーションを配備取り消しまたは再配備する前に、サーバーを終了して再起動する必要があります。シャットダウンすると、ロックされている JAR ファイルが解放されるため、再起動後の配備取り消しや再配備が成功します。

空の <load-on-startup\> 要素を持つ Servlet 2.4 ベースの web.xml を使用して WAR を配備できない。(ID 6172006)

web.xml のオプションの load-on-startup サーブレット要素は、関連付けられているサーブレットを宣言する Web アプリケーションの起動の一環として、そのサーブレットをロードおよび初期化すべきことを示します。

この要素のオプションの内容は、Web アプリケーションのその他のサーブレットとの関係で、そのサーブレットをロードおよび初期化する順序を示す整数です。空の <load-on-startup\> は、そのサーブレットを含む Web アプリケーションの起動時にそのサーブレットがロードおよび初期化される場合、その順序は意味を持たないことを表します。

web.xml の Servlet 2.4 スキーマでは、空の <load-on-startup\> はサポートされなくなりました。つまり、サーブレット 2.4 ベースの web.xml を使用する場合は整数値を指定する必要があります。<load-on-startup/\> の場合と同様に、空の <load-on-startup\> を指定すると、web.xmlweb.xml のサーブレット 2.4 スキーマに対する妥当性検証に失敗するため、Web アプリケーションの配備も失敗します。

下位互換性の問題もあります。空の <load-on-startup> は、Servlet 2.3 ベースの web.xml では有効です。

解決法

Servlet 2.4 ベースの web.xml を使用する場合は、<load-on-startup\>0</load-on-startup\> を指定して、サーブレットの読み込み順序が問題にならないことを示します。

リソースに制約のあるサーバー上で JSP ページをコンパイルできない。(ID 6184122)

JSP ページにアクセスしてもコンパイルに失敗し、サーバーログには「Unable to execute command」というエラーメッセージと次のスタックトレースが記録されます。

at org.apache.tools.ant.taskdefs.Execute$Java13CommandLauncher.exec
(Execute.java:655) at org.apache.tools.ant.taskdefs.Execute.launch
(Execute.java:416) at org.apache.tools.ant.taskdefs.Execute.execute
(Execute.java:427) at org.apache.tools.ant.taskdefs.compilers.
DefaultCompilerAdapter.executeExternalCompile(DefaultCompilerAdapter.
java:448) at org.apache.tools.ant.taskdefs.compilers.JavacExternal.
execute(JavacExternal.java:81) at org.apache.tools.ant.taskdefs.Javac.
compile(Javac.java:842) at org.apache.tools.ant.taskdefs.Javac.execute
(Javac.java:682) at org.apache.jasper.compiler.Compiler.generateClass
(Compiler.java:396)

解決法

JSP のコンパイルスイッチを fork から false に設定します。

これは、次のいずれかの方法で行えます。

マルチ CPU のマシンでパフォーマンスが低下する。(ID 6194026)

Application Server PE のデフォルト設定では、マルチ CPU のマシンで最適に動作しません。その代わりに起動が高速化されていますが、Web アプリケーションのパフォーマンスに悪影響を与える可能性があります。

解決法

Application Server の設定を変更して 次の JVM オプションを使用します。

-Dcom.sun.enterprise.server.ss.ASQuickStartup=false

不正な Fast Infoset ドキュメントを受け取ると、JAX-RPC 配備サービスの Fast Infoset サポートが無効になることがある。(ID 6368670)

仕様に準拠しない Fast Infoset でエンコードされた SOAP メッセージが JAX-RPC サービスに送信されると、サービスは適切にエラーを返します。また、そのあとに仕様に準拠する Fast Infoset でエンコードされた SOAP メッセージが同じサービスまたは同じ JAX-RPC ランタイムを使用するように配備されたサービスに送信されると、不正に障害が発生する可能性があります。

解決法

次の回避策があります。