2012-06-16 3 views
5

생산 (아마존 linux EC2 AMI)에서는 개발 중이지만 (Macs에서는) 콧수염 플레이 오류가 발생했습니다. 대신 jdk를 사용하여 jvm을 업그레이드하고 톰캣 배포 모델 가능한 한 많이 우리의 개발 환경과 일치하지만 아무 것도 작동하지 않습니다. 제발 어떤 도움을 주시면 감사하겠습니다. 우리는 콧수염을 사용하여 자바와 자바 스크립트에 많은 공유 코드를 가지고 있으며, 자바 측에서 수염을 흘려야 만한다면 모든 것을 다시 쓸 수 있습니다.자바 플레이 콧수염 NPE 오류

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

관련 코드를 게시 할 수 있습니까? 내 생각 엔 당신의 템플릿이로드되지 않습니다. –

답변

1

스레드 로컬에 문제가있는 것으로 보입니다. Prod as my logs에 따라 세션은 주 스레드로 초기화됩니다.

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

그러나 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 

그래서 나는 주석 this.Changed 라인 같은 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 
    } 

를 그리고 자극 모드에서 현재 잘 작동! 세션이 시작시 초기화 될 때 ThreadLocal에 있어야했던 이유는 없습니다.

+0

xx 이것은 유망 해 보입니다. 이 MustachePlugin.java 파일을 편집 중이지만 Java 파일에 대한 변경 사항이 적용되지 않는 것 같습니다. 변경 사항을 적용하여 모듈을 다시 컴파일하려면 어떻게해야합니까? – zanedev

+0

modules/mustache-0.2/lib/play-mustache.jar의 클래스 파일을 직접 업데이트하여 변경 사항을 테스트하십시오! – CodeTripper

+0

알았어, 모듈에 대한 개미 빌드를 실행하고 lib를 업데이트했다. CodeTripper 좋은데! 나는 또한 콧수염 플러그인 github에 문제에 대한 결과를 게시 할 것입니다. – zanedev

0

문제는 그래서 내가 여기에 몇 가지 포인터를주지 재현하기가 어렵습니다. 당신은 env 문제가되는 문제를 제거하려고 노력했습니다. 여러 번 생산 문제에 대한 이유는 일반적으로 실제 데이터와 테스트 데이터의 차이입니다 : 그래서 다른 가능한 문제

  1. 데이터 문제 일 수 있습니다. 해당 데이터 문제가 NPE를 유인하고 있는지 확인하십시오.

  2. 코드 문제 : people.html.(line:22)에 문제가 있습니까? 먼저 문제를 일으키는 지 확인하기 위해 제거/변경을 시도하십시오. 또는 소스 코드 mustache (사용하고있는 정확한 버전)을 얻을 수 있으며 생성하려는 개체와 실패한 개체를 확인할 수 있습니다.

  3. 다른 환경에 대한 등록 정보 파일 : 각 env마다 다른 proprties 파일이 있습니까? 그렇다면 u를 prod env에 대한 속성을 놓치지 않았습니까?

0

당신이 당신이 아마 콧수염 라이브러리의 메소드를 호출하고 null 값을 전달하는 것을 의미 라인 (32)

에서 MustacheTags.java에 NullPointerException이 있습니다. 전송 한 모든 매개 변수를이 메소드 (MyStuff.java 183 줄?)에 로깅 해보십시오.

MustacheTags here의 소스 코드를 보면 어떤 값을 전달하고 어떤 값을 전달해야하는지 알 수 있습니다.