WebOTX Manual V10.2 (第4版) 目次を表示 |
Tomcatからの移行時によく起きる問題やTomcatからの移行以外にもよくある質問に対するQ&Aをまとめました。
Q1 Webアプリケーションを実行するとClassCastExceptionが発生するのですが、どのような原因が考えられますか?
A1 対象となるクラスのロードが正しく行われていない可能性があります。nec-web.xmlの設定を変更して、クラスのロード処理を変えて、アプリケーションの動作を確認してください。以下の例を参考に"delegate=false"を設定したnec-web.xmlを追加してください。
【nec-web.xml】
<?xml version="1.0" encoding="UTF-8"?> <nec-web-app xmlns="http://java.sun.com/xml/ns/j2ee"> <context-root>context_name</context-root> <class-loader delegate="false"/> </nec-web-app>
nec-web.xmlの詳細は[ 移行作業 > クラスロード優先順位の設定 ]を参照してください。
Q2 Webアプリケーションを実行するとセキュリティ例外が発生するのですが、どのような原因が考えられますか?
A2 セキュリティポリシーの追加が必要です。本資料の[ 移行作業 > セキュリティポリシーの設定 ]をご覧ください。
Q3 Webアプリケーションからのログが出力されないのですが、どのような原因が考えられますか?
A3 log4jの設定を変更してください。本資料の[ 移行作業 > log4jの設定 ]をご覧ください。
Q4 フィルタがうまく動作しないのですが、どのような原因が考えられますか?
A4 フィルタはServlet2.3仕様から追加された仕組みです。WebOTX V9およびV10.1, V10.2 ではServlet3.0に準拠しているため、web.xml 先頭の version を 2.3〜3.0のいずれかに変更してください。変更後のイメージは次のようになります。
<?xml version="1.0" encoding="Shift_JIS"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
Q5 getParameterで取得したデータが文字化けするのですが、どのような原因が考えられますか?
A5 Tomcat 7.xでは、URIのエンコードの指定のために、server.xmlでURIEncoding と
useBodyEncodingForURI が指定できますが、WebOTX
では、server.network-config.protocols.protocol.http-listener.http.uri-encoding と
server.network-config.protocols.protocol.http-listener.http.use-body-encoding-for-uri
で指定します。
それぞれ、運用管理コマンド(otxadminコマンド)を利用して、次のように指定します。
otxadmin> set server.network-config.protocols.protocol.http-listener.http.uri-encoding=Windows-31J otxadmin> set server.network-config.protocols.protocol.http-listener.http.use-body-encoding-for-uri=true
Q6 WebブラウザでJSPの出力を参照したとき、機種依存文字(鰍ネど)が文字化けするのですが、どのような原因が考えられますか?
A6 Web アプリケーションの表示で文字化けが発生する場合、次のステップで原因の調査と対処をしてくださ い。
【web.xml】 <web-app .... <jsp-config> <jsp-property-group> .... <page-encoding>Windows-31J</page-encoding> </jsp-property-group> </jsp-config> .... <servlet> .... </servlet> </web-app>
また、WebOTX V8からは文字コードを強制的に指定することができるようになりました。以下に、Servlet/JSPへの入出力、エンコーディングを強制設定する機能について説明します。
エンコーディングを指定してリクエストのデータをどの文字コードとしてJavaで扱うUnicodeにデコードするか、
の設定があります。
詳細は HTTPリクエスト を参照してください。
レスポンス出力時、Javaで扱うUnicodeをどのエンコーディングを指定して、意図する文字コードにエンコード(レスポンス出力)するか
の設定があります。
詳細は HTTPレスポンス を参照してください。
jspファイルがどの文字コードで記述されているか(どのエンコーディングを指定してJavaで扱うUnicodeにデコードするか)
の設定があります。
詳細は jspファイルのコンパイル を参照してください。
JSPを実行した際、Javaで扱うUnicodeをどのエンコーディングを指定して、意図する文字コードにエンコード(レスポンス出力)するか
の設定があります。
詳細は jspファイルのレスポンス を参照してください。
ファイルにアクセスするInputStream、OutputStreamを作成する際ユーザが文字コードを指定します。WebOTX独自の設定機能は存在しませんがJava
VMオプション(-Dfile.encoding=<MS932等>)指定によりデフォルトキャラセットを変更可能
JDBCドライバに依存します。
※各設定で指定した文字コードはJavaのコンバータにより処理されます。
リクエストのデータをどの文字コードとして扱うかは通常、以下の処理順で決定されます。(ここで決定された文字コードはリクエストからデータを取得する際のInputStreamに適用されます。)
<locale-charset-info default-locale="ja"> <locale-charset-map locale="ja" charset="windows-31j" /> <parameter-encoding form-hint-field="penc" /> </locale-charset-info>
3-1) |
リクエストのパラメータ中に該当データ(この場合パラメータ名が(pencのデータpenc=x-IBM943C
等)があればそれをエンコーディングとして使用します。 |
3-2) |
3-1)が無い場合、リクエスト中のAccept-Language:
ja、無ければnec-web.xmlの<locale-charset-info
default-locale="ja">を取得します。<locale-charset-map>よりlocaleが一致するmapを検索し、そのcharsetでリクエストパラメータをUnicodeに変換します。 |
レスポンスにデータをどの文字コードとして出力するかは通常、以下の処理順で決定されます。(ここで決定された文字コードはHTTPレスポンスのヘッダ情報(Content-Typeのcharset)とデータを出力する際のOutputStreamに適用されます)
<locale-encoding-mapping-list> <locale-encoding-mapping> <locale>ja</locale> <encoding>windows-31j</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>ko_KR</locale> <encoding>EUC-KR</encoding> </locale-encoding-mapping> </locale-encoding-mapping-list>
jspファイルがどの文字コードで記述されているか(読み込み時どのエンコーディングでデコードするか)は通常、以下の処理で決定されます。(ここで決定されたエンコーディングはjspファイルを読み込む際のInputStremに適用されます)
<jsp-config> <jsp-property-group> <uri-pattern>/jsp/*</uri-pattern> <page-encoding>Shift_JIS</page-encoding> </jsp-property-group> </jsp-config>
otxadmin> set server.web-container.property.default-encoding=Shift_JIS
※実際のファイルの文字コードが、複数あり、個別のページでエンコーディングを指定している場合、priorityJspInEncodingを指定して特定の文字コードでエンコードするように設定すると、一部のページで文字化けが発生します。この場合は、該当のページのファイルの文字コード修正してください。
出力するレスポンスデータはどのエンコーディングエンコード(出力)するかは通常、以下の処理で決定されます。(ここで決定されたエンコーディングはレスポンスのヘッダ情報(Content-Typeのcharset)と出力する際OutputStreamに適用されます)
<jsp-config> <jsp-property-group> <uri-pattern>/jsp/*</uri-pattern> <page-encoding>Shift_JIS</page-encoding> </jsp-property-group> </jsp-config>
otxadmin> set server.web-container.property.default-encoding=Shift_JIS
Q7 Tomcatからの移行時にJSPのコンパイルエラーになるのですが、原因は何が考えられるでしょうか?
A7 Java 1.4 で記述されたJSPをコンパイルした際にエラーが発生します。WebOTX V10はデフォルトでは、Java 8
(Java1.8)としてコンパイルするため、この問題が発生します。次の例のように、コンパイルする際に使用するJavaの
バージョンを指定してください。<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>の定義に
compilerTargetVM と compilerSourceVM のパラメータで 1.4
を指定する定義を追加し、ドメインを再起動してください。
<servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>compilerTargetVM</param-name> <param-value>1.4</param-value> </init-param> <init-param> <param-name>compilerSourceVM</param-name> <param-value>1.4<param-value> </init-param> </servlet>
Q8 Servletを実行する際にURLを"/<コンテキスト名>/servlet/サーブレットのクラス名"というように実行するとHTTP404エラーとなるのですが、設定により直接Servletを実行する方法はありますか?
A8 Tomcat4.1.12以降をベースとする WebOTX V6以降では、servlet-mapping の定義が無いサーブレットへのアクセスはセキュリティの観点からデフォルトでは無効になっています。また、WebOTX V8からは、この機能がデフォルトで定義されていません。
WebOTX V6以降で上記のアクセスを許可するにはアプリケーションのweb.xmlに以下の定義を追加してください。 対象ファイル:web.xml もしくは <WebOTXインストールディレクトリ>/domains/domain1/config/default-web.xml
<servlet> <servlet-name>invoker</servlet-name> <servlet-class>org.apache.catalina.servlets.InvokerServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping>
[ 移行作業 > Tomcat 5.5と Tomcat 6.0の差異 ] も参考にしてください。
Q9 ServletのJavaプログラムから、ネットワークドライブにあるファイルを開きたいのですが、どのようにしたらよろしいでしょうか?
A9 ネットワークドライブは以下の条件で利用可能となります。
WebOTXがサービス起動の場合は、サービスのログオンユーザの設定と、共有フォルダへのログオンユーザのアクセス権が必要です。また、APでの共有フォルダの指定は、UNC表記(\\hostname\共有フォルダ名)で指定してください。
※ D:\xxxxx\xxxx の表記では、アクセスできません。
Q10 シンボリックリンクを使用したいのですが、どのようにしたらよろしいでしょうか?
A10 例) WebAPP1というWebアプリケーション内からリンクする例です
./otxadmin set --user admin --password adminadmin server.http-service.virtual-server.server.property.allowLinking=true ./otxadmin set --user admin --password adminadmin server.http-service.virtual-server.server.property.caseSensitive=false
Q11 Webサーバプラグインのログローテート機能を利用したいのですが、どのようにしたらよろしいでしょうか?
A11 以下の例を参考にファイルを編集し、Webサーバを再起動してください。
対象ファイル:<WebOTXインストールディレクトリ>/domains/domain1/config/WebCont/*.conf
一日(86400秒)毎にログローテートされます。
※ *.confファイルはデフォルト名のままである場合、ドメイン再起動で上書きされます。必要に応じてファイル名をリネームしてください。
詳細および、その他のWebサーバについては以下を参照してください。
Q1 servletをコンパイルするときに、WebOTXではどのjarを利用するのでしょうか?
A1 ${AS_INSTALL}/lib/javaee.jar を利用してください。
Q2 Webアプリケーションを自動的に配備するには、どうすれば良いのでしょうか?
A2 Tomcatでは、webappsディレクトリにWARファイルを置くと自動的に配備されますが、WebOTXでは ${ INSTANCE_ROOT}/autodeploy ディレクトリにWARファイルを格納することで、自動的に配備できます。
Q3 context.xml にWebアプリケーションが利用するパラメータを記述しているのですが、WebOTX ではどこに記述すればよいのでしょうか?
A3 WebOTX には context.xml は存在しません。web.xml に記述してください。
Q1 WebOTXでJavaVMのメモリ量を指定するには、どうすれば良いのでしょうか?
A1 Tomcatでは、起動用のファイルでJavaVMのメモリ量を指定しますが、WebOTXでは運用管理コマンド(otxadmin) で指定します。
【割り当てメモリの最大値を 1024 MB にする例】
otxadmin> create-jvm-options --user <ユーザ名> --password <パスワード> --host <ホスト名> --port <管理ポート> -Xmx1024m:
詳細については、WebOTXマニュアル [ 構築・運用 > チューニング > APサーバ > リソースチューニング ] をご覧ください。
Q2 Apacheと連携するときの同時接続(スレッド)数の設定は、どうすれば良いのでしょうか?
A2 Tomcatでは server.xml を編集して設定しますが、WebOTXでは運用管理コマンド(otxadmin) で指定します。
【同時に処理できるリクエストの数を拡大する例】
otxadmin> set --user <ユーザ名> --password <パスワード> --host <ホスト名> --port <管理ポート> server.network-config.network-listeners.network-listener.<リスナID>.max-processors=<最大数>
詳細については、WebOTXマニュアル [ 構築・運用 > チューニング > Webコンテナ > プロセッサ数 > 最大プロセッサ数 ] をご覧ください。
Q3 JDBCデータソースの設定は、どうすれば良いのでしょうか?
A3 Tomcatでは server.xml を編集して設定しますが、WebOTXでの設定方法は本資料の JDBCデータソースの設定をご覧ください。
Q4 1台のサーバで複数のWebコンテナを起動するには、どうすれば良いのでしょうか?
A4 Tomcatでは、Tomcatのディレクトリをコピーして、同じマシンで複数のTomcatを起動しますが、WebOTXでは複数のドメインを作成することで複数のWebコンテナを起動することができます。
Q5 Tomcatからの移行時に対応する環境設定を教えてください。
A5 環境設定の対応は以下となっています。
JAVA_HOMEは、インストール時に「JDKがインストールされているディレクトリ」を指定していると思います。
Java VMオプションは、次の箇所に設定してください。
■アプリケーションをエージェントプロセスに配備した場合
運用管理コンソールでドメイン⇒アプリケーションサーバ⇒JVM構成⇒属性
"JVMオプション"に設定してください
■アプリケーションをプロセスグループに配備した場合
運用管理コンソールでドメイン⇒TPシステム⇒アプリケ<ーショングループ⇒<アプリケーショングループ名>⇒プロセスグループ⇒<プロセスグループ名>
「属性」タブの「「Javaシステムプロパティ」に設定してください。
既に設定されているJava VMのメモリ指定等は編集してください。
新規の項目は、追加してください。
既存の環境のとおりOSの環境変数に設定してください。
■アプリケーションをエージェントプロセスに配備した場合
運用管理コンソールでドメイン⇒アプリケーションサーバ⇒JVM構成⇒属性
”サーバのクラスパス” に設定してください
■アプリケーションをプロセスグループに配備した場合
運用管理コンソールでドメイン⇒TPシステム⇒アプリケーショングループ⇒<アプリケーショングループ名>⇒プロセスグループ⇒<プロセスグループ名>
「属性」タブの「「環境変数」に設定してください。
※環境変数の詳細については、WebOTXマニュアル [ 構築・運用 > 環境変数・JDK・ホスト名の設定変更 > システム環境変数 ] をご覧ください。
Q1 <security-constraint>要素でWebアプリケーションのリソースへのアクセス制御を実施していますが、特定のHTTPメソッドでは認証なしでアクセスできてしまいます。ガードする方法はありませんか?
A1 「セキュアシステム構築ガイド > WebOTXを利用する場合のセキュリティ対策の設定 > アプリケーション > 認証・アクセス制御・権限管理 > Webアプリケーションのリソースへのアクセス制御」をご覧ください。