使用自定义DI框架进行自定义JSF实施

时间:2018-10-31 13:21:02

标签: jsf cdi

与JSF 2.3一样,不推荐使用@ManagedBean和其他javax.faces.bean。*批注,并用JavaEE 6 CDI代替。

我成功制作了一个示例JSF项目,并使用服务器实现“ glassfish.jsf.jar”将其部署到WebLogic,并且在WEB-INF / lib中没有实现JSF或CDI。

但是我担心服务器实现有时会过时,有时我的应用程序在不同的应用程序服务器中工作时表现会有所不同,因此我认为最好是控制JSF的实现。

最近4天,我一直在寻找一种使用自定义JSF实现(Mojarra或MyFaces)的方法,该实现使用新的CDI批注或任何其他DI框架,但是没有运气。

如果我想摆脱@ManagedAnnotations,我必须使用JSF和CDI的JavaEE服务器实现。

我的问题:是否有一种方法可以在WAR中包含我首选的JSF和CDI实现,并将其部署到WebLogic和WildFly等不同的应用服务器上。

注意:我发现自2013年以来有一个old question,答案为“否”,但我想知道这个答案是否仍然有效

编辑02/11/2018: 我在Tomcat Server上成功安装了带有嵌入式JSF(Mojarra)和CDI(Weld)的项目,而没有任何问题。我认为是因为Tomcat是Servlet容器,所以没有冲突。

我认为我的问题是由于嵌入式CDI与Weld的服务器实现版本之间存在冲突。我找不到使我的应用程序像黑盒子一样的解决方案。

我使用了这个weblogic.xml 错误

    <prefer-application-packages>
        <package-name>!javax.servlet.*</package-name>   
    </prefer-application-packages>

    <prefer-application-resources>
        <resource-name>!javax.servlet.*</resource-name>
    </prefer-application-resources>

1 个答案:

答案 0 :(得分:0)

另一个答案仍然有效。但是还有其他一些(更好的)选项

1还将完整的java-ee容器作为应用程序的一部分提供。

2要求最低版本的特定应用服务器

3告诉客户他们至少需要某些库的特定版本