2012-06-16 7 views
5

Wir bekommen einen Schnurrbart Spiel Fehler in der Produktion (Amazon Linux EC2 AMI) aber nicht in der Entwicklung (MACs) und wir haben versucht, die jvm, mit der jdk statt, und wechseln von einem Tomcat Deploy-Modell so gut wie möglich zu unseren Entwicklungsumgebungen zu passen, aber nichts funktioniert. Bitte jede Hilfe würde sehr geschätzt werden. Wir haben viel gemeinsamen Code in Java und Javascript mit Schnurrbart und es wäre eine große Sache, alles neu zu schreiben, wenn wir Schnurrbart auf der Java-Seite abziehen mussten.Java Play Schnurrbart NPE Fehler

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

Können Sie den zugehörigen Code veröffentlichen? Meine Vermutung ist, dass Ihre Vorlage nicht geladen wird. –

Antwort

1

Scheint das Problem ist mit dem threadlocal. In Prod nach meinen Protokollen wird die Sitzung mit dem Hauptthread initialisiert.

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

Allerdings versucht MoustacheTag während der Anfrage auf verschiedene Threads wie diesen zuzugreifen.

 [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 

So änderte ich die Implementierung von MustachePlugin wie this.Changed Linie auf Kommentar:

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

Und es funktioniert gut jetzt in prod-Modus! Ich sehe keinen Grund, warum es in einem ThreadLocal überhaupt sein sollte, da die Sitzung beim Start initialisiert wird!

+0

thx Das sieht vielversprechend aus. Ich bearbeite die MoustachePlugin.java-Datei, um das auszuprobieren, aber meine Änderungen an den Java-Dateien scheinen nicht zu funktionieren. Wie kompiliere ich das Modul erneut mit meinen Änderungen, damit das Spiel sie nach einem Neustart wieder aufnimmt? – zanedev

+0

Aktualisieren Sie einfach die Klassendateien in den Modulen/mustache-0.2/lib/play-mustache.jar direkt, um Ihre Änderungen zu testen! – CodeTripper

+0

Okay, ich habe den Ameisenbau für das Modul ausgeführt und die lib aktualisiert. Sieht gut aus Codetripper! Ich werde die Ergebnisse zu dem Problem auch im Schnurrbart-Plugin github veröffentlichen. – zanedev

0

Ihr Problem ist schwierig zu reproduzieren, so werde ich hier einige Hinweise geben. Sie haben versucht, das Problem zu beseitigen, das env-Problem ist. so andere mögliche Probleme könnten

  1. Daten Problem sein: oft Grund für die Produktion Problem ist in der Regel Unterschied in der tatsächlichen Daten und Testdaten. Überprüfen Sie, ob das Datenproblem die NPE verursacht.

  2. Code-Problem: Gibt es etwas bei people.html.(line:22) verursacht Problem. Versuchen Sie zuerst, das zu entfernen/zu ändern, um zu prüfen, ob das Problem verursacht. Oder können Sie Quellcode von mustache (genaue Version, die Sie verwenden) und sehen, welches Objekt versucht, zu erstellen und wo es fehlschlägt.

  3. Eigenschaftendatei für verschiedene Umgebungen: Haben Sie unterschiedliche Eigenschaften für jedes env? Wenn ja, haben Sie auf irgendeine Eigenschaft für Prod env verpasst?

0

Sie haben eine Nullpointer auf MustacheTags.java in Zeile 32.

Dies bedeutet, dass Sie wahrscheinlich ein Verfahren der Schnurrbart Bibliothek und vorbei einen Nullwert aufrufen. Versuchen Sie, alle Parameter zu protokollieren, die Sie an diese Methode übergeben (MyStuff.java Zeile 183?).

Sie können den Quelltext von MoustacheTags here betrachten, es könnte Ihnen helfen zu verstehen, welche Werte Sie übergeben und was übergeben werden soll.