2012-06-16 11 views
5

Estamos obteniendo un error de reproducción de bigote en la producción (amazon linux EC2 AMI) pero no en desarrollo (MAC) y hemos intentado actualizar el jvm, usando jdk y cambiando de un modelo de implementación de tomcat para que coincida con nuestros entornos de desarrollo tanto como sea posible, pero nada está funcionando. Por favor, cualquier ayuda sería muy apreciada. Tenemos muchos códigos compartidos en java y javascript usando bigote y sería una gran cosa reescribir todo si tuviéramos que deshacernos del bigote en el lado de Java.Java Play Moustache NPE Error

20: 48: 52,403 ERROR ~

@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 
+0

¿Se puede publicar el código relacionado? Supongo que tu plantilla no se está cargando. –

Respuesta

1

Parece que el problema está en el threadlocal. En Prod, según mis registros, la sesión se inicializa con el hilo principal.

 [2012-06-30 18:35:38,102] INFO 10097[**main**] - Mustache module initialized 

Sin embargo, MustacheTag intenta acceder con varios hilos como este durante la solicitud.

 [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 

Así que cambió la implementación de MustachePlugin como la línea this.Changed comentado:

//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 
    } 

y está funcionando bien ahora en el modo de prod! No veo ninguna razón por la que debería haber estado en un ThreadLocal en primer lugar, ¡ya que la sesión se inicializa al inicio!

+0

thx Esto parece prometedor. Estoy editando el archivo MoustachePlugin.java para probar esto, pero mis cambios a los archivos java no parecen estar teniendo efecto. ¿Cómo compilo el módulo de nuevo con mis cambios para que Play los recoja después de un reinicio? – zanedev

+0

¡Simplemente actualice los archivos de clase en los módulos/bigote-0.2/lib/play-bigote.jar directamente para probar sus cambios! – CodeTripper

+0

Bien, ejecuté la construcción de ant para el módulo y actualizó la lib. Se ve bien CodeTripper! Voy a publicar los resultados sobre el tema en el plugin de bigote github también. – zanedev

0

su problema es difícil de reproducir, así que voy a dar algunos consejos aquí. has tratado de eliminar el problema que es env. por lo que otros temas posibles podrían ser

  1. cuestión de los datos: muchas veces motivo de su emisión producción es por lo general la diferencia en los datos reales y los datos de prueba. comprobar si su problema de datos que está sacando NPE.

  2. código problema: ¿Hay algo en people.html.(line:22) causando problema. primero intente eliminar/alterar eso para verificar si eso está causando problema. O puede obtener el código fuente mustache (versión exacta que está utilizando) y ver qué objeto está intentando crear y dónde está fallando.

  3. Archivo de propiedades para diferentes entornos: ¿tiene diferentes archivos de propiedades para cada env? En caso afirmativo, ¿omitió alguna propiedad para prod env?

0

Usted tiene una NullPointerException en MustacheTags.java en la línea 32.

Esto significa que es probable que esté llamando a un método para la biblioteca bigote y pasando un valor nulo. Intente registrar todos los parámetros que transfiere a este método (¿Línea 183 de MyStuff.java?).

Puede consultar el código fuente de MustacheTags here, puede ayudarle a comprender qué valores está aprobando y qué debe aprobar.

Cuestiones relacionadas