事象
Tomcatに他のシステムで動いていたWARをデプロイしたら、以下の様なエラーが発生した。
Caused by: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for hoge.dao.hogeDaoMapper.Select at org.apache.ibatis.session.Configuration$StrictMap.get(Configuration.java:1031) at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:821) at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:814) (以下略)
catalina.outを確認すると、以下の様なエラーメッセージが出力されていた。
情報 [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployWAR Webアプリケーションアーカイブ [/opt/tomcat/webapps/hoge.war] を配備します 重大 [Catalina-utility-1] org.apache.catalina.startup.ContextConfig.beforeStart コンテキスト [/hoge] の docBase を修復中に例外が発生しました。 java.io.IOException: ファイル[/opt/tomcat/webapps/hoge/META-INF/war-tracker]を作成できません。 at org.apache.catalina.startup.ExpandWar.expand(ExpandWar.java:180) at org.apache.catalina.startup.ContextConfig.fixDocBase(ContextConfig.java:615)
原因
WARの中にwar-trackerというファイルが含まれていたため。
他のシステムから移行する際、WARを持ってきたのではなく、デプロイしたファイルをWAR化して持っていった。
そのため、稼働中のファイルにwar-trackerが含まれていたのでエラーになった。
なお、DaoMapperの定義に含まれる値が無いからwarがデプロイできないのではなく、
WARがデプロイできないからDaoMapperの定義を記述したXMLが参照できなくて怒られていた。
対応方法
WAR化する前に META-INF/war-tracker ファイルを削除してから再度WAR化すればよい。