読者です 読者をやめる 読者になる 読者になる

xsbt-web-plugin-0.2.11をglassfish3.1で動かすとclass file needed by ServletRenderContext is missingとか言われる

scala glassfish

昨日まで普通に動作していたモジュールを今朝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の組み合わせにして、ビルドしなおしたら解決。

うーん、利用するライブラリのバージョンでも変わったのかな? 調べて見ないと。でも、こまめにコミットしてたおかげで問題切り分けが出来たのだけは良かった。