【问题标题】:Running a simple JSF webapp on TOMEE-9.0 PLUS cannot start properly due to Undefined component type jakarta.faces.ViewRoot由于未定义的组件类型 jakarta.faces.ViewRoot,在 TOMEE-9.0 PLUS 上运行简单的 JSF webapp 无法正常启动
【发布时间】:2023-04-01 00:33:01
【问题描述】:

我希望 TOMEE 社区的人能看到这一点。我不确定是否最好在 TOMEE Jira 项目中提交问题。我在 Linux 和 MAC 上的 PC 上测试了相同的场景,结果相同

简而言之,在运行 JSF 应用程序时,我使用 eclipse 和 TOMEE-9.0.0-M7 plus 部署了这个 webapp 后出现错误。启动期间一切看起来都很好,但是在浏览器中到达应用程序上下文时出现错误(请参阅代码块)

Here 是我测试过的项目所在的 GitHub 存储库

注意:我没有使用 maven 插件来运行战争,我在 eclipse 中设置了 TOMEE。

谢谢。

这里是堆栈跟踪:

SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/samplejakarta9] threw exception [Undefined component type jakarta.faces.ViewRoot] with root cause
jakarta.faces.FacesException: Undefined component type jakarta.faces.ViewRoot
    at org.apache.myfaces.application.ApplicationImpl.createComponent(ApplicationImpl.java:1504)
    at org.apache.myfaces.application.ApplicationImpl.createComponent(ApplicationImpl.java:1472)
    at jakarta.faces.application.ApplicationWrapper.createComponent(ApplicationWrapper.java:133)
    at org.apache.myfaces.shared.view.ViewDeclarationLanguageBase.createView(ViewDeclarationLanguageBase.java:53)
    at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.createView(FaceletViewDeclarationLanguage.java:2056)
    at org.apache.myfaces.application.ViewHandlerImpl.createView(ViewHandlerImpl.java:264)
    at jakarta.faces.application.ViewHandlerWrapper.createView(ViewHandlerWrapper.java:115)
    at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage$FaceletViewMetadata.createMetadataView(FaceletViewDeclarationLanguage.java:2758)
    at org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:252)
    at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:195)
    at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:142)
    at jakarta.faces.webapp.FacesServlet.service(FacesServlet.java:204)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:223)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)
    at org.apache.openejb.server.httpd.EEFilter.doFilter(EEFilter.java:67)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
    at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.tomee.catalina.OpenEJBSecurityListener$RequestCapturer.invoke(OpenEJBSecurityListener.java:97)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:353)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:870)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1696)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:834)    

【问题讨论】:

    标签: jakarta-ee apache-tomee


    【解决方案1】:

    tl;博士

    9.0.0-M7 容器使用的是 MyFaces 版本 (2.3.8),它还没有准备好 Jakarta 命名空间。

    请参阅相关文档here,其中指出:

    3.0.x 即将推出的 Jakarta Faces 3.0。它等同于 JSF 2.3,但使用“jakarta.faces”包和常量而不是“javax.faces”

    我刚刚创建了 TOMEE-3754 并将更新依赖项,因此它将包含在下一个版本中。

    加长版

    TomEE 9.0.0-M7 是通过字节码转换从与 TomEE 8.0.x 系列相同的代码库(即 JavaEE 命名空间)构建的。

    目前,两个版本都在 2.3.8 版本中捆绑了 MyFaces,它无法处理 Jakarta 命名空间。需要升级到 3.0.x 版本的 MyFaces。

    要修复您的示例,您必须手动将 MyFaces 版本更换为 3.0.0。为此,只需删除

    myfaces-api-2.3.8.jar
    myfaces-impl-2.3.8.jar
    

    在容器的lib 文件夹中。然后,您可以通过 3.0.0 版本替换它们

    您还可以通过 TomEE Maven 插件配置此行为。您的 POM 将类似于:

        <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>${maven-war-plugin.version}</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.tomee.maven</groupId>
                <artifactId>tomee-maven-plugin</artifactId>
                <version>8.0.6</version> <!-- Note: No 9.0.0-M7 Maven Plugin is available yet but we can use the old one  -->
                <configuration>
                    <tomeeVersion>9.0.0-M7</tomeeVersion>
                    <tomeeClassifier>plus</tomeeClassifier>
                    <debug>false</debug>
                    <tomeeHttpPort>8282</tomeeHttpPort>
                    <debugPort>5005</debugPort>
                    <args>-Dfoo=bar</args>
                    <config>${project.basedir}/src/test/tomee/conf</config>
                    <libs>
                        <lib>remove:myfaces</lib>
                        <!-- Adding MyFaces 3.0.0 JSF implementation  -->
                        <lib>org.apache.myfaces.core:myfaces-impl:3.0.0</lib>
                        <lib>org.apache.myfaces.core:myfaces-api:3.0.0</lib>
                    </libs>
                    <skipCurrentProject>true</skipCurrentProject>
                    <webapps>
                        <webapp>
                            com.github.gdiazs:sample-jakarta9:1.0.0-SNAPSHOT
                        </webapp>
                    </webapps>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    【讨论】:

    • 太棒了,感谢您的反馈和修复我希望我在某种程度上有所帮助。谢谢!
    • 感谢您的提问和测试 :) - 否则不会被注意到!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 2014-12-24
    相关资源
    最近更新 更多