axis2の起動でエラー
以前axis1で作ったWEBサービスをaxis2に入れ替えるという話が出た。
axis2は使ったことなかったので色々調べてみるが、最初の最初でつまずく。
axis2のwarファイルを展開したwebappが起動できないのだ。
よく覚えてないがLogConfigurationExceptionが起きている。
org.apache.commons.logging.impl.Log4jLoggerだったかな?
クラスローダー絡みの問題でこのクラスがロードできないらしい。
ぐぐってみてもこれといって情報もなく、やむを得ずcommons-loggingのソースを調べることに。
どうもwebappを起動する時のログを出力する時にひっかかっているらしい。
問題はorg.apache.commons.logging.impl.Log4jLoggerとorg.apache.commons.logging.Logのローダーが異なることだ。
Log4jLoggerはwebapp用のクラスローダー、Logはtomcat内部処理用のserverクラスローダーからロードされている。
commons-logging.jarはWEB-INF/libとserver/libの両方にある。
(common/libにもあるが今回は関係ない)
この2つのクラスローダーには階層関係が無いのでクラスの間にも相関関係が無いことになり、Log4jLoggerがロードできているにも関わらずエラーになっていた。
でもこれが原因なら他のwebappでも起きてていいはず・・・
でもtomcatに付いてくるexampleのWEB-INF/libにcommons-logging.jarを置いてもエラーは起きない。
はて?
更に調査を進めると、axis2のwebappの中にあるcommons-logging.propertiesファイルに原因があることがわかった。
この中でLog4jLoggerのロードを強制しているのだ。
このファイルが無ければ、Log4jLoggerがロードできなければJdk14Loggerが使われることになる。
結局このファイルを削除することでaxis2の起動に成功した。
一応問題なく動いているようには見える。
理由は良くわからないがログの出力にもlog4jが使われている。
axis2自体の内容はまた今度・・・