【現象】
SAStrutsのアクション処理で例外スローされたあとにそのアクションクラスがホットデプロイできなくなります。
また上記が発生すると、以下の LinkageError が原因でシステムエラーが発生します。
-----
java.lang.LinkageError: loader constraint violation: loader (instance of com/caucho/loader/EnvironmentClassLoader) previously initiated loading for a different type with name "jp/sample/master/entity/Table1"
at java.lang.ClassLoader.defineClass1(Native Method) [na:1.6.0_18]
-----
【条件】
本事象は、Action処理内からスローされたエラー処理を行う以下のクラスにおいて、ログ出力が行われた場合に発生します。
* ApplicationRuntimeExceptionHandler
* SystemRuntimeExceptionHandler
上記エラー処理クラスは、status-config.xmlで指定されています。
【原因】
そのActionクラスが非対象クラスであるロガーから参照されて通常のクラスローダにロードされてしまい、発生します。
【回避方法】
ロガー設定ファイルでActionクラスに対してログ出力OFFにしてください。
たとえば、アクションクラスでのエラーを出力しないようにするには、以下の設定を追加してください。
-------------------------
<logger name="jp.sample.action">
<level value="off" />
</logger>
-- 対象 ------------------------------------------------------------------------
iWP/Webシステム構築基盤/WebPlatform/AppFramework
--------------------------------------------------------------------------------
FAQID:464
SAStrutsのアクション処理で例外スローされたあとにそのアクションクラスがホットデプロイできません。