속도 Template.merge() 실패의 원인은 무엇입니까?어떻게 그것을 피합니까?

StackOverflow https://stackoverflow.com/questions/74818

  •  09-06-2019
  •  | 
  •  

문제

우리 팀은 속도 템플릿과 관련하여 반복되는 문제를 경험해 왔습니다.렌더링 시 일부는 "Template.merge() 실패 - Velocity 템플릿 '/template.vm'을 렌더링할 수 없습니다"라는 메시지와 함께 RuntimeException을 발생시킵니다.우리는 문제를 재현할 수 없었고 웹상의 문서도 꽤 불충분합니다.문제는 지속적으로 재현 가능하지 않습니다. 렌더링에서 가끔 오류가 발생하는 동일한 템플릿이 다른 경우에도 문제 없이 표시됩니다.템플릿 클래스 소스 코드 또한 별 도움이 되지 않습니다.미리 감사드립니다.


편집하다:Nathan Bubna의 답변을 바탕으로 Velocity 버전 1.4를 사용하고 있음을 명확히 해야 합니다.


편집하다:스택 추적이 도움이 될 것이라고 지적되었으므로 다음과 같습니다.

2008-09-15 11:07:57,336 오류 속도 - Template.merge() 실패.문서가 null입니다. 구문 분석 오류 때문일 가능성이 높습니다.2008-09-15 11 : 07 : 57,336 오류 속도-속도 템플릿을 렌더링 할 수 없음, '/search/]'/search/ 마음.Template.merge() 실패.문서가 null입니다. 구문 분석 오류 때문일 가능성이 높습니다.com.opensymphony.webwork.dispatcher.velocityResult.doexecute (velocityResult.java:91)의 org.apache.velopity.merge (template.java:277)에서 com.opensymphony.webwork.wworksportupport. .java : 109) at com.opensymphony.xwork.defaultactionInvocation.executerSult (defaultActionInvocation.java:258) at com.opensymphony.xwork.defaultactionInvocation.invoke (com.opensymphony.xwork.xwork.Interscorce.Intercecrector. com.opensymphony.xwork.defaultactioninvocation.invoke (defaultactionInvocation.java:164)에서 com.opensymphony.xwork.interceptor.aroundinterceptor.interccept (atranceinterceptor.java:35)의 intercept (interceptor.java:35). .DefaultActionInVocation.Invoke (defaultactionInvocation.java:164)의 com.opensymphony.xwork.interceptor.aroundinterceptor.aroundinterceptor.Antercept (atranceNterceptor.java:35)의 com.opensymphony.xwork.defictactionInvocation.Invoke (deficationInVoke.javoa) at com4). OpenSymphony.xwork.interceptor.aroundinterceptor.intercept (com.opensymphony.xwork.defaultactionInvocation.invoke (defaultactionInvocation.java:164)의 interceptor.java:35) intercept (intercector.java:35) com.opensymphony.xwork.interceptor.aroundercepsor.interceptor.java : 35)에서 com.opensymphony.xwork.defaultactionInvocation.invoke (defaultactionInvocation.java:164)에서 com.opensymphony.xwork.aroundinterceptor.intercept (atranceinterceptor.java:35) at com.opensymphony.xwork.invocation.invocation (defultationInvocation) .java : 164)에서 com.opensymphony.xwork.defaultactionProxy.execute (defaultactionProxy.java:116)에서 com.opensymphony.webwork.dispatcher.servletdispatcher.serviceaction (servletdispatcher.java:272)의 com.openspatcher .webbocy.webbawony.webba.webba:272). servletdispatcher.service (servletdispatcher.java:237) at javax.servlet.http.httpservlet.service (httpservlet.java:802) at org.apache.catalina.core.core.core.core.core.core.core. .catalina.core.applicationfilterchain.dofilter (com.opensymphony.module.sitemesh.filter.pagefilter.dofilter (pagefilter.java:39)의 org.apache.catalina.core.applicationfilterain. .java : 202)에서 org.apache.catalina.core.applicationfilterchain.dofilter (applicationfilterchain.java:173) at org.nanocontainer.nanowar.webwork2.picoobjectfactoryfilter.dofilter (picoobjectfactoryfilter.java:46) at org.apicache. core.applicationfilterchain.internaldofilter (applicationfilterchain.java:202) at org.apache.catalina.core.applicationfilterchain.dofilter (applicationfilterchain.java:173) at org.nanocontainer.nanowestconnerfilterfilter.depilterfilter.deterfilter.depilterfilter. AVA : 44) org .apache.catalina.core.applicationfilterchain.internaldofilter (applicationfilterchain.java:202) at org.apache.catalina.core.applicationfilterchain.dofilter (ApplicationFilterchain.java:173) at com.bostoncapital.stuyvesant.rememonfilter. 아바 : 30) at org.apache.catalina.core.applicationfilterchain.internaldofilter (applicationfilterchain.java:202) at org.apache.catalina.core.applicationfilterchain.dofilter (applicationfilterchain.java:173) at org.apache.cateina.core. org.apache.catalina.core.invoke (StandardwrapperValve.invake.java:214) at org.apache.catalina.authenticator.authenticatorbase.invoke (authenticatorbase. .apache.catalina.valves.accesslogvalve.invoke (ac .java : 105) org.apache.catalina.core.standardenginevalve.invoke (StandardEngineValve.java:107) at org.apache.catalina.connector.coyoteadapter.service (coyoteadapter.java:148)에서 org.apache.cogothe. http11.http11processor.process (http11processor.java:825) at org.apache.coyote.http11.http11protocol $ http11connectionhandler.processconnection (http11protocol.java:738) at org.popool.ut.ToTCOLCHACH.TOTCOLCHACH.TOTCOLCHACH.TOTCOLCHACH.TOTCOLCHACH.TOTCOLCHACH. OCESSSOCKET (pooltcpendpoint. java : 526) at org.apache.tomcat.util.net.leaderfollowerworkerthread.runit (org.apache.tomcat.util.threads.threadpool $ 컨트롤 런 가능.run (threadpool.java:684) at Java. .lang.thread.run (알 수없는 소스)

도움이 되었습니까?

해결책

어떤 버전의 Velocity를 사용하고 있나요?이 문제를 일으킨 이전 버전에는 일부 경쟁 조건이 있었습니다.대부분은 Velocity 1.5 릴리스에서 찌그러졌습니다.개인적으로 Velocity 1.6-beta1을 사용하는 것이 좋습니다.성능(메모리 및 속도)이 크게 향상되었으며 1.5에는 포함되지 않은 많은 사소한 버그 수정이 이루어졌습니다.

편집하다:1.4를 사용하고 있다고 말씀하셨으니, 그렇습니다. 이것이 우리가 고친 경쟁 조건이라고 확신합니다.업그레이드를 고려해 보시기 바랍니다.1.6은 버그 수정과 향상된 성능을 제공하므로 확실히 최선의 선택입니다.1.6 최종 버전이 곧 출시될 예정입니다.

다른 팁

저는 지금 우리 웹사이트에서 동일한 버그를 해결하기 위해 노력하고 있습니다.

경쟁 조건인 것 같습니다.동일한 페이지를 가져오는 여러 프로세스를 사용하여 일관되게 재현할 수 있지만 요청을 직렬화하면 절대 재현할 수 없습니다.

저는 속도-1.5를 사용하고 있습니다.1.6-beta1로 마이그레이션을 시도했지만 다른 오류가 표시됩니다.

해결됨:아래 댓글을 참조하세요

소스의 주석에는 이미 이런 일이 발생해서는 안 된다고 명시되어 있으므로 템플릿 소프트웨어의 버그라고 생각합니다.버그 보고서를 작성한 사람에게 버그 보고서를 제출하세요.

RuntimeException과 그 원인에 대한 전체 스택 추적을 가져와야 합니다.

해당 정보를 추가하려면 답변을 편집하십시오.

코드 작성자에게 이메일을 보내 통찰력을 얻을 수 있는지 확인했습니다.제가 배운 모든 것을 공유하겠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top