jsf - 在 TomEE 7 Plume 中升级 JSF 库的正确方法是什么?

标签 jsf updates apache-tomee tomee-7

我看到 Mojarra 2.3 已于 6 月份发布。正确的升级方法是什么?

  • 在我的 pom.xml 中?基本上我只有

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId> 
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>
    
  • 或者在我的服务器中?我使用的是 TomEE 7 羽,所以我应该手动下载 JAR,删除 lib/tomee-mojarra-7.0.0.jar (即 JSF 2.2 compliant )并将新 JAR 放在那里?我实际上不确定这是否合适,所以我担心答案会告诉我要等到 TomEE 更新其库。

最佳答案

JSF 2.3 尚未发布。最终版本计划于 2017 年上半年与 Java EE 8 一起发布。也许您指的是一个里程碑(测试版)版本,该版本应该可以通过 mXX 识别出来。文件名中的后缀,例如 javax.faces-2.3.0-m06.jar 对于 current一。 JSF 2.3 目前仍在进行中。例如。 JSF 工件的 CDI 生产者,例如 @Inject FacesContext仅添加于 m04 ,新的 JSF 2.3 <f:websocket>仅添加于 m05 ,新的 JSF 2.3 <h:commandScript>仅添加于 m06 以及即将推出的m07其中包括新的 <f:importConstants> 。等等。

基本上,您需要等待 Java EE 8 发布并且您的服务器供应商提供 Java EE 8 兼容服务器。对于 TomEE,这将是虚构的 future TomEE 8 版本。在这种情况下,您可以简单地升级服务器并更新pom.xml中的Java EE版本。至8.0 .

但是,也可以在服务器中手动升级 Mojarra。如何执行此操作取决于所使用的服务器。对于 TomEE 7.0.1 Plume,理论上应该是替换现有的 /lib/javax.faces-2.2.12.jar与较新的文件一起使用。从理论上讲,因为当我尝试它时,OpenWebBeans 似乎不喜欢它。在部署支持 JSF 的项目时,我遇到了以下异常(只是一个带有空 faces-config.xml 文件的空 WAR)。

java.lang.NullPointerException
    at java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1011)
    at java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:1006)
    at org.apache.webbeans.portable.AnnotatedElementFactory.setAnnotatedType(AnnotatedElementFactory.java:154)
    at org.apache.webbeans.container.BeanManagerImpl.addAdditionalAnnotatedType(BeanManagerImpl.java:1292)
    at org.apache.webbeans.portable.events.discovery.BeforeBeanDiscoveryImpl.addAnnotatedType(BeforeBeanDiscoveryImpl.java:134)
    at com.sun.faces.cdi.CdiExtension.beforeBean(CdiExtension.java:95)
    ... 29 more

看来需要做更多的工作才能确定这是否是 OWB 或 Mojarra 中的问题。到目前为止,Mojarra 的 CDI 功能仅使用 Weld 进行了测试(在 GlassFish/Payara 和 WildFly 中)。遗憾的是,目前您还无法在 TomEE 7 上使用 JSF 2.3。

请注意,在这种情况下编辑 pom.xml没有必要。仅为了在 IDE 中调试期间自动附加正确的源,您需要显式添加所需的坐标,并将目标范围设置为 provided

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.faces</artifactId>
    <version>2.3.0-m06</version>
    <scope>provided</scope>
</dependency>

这仍然适用于任何 Mojarra 版本。

另请参阅:

关于jsf - 在 TomEE 7 Plume 中升级 JSF 库的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38440536/

相关文章:

java - ICEFaces inputFile 获取文件内容而不上传

jsf - Spring Security 登录后,我被重定向到 CSS/JS 资源而不是 HTML 页面

java - 内联定义包含在 jsf 中

javascript - JQuery 设置 json 值 : path provided as string

java - 多个具有相同名称的 EJB bean

tomcat - IntelliJ 和 TomEE 7.0.1 JMX 未连接

HTML 5 下拉菜单和 JSF 2.2

javascript - 何时使用 useState() 钩子(Hook)的功能更新形式,例如。集合X(x=>x+1)

r - 使用其他表中的值并基于 data.table 方式中其他表中的条件更新表中的值

jsf - Omnifaces cdi 参数和 JSF 2.3 之间的冲突