Webコンテナを利用する際の注意制限事項について説明します。
ログレベルを "DEBUG" に変更すると、JSP処理コンポーネントが処理するデータをログに記録します。障害調査などを目的としたログであるためブラウザから渡されてきたそのままのデータを記録します。このため、JSP でリクエストパラメータ取得時の文字コードを設定する前にリクエストパラメータを分解します。この結果、文字コードの設定が効かずアプリケーションで文字化けが発生します。
本ログレベルを上げるのは、JSPにおいてリクエストの内容がどのようになっているかを確認する時だけにしてください。そして、内容を確認した後は、必ず "CONFIG" レベルに戻してください。
> kill -QUIT <PID>
・PIDは{ドメインディレクトリ}/config/server_pidを参照 ・10秒間隔で1分程度採取します。 ・結果は{ドメインディレクトリ}/logs/server.logに出力
> ps -L auxww
・10秒間隔で1分程度採取します。
USER PID LWP %CPU NLWP %MEM VSZ RSS TTY ・・・ : root 7152 7242 96.2 111 3.9 1651724 478756 ? ・・・ :LWP(10進数)がスレッドダンプ中のスレッドID(nid(16進数))に相当します。
"Grizzly-kernel-thread(1)" daemon prio=10 tid=0x00007fa8a4017800 nid=0x1c4a runnable [0x00007fa8b04a8000] java.lang.Thread.State: RUNNABLE at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79) at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:87) - locked <0x00000000e133c560> (a sun.nio.ch.Util$2) - locked <0x00000000e133c570> (a java.util.Collections$UnmodifiableSet) - locked <0x00000000e133c518> (a sun.nio.ch.EPollSelectorImpl) at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:98) at com.nec.webotx.grizzly.TCPSelectorHandler.select(TCPSelectorHandler.java:514) at com.nec.webotx.grizzly.SelectorHandlerRunner.doSelect(SelectorHandlerRunner.java:190) at com.nec.webotx.grizzly.SelectorHandlerRunner.run(SelectorHandlerRunner.java:132) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745)
otxadmin> set server.network-config.protocols.protocol.admin-listener.type=bio※ Webサーバ連携用のコネクタはajpコネクタを使用しているため変更不要です。
otxadmin> set server.network-config.protocols.protocol.admin-listener.type=bio内蔵Webサーバのコネクタ種別がgrizzly、nioの場合、bioコネクタに変更します。内蔵Webサーバのコネクタ種別を確認します。
otxadmin> get server.network-config.protocols.protocol.http-listener.type server.network-config.protocols.protocol.http-listener.type = grizzlytypeの内容が"grizzly"もしくは"nio"の場合、bioコネクタに変更します。
otxadmin> set server.network-config.protocols.protocol.http-listener.type=bio
# TM_WS_PLUGIN-start include "${INSTANECE_ROOT}/config/WebCont/mod_jk-22.conf-auto" # TM_WS_PLUGIN-end
PathCheck fn="find-index" index-names="index.html,home.html,index.jsp"
図3.1.3-1
REGEDIT4 [HKEY_LOCAL_MACHINE\SOFTWARE\NEC\WebOTX WebContainer] "PathName"="C:\\WebOTX\\"
otxadmin> create-jvm-options -Dwebotx.webcontainer.serverconfig.OMlistener.OutputConfAuto=falseまた、上記オプションの設定有無に関わらず、ファイルが存在しない場合は自動で作成されます。
外部Webサーバ連携時、JkMountディレクティブの記述の仕方によってはリクエストが正常に振り分けられない事があります。
外部Webサーバと連携している時、JkMount の記載方法によっては正常に振り分けられません。
例えば、次のような場合です。
JkMount /sample/* ajp13
JkMount /sample/aaa ajp13
上記の記述では、どちらの条件にもマッチするため正常に振り分けられません。
複数のアプリケーションを異なるドメインに配置している時(例えば /sample/aaa と /sample/bbb を異なるドメインに配備した場合)、次のような設定をしても正常に振り分ける事はできません。
JkMount /sample/* ajp13
grant { permission java.io.FilePermission "${com.nec.webotx.instanceRoot}${/}applications${/}fileupdownload${/}-", "read,write,delete"; };
ブラウザ Webコンテナ 1) Cookie有効 セッションIDの管理-ON → Cookieによってセッション管理される 2) Cookie有効 セッションIDの管理-OFF → Cookieによってセッション管理される 3) Cookie無効 セッションIDの管理-ON → URLによってセッション管理される 4) Cookie無効 セッションIDの管理-OFF → URLによってセッション管理される
"Internal server error. reason: JNDI information get error: error in opening zip file" |
"-Xss512k" |
<jsp-config> <property name="compilerSourceVM" value="1.4"/>
取得する XML ファイルが web.xml で定義された <security-constraint> の範囲外にある場合、 checkURLPatternAfterMatching の設定により、この現象を回避できることがあります。 詳細は[ リファレンス集 ドメイン構成・環境移行編 > 2. 他APサーバ(Tomcat)からWebOTXへの移行ガイド > 2.3. 移行作業 > 2.3.6. WebOTX独自のWebアプリケーション配備記述子(nec-web.xml) > 2.3.6.5. no-cache の設定 ] を参照してください。
コンテキストパス(http://<ホスト名>:<ポート番号>/<ContextPath>/<ServletPath>/ の <ContextPath> の部分)に、例えば "/sample/ap" のように "/" を含む場合、一部機能が利用できません。
利用できないのは次の機能です。
a) セッションレプリケーションLoadModule rewrite_module "/opt/WebOTX/WebServer2/modules/mod_rewrite.so"
RewriteEngine on RewriteRule ^/samplep/ap/(.*)$ /sample_ap/$1 [PT,L] RewriteRule ^/sample_ap/(.*)$ /sample/ap/$1 [R,L]
コンテキストパスに "/" を含む URL にも Cookie を送付するよう明示的に指定します。設定場所は、WebOTX 独自のWebアプリケーションの配備記述子である nec-web.xml です。このファイルに次のような記述を追加します。
<?xml version="1.0" encoding="UTF-8"?><nec-web-app> <context-root>sample_ap</context-root> <class-loader delegate="false"/> <session-config> <cookie-properties> <property name="cookiePath" value="/sample/ap"/> </cookie-properties> </session-config> </nec-web-app>追記が終わったらWARファイルをアーカイブし直して配備します。
<servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> : <init-param> <param-name>suppressSmap</param-name> <param-value>true</param-value> </init-param>JSR-045デバッグ情報は、JSPコードとコンパイルしたclassファイルを関連付けるための情報です。
yyyy-mm-dd hh:MM:ss,sss INFO WEBCONT - Security Violation, attempt to use Restricted Class: <パッケージ名>.<クラス名> [http-thread-pool-80(1)] java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "accessClassInPackage.sun") at java.security.AccessControlContext.checkPermission(AccessControlContext.java:366) at java.security.AccessController.checkPermission(AccessController.java:560) at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) at java.lang.SecurityManager.checkPackageAccess(SecurityManager.java:1529) at com.nec.webotx.enterprise.security.J2EESecurityManager.checkPackageAccess(J2EESecurityManager.java:104) at com.nec.webotx.as.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:2308)${INSTANCE_ROOT}/config/server.policy に以下の定義を追加してください
grant codeBase "file:${com.nec.webotx.instanceRoot}/applications/<アプリケーション名>/-" { permission java.lang.RuntimePermission "accessClassInPackage.<パッケージ名>"; permission java.lang.RuntimePermission "defineClassInPackage.<パッケージ名>"; };
META-INF/services/javax.servlet.ServletContainerInitializer
<nec-web-app> <class-loader extra-class-path="Jarファイルのパス名"/> </nec-web-app>※任意のディレクトリに移動したJarファイルは、アプリケーション配備後はドメインを停止するまで削除できません。
<nec-web-app> <property name="antiJARLocking" value="true"/> </nec-web-app>
otxadmin> set server.web-container.property.j2ee-enabled=false otxadmin> set server.http-service.property.sso-enabled=false
RequestDispatcherクラスの forward メソッドを利用してリクエストの別のサーブレットに転送した場合に、レスポンスがflush(コミットされてクライアントに返却される)されるタイミングがV7.x と V8.x で異なります。
上記のように、V7.x では forward先サーブレットの処理が終了しforward元に処理が戻り forward元のリクエストの処理も完全に 終了してからレスポンスがflushされます。一方 V8.x は forward先サーブレットの処理が終了して forward元サーブレットに戻った時点でレスポンスがflushされます。
既定値では上記の動作ですが、設定により変更が可能です。設定方法は次の2通りです。
JavaVMオプションでは次のオプションを指定します。
com.nec.webotx.enterprise.forwardResponseFlushotxadmin> create-jvm-options -Dcom.nec.webotx.enterprise.forwardResponseFlush=true
nec-web.xmlでは次のプロパティで指定します。
<nec-web-app> <context-root>コンテキストA</context-root> <property name="forwardResponseFlush" value="true"/> :
両方とも、true(V8.xの動作)/false(V7.xの動作)が指定可能です。規定値はV8.xの場合はtrue、V7.xの場合はfalseとなります。
JavaVMオプションの有効範囲は全Webアプリケーション、nec-web.xmlの有効反映はWebアプリケーション内です。両方指定された場合はnec-web.xmlでの指定が優先します。
※本設定はスタンダードモードでのみ有効です。アドバンスドモードでは常に V7.x の動作となります。
otxadmin> set server.network-config.protocols.protocol.http-listener.type=nio