2012-07-24 1 views
0

Tomcat 6 웹 서버에서 Apache MyFaces 2.1.7을 사용하여 JSF 2.0 웹 응용 프로그램을 실행하려고합니다. 응용 프로그램은 Tomahawk 1.1.11과 표현 언어 2.2 (el-impl-2.2.jar)를 사용합니다. 그 목적을 위해 나는 myfaces-api와 myfaces-impl을 Tomcat lib 폴더에 넣고 2.2 변형을 위해 Tomcat el-api.jar를 교환했습니다.Tomcat 6의 JSF 2.0 앱 : "공장을 구성하지 않았습니다."

내가 응용 프로그램의 첫 페이지를 호출 할 때 난 항상 오류 얻을 : 나는 확실히 XML 조각 내 web.xml에서 언급 한

java.lang.IllegalStateException: No Factories configured for this Application. This 
happens if the faces-initialization does not work at all - make sure that you properly 
include all configuration settings necessary for a basic faces application and that all 
the necessary libs are included. Also check the logging output of your web application 
and your container for any exceptions! 
If you did that and find nothing, the mistake might be due to the fact that you use 
some special web-containers which do not support registering context-listeners via TLD 
files and a context listener is not setup in your web.xml. 
A typical config looks like this; 
<listener> 
<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class> 
</listener> 

javax.faces.FactoryFinder._getFactory(FactoryFinder.java:286) 
javax.faces.FactoryFinder.getFactory(FactoryFinder.java:206) 
javax.faces.webapp.FacesServlet.init(FacesServlet.java:116) 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) 
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
java.lang.Thread.run(Thread.java:679) 

합니다. 나는 코드로 디버그를 시도하고 javax.faces.FactoryFinder의 라인 267에있는 registeredFactoryNames이 비어있어서 오류가 발생하는 것으로 나타났습니다. 그러나 나는 이것이 왜 그런지 이해하지 못한다. 거기에는 무엇이 있어야하며 어떻게해야합니까?

재미있는 점은 webapp가 임베디드 부두 8을 사용하여 완벽하게 실행된다는 것입니다. 따라서 일부 종속성 문제가 있어야합니다.

이 모든 것에 대한 더 많은 통찰력을 가진 누군가가 나를 도와 줄 수 있기를 바랍니다.

답변

2

ok

이 문제점을 발견했습니다. 오류는 myfaces-api.jar을 클래스 경로에 두 번 가져온 결과입니다. 그래서 저에게 문제는 tomcat lib 폴더와 webapp의 WEB-INF/lib 폴더에 myfaces-api.jar를 놓은 것입니다.

maven과 함께 임베디드 tomcat을 사용하는 동안 myfaces-api.jar는 전체 응용 프로그램의 종속성과 범위가 tomcat6-maven-plugin의 종속성에 모두 포함되어 컴파일되었습니다. 범위를 전역 종속성 섹션에서 제공된 것부터 컴파일로 변경했습니다.

1

비어있는 faces-config.xml 파일을/WEB-INF/폴더 아래에 추가하면 응용 프로그램이 JSF를 사용하고 MyFaces가 초기화 단계를 계속한다는 것을 나타낼 수 있다고 생각합니다. 자세한 내용은 org.apache.myfaces.ee6.MyFacesContainerInitializer 클래스를 참조하십시오.

+0

사실 저는'WEB-INF'에 비어있는 faces-config.xml이 있습니다. 그 경우가 아니라면 부두가있는 곳에서는 앱이 실행되지 않습니다. – ali

+0

try tomcat : run-war – lu4242

+0

이전 tomcat 플러그인을 호출하기 때문에 도움이 될 것이라고 생각하지 않습니다. 새로운 하나는 tomcat6 : run 또는 tomcat7 : run과 함께 호출됩니다. 그것은 매력처럼 작동합니다. 문제는 메이븐 플러그인과 관련이 없지만 의존성을 만족시키는 것과 관련이 있다고 생각합니다. 저의 최신 연구 결과를 편집했습니다. – ali