xsbt-web-plugin-0.2.11をglassfish3.1で動かすとclass file needed by ServletRenderContext is missingとか言われる
昨日まで普通に動作していたモジュールを今朝GlassFishにあげると
エラーが出て動かなくなるという素敵体験をしたのでメモ。
ローカルのjetty(sbt container:start)では普通に動作しているのに、GlassFish上にあげるとこんなエラーになる。
[#|2012-05-20T01:30:17.003+0900|WARNING|glassfish3.1.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=31;_ThreadName=Thread-2;|StandardWrapperValve[scalate]: PWC1406: Servlet.servic e() for servlet scalate threw exception org.fusesource.scalate.CompilerException: Compilation failed: error: class file needed by ServletRenderContext is missing. reference value servlet of package javax refers to nonexisting symbol. one error found at org.fusesource.scalate.support.ScalaCompiler.compile(ScalaCompiler.scala:90) at org.fusesource.scalate.TemplateEngine.compileAndLoad(TemplateEngine.scala:718) at org.fusesource.scalate.TemplateEngine.compileAndLoad(TemplateEngine.scala:748) at org.fusesource.scalate.TemplateEngine.compileAndLoadEntry(TemplateEngine.scala:661) at org.fusesource.scalate.TemplateEngine.liftedTree1$1(TemplateEngine.scala:390) at org.fusesource.scalate.TemplateEngine.load(TemplateEngine.scala:384) at org.fusesource.scalate.TemplateEngine.load(TemplateEngine.scala:454) at org.scalatra.scalate.ScalateSupport$class.renderScalateErrorPage(ScalateSupport.scala:132) at org.scalatra.scalate.ScalateSupport$class.handle(ScalateSupport.scala:123) at cn.orz.pascal.ebooksearch.web.WebFront.handle(WebFront.scala:24)
どうも、jadeを読むテンプレートエンジンまわりでクラスローダが誤作動をしてるっぽい。軽く調べてみた感じ、似たような症例は見つかるものの、解決し無かったので、昨日のバージョンまで、コミットログをちょっとずつ下げてみることに。
すると、どうやらxsbt-web-plugin-0.2.4からxsbt-web-plugin-0.2.11に上げていたのが問題っぽい。
マイナーバージョンだし、ローカルでは動いてたので完全にノーチェックでした。orz
しかたが無いので、ここ見ながら互換性がありそうでかつ最新のsbt 0.11.0とxsbt-web-plugin-0.2.8の組み合わせにして、ビルドしなおしたら解決。
うーん、利用するライブラリのバージョンでも変わったのかな? 調べて見ないと。でも、こまめにコミットしてたおかげで問題切り分けが出来たのだけは良かった。