应用程序服务器中的 JSF 2 问题?

Posted

技术标签:

【中文标题】应用程序服务器中的 JSF 2 问题?【英文标题】:JSF 2 Issues in Application Servers? 【发布时间】:2011-08-14 12:14:45 【问题描述】:

我熟悉在 Websphere 7 中使用 JSF 2 时的类加载问题。我想知道其他全栈应用程序服务器上是否存在类似问题。 JBoss 5+、WebLogi 10+ 等呢? JSF 2 是否存在任何已知问题?如果有,需要做什么才能让 JSF 2 在这些服务器上运行?

谢谢

【问题讨论】:

【参考方案1】:

在 WebSphere 5.x 和当前 8.x 上,您需要在 WAS 管理控制台中将 WAR 和 EAR 类加载器设置为 PARENT_LAST,只要您想在 /WEB-INF/lib 中捆绑和使用您自己的 JSF impl。

在 JBoss 4.x 和当前 6.x 上,将以下上下文参数添加到 /WEB-INF/web.xml 就足以抑制 JBoss 的内置 JSF 部署程序。

<context-param>
    <param-name>org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL</param-name>
    <param-value>true</param-value>
</context-param> 

在 Glassfish 2.x 和当前 3.x 之前,您需要将以下条目添加到 /WEB-INF/sun-web.xml(如果您创建目标运行时设置为 Glassfish 的 Web 项目,带有 Glassfish 插件的 Eclipse 应该自动生成模板文件)。

<class-loader delegate="false" />
<property name="useBundledJsf" value="true" />

在 Weblogic 上,抱歉我不知道,我从未使用过。

【讨论】:

感谢提示。在我看来,要求应用服务器附带 JSF 实现以符合标准并不是最好的主意,因为供应商往往需要很长时间才能适应新标准。它给开发人员造成了很多关于如何处理过时的实现的困惑。【参考方案2】:

在 WebLogic 中有一个共享的 Java EE 库,它包含在 WebLogic for JSF 2.0 中。通过部署描述符易于使用和引用。

【讨论】:

现在很好,也许未来两年。但是如果 JSF 3 发布了呢?我是否必须恢复类加载器层次结构(如在 Websphere 7 中,与 JSF 1.2 一起提供)才能从 WEB-INF/lib 中使用它?【参考方案3】:

这里是 Jeff 提到的库概念的简要操作方法。 http://blog.eisele.net/2009/07/jsf-20-beta-1-on-oracle-weblogic-10gr3.html

看到最新的 WLS 12c 它仍然存在,但 AFAIK 您最终将不得不在未来恢复 web-app 类加载器以支持这个概念。

【讨论】:

感谢您的回答。在此期间,我能够在这个问题上获得一些经验。似乎在成熟的应用程序服务器中提供最新的 JSF 版本总是需要摆弄机智的类加载器。更糟糕的是:提供 JSF 的替代版本可能会影响供应商的支持......因此,您的供应商可能会告诉您,尽管您为支持付出了疯狂的金钱,但由于使用了不受支持的 JSF 版本,它不会被授予。因此,如果您使用的是商业应用服务器并希望继续获得支持:坚持使用旧的 JSF 版本,直到供应商发布新版本。

以上是关于应用程序服务器中的 JSF 2 问题?的主要内容,如果未能解决你的问题,请参考以下文章

在同一个 Tomcat 服务器上部署 JSF 1.2 和 JSF 2.0 应用程序

JSF 2.0 应用程序的水平缩放

如何在 Tomcat 中通过 JNDI 配置 JSF 2.0 应用程序的项目阶段

JSF 2.0 中的 SessionScope

JSF 2 应用程序中的默认托管 Bean 范围是啥?

无法通过 JSF 2.2 中的 web.xml 解决 ViewExpiredException