2014-08-28 2 views
0

I배포 RichFaces 톰캣 가지고에서 MyFaces에 3.3.3 2.2, PrimeFaces, OmniFaces 등

톰캣 7.0.53 + 우리의 모든 항아리 (스택 트레이스 :)으로 무서워하지 않음) 다음과 같은 구성을 가지고 - 포함 MyFaces 2.2.3/Omnifaces/PrimeFaces/etc ...)는 web-inf \ lib가 아닌 Tomcat \ someName \ lib의 다른 경로 안에있는 웹 응용 프로그램 중 일부에 위치하며 catalina.properties에서 참조됩니다 RichFaces 3.3.3을 사용하는 하나의 레거시 webapp을 제외하고 -이 RichFaces jar는 MyFaces 2.0을 사용하는 동안 잘 작동하는 특정 webapp lib 폴더에 있습니다. 11) 이제 MyFaces 2.2.3으로 전환 한 후 다음 예외가 발생합니다

java.lang.NoClassDefFoundError: com/sun/facelets/tag/jsf/ComponentHandler at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:800) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)

...

Caused by: java.lang.ClassNotFoundException: com.sun.facelets.tag.jsf.ComponentHandler at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at org.apache.tomee.catalina.LazyStopWebappClassLoader.loadClass(LazyStopWebappClassLoader.java:143) ... 64 more

그리고 내가 그 웹 애플리케이션 lib 폴더에 JSF-Facelets의-1.1.14.jar를 삭제하려고 그래서

2.0 사이 2.2이 때문에 Facelets의 패키지 변경 보인다 다음과 같은 예외가

javax.faces.FacesException: Cannot instantiate TagLibrary at org.apache.myfaces.view.facelets.compiler.TagLibraryConfig.create(TagLibraryConfig.java:424) at org.apache.myfaces.view.facelets.compiler.FaceletsCompilerSupport.loadLibraries(FaceletsCompilerSupport.java:157) at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.loadLibraries(FaceletViewDeclarationLanguage.java:2520)

을 ... 가지고

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.Exception: com.sun.facelets.tag.jsf.core.CoreLibrary must be an instance of org.apache.myfaces.view.facelets.tag.TagLibrary at org.apache.myfaces.view.facelets.compiler.TagLibraryConfig.createClass(TagLibraryConfig.java:542) at org.apache.myfaces.view.facelets.compiler.TagLibraryConfig.create(TagLibraryConfig.java:419) ... 50 more

이제 myfaces-impl-2.0.11 및 myfaces-api-2.0.11을 webapp lib 폴더에 놓으려고했지만 이제는 webapp이 Tomcat에 의해 배포되고 OmniFaces와 관련하여 예외가 발생하지 않습니다. 심지어 웹 애플리케이션에서 사용하지 어디에도 언급 한) 나는이 두 개의 서로 다른 JSF 버전을 함께 할 수 있다고 생각

[2014-08-28 09:36:12,645 IDT] E 000001b4 (org.apache.myfaces.webapp.AbstractFacesInitializer#initFaces) An error occured while initializing MyFaces: Class org.omnifaces.application.OmniApplicationFactory is no javax.faces.application.ApplicationFactory java.lang.IllegalArgumentException: Class org.omnifaces.application.OmniApplicationFactory is no javax.faces.application.ApplicationFactory at javax.faces.FactoryFinder.newFactoryInstance(FactoryFinder.java:320) at javax.faces.FactoryFinder._getFactory(FactoryFinder.java:286) at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:191) at org.apache.myfaces.config.FacesConfigurator.configureApplication(FacesConfigurator.java:500) at org.apache.myfaces.config.FacesConfigurator.configure(FacesConfigurator.java:411) at org.apache.myfaces.webapp.AbstractFacesInitializer.buildConfiguration(AbstractFacesInitializer.java:337) at org.apache.myfaces.webapp.Jsp21FacesInitializer.initContainerIntegration(Jsp21FacesInitializer.java:73) at org.apache.myfaces.webapp.AbstractFacesInitializer.initFaces(AbstractFacesInitializer.java:140) at org.apache.myfaces.webapp.StartupServletContextListener.contextInitialized(StartupServletContextListener.java:111) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4973) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1073) at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745)

(하지만 잘못 될 수도 있습니다) 아마 있는지 확인하기 위해 더 나은 해결책이되지 않는 Richfaces 3.3.3은 JSF 2.2.3과 작동합니다.

어떤 아이디어?

답변

2

RichFaces 3.x는 JSF 2.2와 호환되지 않습니다. Tomcat은 org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL 컨텍스트 매개 변수가 web.xml, GlassFish가 <property name="useBundledJsf" value="true" />, glassfish-web.xml 인 JBoss와 같은 고립 된 JSF 클래스 로딩을 지원하지 않습니다. 따라서 웹 애플리케이션을 통해 다른 JSF 버전을 제공하더라도 Tomcat은 자체 로딩을 유지합니다. 이것은 작동하지 않습니다.

당신은 기본적으로 3 가지 옵션을했습니다 :

  1. 배포 것과 일반적인 libs가없는 별도의 톰캣 인스턴스 RichFaces 3.x의 웹 애플리케이션은.

  2. 톰캣의 공용 라이브러리를 다른 웹 응용 프로그램으로 옮기면 각 웹 응용 프로그램이 자체 웹 응용 프로그램을 가져옵니다.

  3. RichFaces 4.x로 업그레이드하십시오. 그곳에 갔었는데, 그들은 아주 잘했습니다. migration guide.

+0

감사합니다, 곧 세 번째 옵션을 시도 : RichFaces 4로 마이그레이션 : '( – Daniel

+0

옵션 4 : 하하 – Ben

+0

:-) Richfaces 제거하십시오. 또한 할 수 :) – BalusC