今後は仕事上のメモも載せることにしました。

java.lang.ExceptionInInitializerError
at sun.reflect.NativeConstructorAccessorImpl.newInstance0
(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance
(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance
(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
(・・・以下省略)


TEST環境のWAS君がエラー吐きまくり。
恐らく何らかの影響で、org.apache.struts.action.ActionServletが正常にロードされてない可能性が大。

-----------------------------------------------------------
後日談

原因は以外に身近なところにありました。

WebSphere Application Server V5.0で外部ライブラリーを使用する際の考慮点
http://www-6.ibm.com/jp/software/websphere/developer/tecflash/10.html

前からチラチラと言われてはいましたが、まさか自分の身に降りかかろうとは…。要はWAS V5.0では、WAS V5.0自身が出力する各種ログのために、commons-loggingインターフェースに対応するTrLogというLoggerを予め保有しているのです。
この為、格段の指定が無いとユーザー・アプリケーションにおいてもTrLogが使用されてしまい、Log4J等のcommons-loggingに対応するLoggerを使用できないというわけです。
これによって、Servletがロードできずエラーを吐いていたのです。WASのLoggerはこんなところにあります。
ws-commons-logging.jar
 +commons-logging.properties
  +com.ibm.ws.commons.logging
   +TrLog.class
    +TrLogFactory.class


この場合は、[AS_ROOT]/classesか[AS_ROOT]/libを先にクラスロード時に読んでもらわないことにはにっちもさっちもいかない(古い?)ので、とりあえず、APサーバのクラスローダー設定を「PARENT_LAST」(親が最後に指定)し、パスが確実に通っている場所(WEB-INF/classes)で、
org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory

ってな感じでプロパティファイルを指定したところ、すんなり動きました。要はLoggerのFactoryをLog4Jのありものに変えてしまったわけです。中身は一緒なんだからOKでしょってわけで。

かなりやられました。

お気に入り日記の更新

この日記について

日記内を検索