2012-06-16 4 views
5

Stiamo ottenendo un errore di riproduzione di baffi in produzione (amazon linux EC2 AMI) ma non in sviluppo (MAC) e abbiamo provato ad aggiornare jvm, utilizzando invece jdk e cambiando da un modello di distribuzione di tomcat per abbinare il più possibile i nostri ambienti di sviluppo ma niente funziona. Per favore qualsiasi aiuto sarebbe molto apprezzato. Abbiamo un sacco di codice condiviso in java e javascript usando i baffi e sarebbe un grosso problema riscrivere tutto se dovessimo baffare i baffi sul lato java.Java Play Errore NPE Moustache

20: 48: 52.403 ERRORE ~

@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

Puoi pubblicare il codice relativo? La mia ipotesi è che il tuo modello non si sta caricando. –

risposta

1

Sembra che il problema sia con il threadlocal. In Prod secondo i miei registri, la sessione viene inizializzata con il thread principale.

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

Tuttavia, MustacheTag tenta di accedere con vari thread come questo durante la richiesta.

 [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 

così ho cambiato la realizzazione di MustachePlugin come la linea this.Changed commentata:

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

e si sta lavorando bene ora in modalità prod! Non vedo alcuna ragione per cui avrebbe dovuto essere in un ThreadLocal in primo luogo, poiché la sessione viene inizializzata all'avvio!

+0

thx Questo sembra promettente. Sto modificando il file MustachePlugin.java per provare questo, ma le mie modifiche ai file java non sembrano avere effetto. Come faccio a compilare di nuovo il modulo con le mie modifiche, in modo che il gioco le prelevi dopo il riavvio? – zanedev

+0

Basta aggiornare i file di classe nei moduli/mustache-0.2/lib/play-mustache.jar direttamente per testare le tue modifiche! – CodeTripper

+0

Ok ho eseguito la formica per il modulo e ha aggiornato la lib. Sembra buono CodeTripper! Pubblicherò anche i risultati sul problema nel plugin github dei baffi. – zanedev

0

il problema è difficile da riprodurre in modo che io darò alcune indicazioni qui. hai cercato di eliminare il problema relativo all'env. in modo che altri problemi possibili potrebbero essere

  1. problema di dati: molte volte motivo per il rilascio di produzione è di solito differenza nei dati reali e dati di prova. controllare se il problema con i dati che sta rilasciando NPE.

  2. problema di codice: C'è qualcosa a people.html.(line:22) che causa un problema. prima prova a rimuoverlo/modificarlo per verificare se questo causa problemi. Oppure puoi ottenere il codice sorgente di mustache (la versione esatta che stai usando) e vedere quale oggetto sta tentando di creare e dove fallisce.

  3. File di proprietà per ambienti diversi: hai un file di permessi diverso per ogni ambiente? Se sì, vi siete persi in qualche proprietà per prodv.

0

Hai un NullPointerException on MustacheTags.java alla linea 32.

Questo significa che probabilmente si sta chiamando un metodo della libreria di baffi e il superamento di un valore nullo. Prova a registrare tutti i parametri che trasferisci su questo metodo (riga MyStuff.java 183?).

Puoi guardare il codice sorgente di MustacheTags here, potrebbe aiutarti a capire quali valori stai passando e cosa deve essere passato.