ここでは、Web コンテナに関する既知の問題とその解決方法を示します。
web.xml のオプションの load-on-startup 要素は、サーブレットを宣言する Web アプリケーションの起動の一環として、そのサーブレットをロードおよび初期化すべきことを示します。
この制限は、Servlet 2.4 ベースの web.xml だけに適用されます。Servlet 2.5 ベースの web.xml を使用して、空の load-on-startup 要素を指定することは可能です。
この要素のオプションの内容は、Web アプリケーションのその他のサーブレットとの関係で、そのサーブレットをロードおよび初期化する順序を示す整数です。空の <load-on-startup/> は、そのサーブレットを含む Web アプリケーションの起動時にそのサーブレットがロードおよび初期化される場合、その順序は意味を持たないことを表します。
web.xml の Servlet 2.4 スキーマでは、空の <load-on-startup/> はサポートされなくなりました。つまり、Servlet 2.4 ベースの web.xml を使用する場合は整数値を指定する必要があります。<load-on-startup/> の場合と同様に、空の <load-on-startup/> を指定すると、web.xml が web.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 ページにアクセスしてもコンパイルに失敗し、サーバーログには「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 に設定します。
これは、次のいずれかの方法で行えます。
グローバルに行うには、次のように、${S1AS_HOME}/domains/domain1/config/default-web.xml 内の JspServlet の fork init パラメータを false に設定します。
<servlet\> <servlet-name\>jsp</servlet-name\> <servlet-class\>org.apache. jasper.servlet.JspServlet</servlet-class\> .... <init-param\> <param-name\> fork</param-name\> <param-value\>false</param-value\> </init-param\> .... </servlet\>
Web アプリケーションごとに、sun-web.xml の JSP 設定プロパティー fork を false に設定します。次のようにします。
<sun-web-app\> <jsp-config\> <property name="fork" value="false" /\> </jsp-config\> </sun-web-app\>
これらのいずれかを設定することにより、ant が javac コンパイルのための新規プロセスを生成することが防止されます。
JSP にアクセスすると、特定の状況下で次の例外が記録されます。
java.lang.AbstractMethodError: org.apache.xerces.dom.DeferredDocumentImpl. setDocumentURI(Ljava/lang/String;)V |
次のシステムプロパティーを domain.xml ファイルに追加してください。
<jvm-options>-Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces. \ internal.jaxp.DocumentBuilderFactoryImpl</jvm-options> |
または、org.apache.xerces パッケージを含む JAR ファイルを、Web アプリケーションの WEB-INF/lib から削除します。
EAR ファイルにバンドルされた JAR パック JSP タグライブラリは、EAR の一部である WAR ファイルの JSP ページから参照できません。WAR ファイルの META-INF/MANIFEST.MF リソースが、その Class-Path マニフェスト属性でタグライブラリ JAR ファイルをリストしている場合でも参照できません。
EAR ファイルの JAR ファイルにパッケージされたタグライブラリをインポートする JSP ページにアクセスすると、次のようなエラーメッセージがサーバーログに表示され、JSP ページのコンパイルが失敗します。
The absolute uri: <taglib_uri> cannot be resolved in either web.xml or the jar files deployed with this application |
すべての JSP タグライブラリ JAR ファイルを、これらのタブライブラリをインポートする JSP ページを持つすべての WAR ファイルの WEB-INF/lib ディレクトリにバンドルしてください。
このバグに関する詳細については、https://glassfish.dev.java.net/issues/show_bug.cgi?id=590 の Glassfish のサイトを参照してください。