Java Play Mustache NPE错误

zan*_*dev 5 java playback mustache

我们在生产中遇到了胡子游戏错误(amazon linux EC2 AMI),但在开发(MAC)中却没有,我们尝试使用jdk升级jvm,改用tomcat部署模型以匹配我们的开发环境.可能但没有任何工作.如有任何帮助,将不胜感激.我们在使用胡子的java和javascript中有很多共享代码,如果我们不得不在java端抛弃胡须,那么重写所有内容将是一件大事.

20:48:52,403错误〜

@6al2dd0po
Internal Server Error (500) for request GET /mystuff/people

Execution exception (In {module:mustache-0.2}/app/play/modules/mustache/MustacheTags.java around line 32)
NullPointerException occured : null

play.exceptions.JavaExecutionException
    at play.templates.BaseTemplate.throwException(BaseTemplate.java:90)
    at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:257)
    at play.templates.Template.render(Template.java:26)
    at play.templates.GroovyTemplate.render(GroovyTemplate.java:187)
    at play.mvc.results.RenderTemplate.<init>(RenderTemplate.java:24)
    at play.mvc.Controller.renderTemplate(Controller.java:660)
    at play.mvc.Controller.renderTemplate(Controller.java:640)
    at play.mvc.Controller.render(Controller.java:695)
    at controllers.MyStuff.people(MyStuff.java:183)
    at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:548)
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:502)
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:478)
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:473)
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
    at Invocation.HTTP Request(Play!)
Caused by: java.lang.NullPointerException
    at play.modules.mustache.MustacheTags._template(MustacheTags.java:32)
    at play.modules.mustache.MustacheTags$_template.call(Unknown Source)
    at /app/views/User/people.html.(line:22)
    at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:232)
    ... 13 more
Run Code Online (Sandbox Code Playgroud)

Cod*_*per 1

看来问题出在线程本地。根据我的日志,在 Prod 中,会话是通过主线程初始化的。

     [2012-06-30 18:35:38,102] INFO 10097[**main**] - Mustache module initialized
Run Code Online (Sandbox Code Playgroud)

然而,MustacheTag 尝试在请求期间使用各种线程进行访问。

     [2012-06-30 17:48:44,669] INFO 66048[**play-thread-1**] - [{module:mustache-0.2}/app/play/modules/mustache/MustacheTags.java:46] _meta() :: MustachePlugin.session():null
Run Code Online (Sandbox Code Playgroud)

所以我像这样改变了 MustachePlugin 的实现。更改行注释掉了:

    //private static ThreadLocal<MustacheSession> session_ = new ThreadLocal<MustacheSession>();
    private static MustacheSession _session = null;
    public static MustacheSession session(){
    //return session_.get();
    return _session;
    }
    public void onConfigurationRead(){
    // some code
    _session = new MustacheSession(compiler, root);
    // some code
    }
Run Code Online (Sandbox Code Playgroud)

现在在产品模式下运行良好!我看不出为什么它应该首先位于 ThreadLocal 中,因为会话在启动时初始化!