JSF 2.0 能否与 Websphere 应用服务器版本 7.x 一起使用
Posted
技术标签:
【中文标题】JSF 2.0 能否与 Websphere 应用服务器版本 7.x 一起使用【英文标题】:Can JSF 2.0 be used with Websphere application server version 7.x 【发布时间】:2010-12-15 16:36:11 【问题描述】:JSF 2.0 可以与 WebSphere Application Server 7.x 版一起使用吗?
如果有,怎么做?
【问题讨论】:
【参考方案1】:WebSphere Infocenter 表示更改为替代 JSF 实现的正确方法是创建一个启用了隔离类加载器选项的 WebSphere 共享库。
任何需要 JSF 2 的模块都将与新的共享库相关联,然后应用程序将从 JSF 2 而不是 JSF 1.2 开始。
也是necessary to have fix pack 7.0.0.19 or later installed。
【讨论】:
您谈到了 IBM Infocenter 站点上提供的信息,但您没有提供链接。为什么? publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/… 也许我做错了什么,但这对我不起作用。当我按照这些说明进行操作时,它仍在尝试加载 SUN JSF-1.2 参考实现。 好的,我明白了。我需要为 WAS 运行一些修订包并确保 JSF 版本至少为 2.0.4。现在它正在工作。 +1 @Joset,现在时间太长了,我不记得所有的步骤了,但是我使用的两个 jar 是 jsf-api.jar 和 jsf-impl.jar,其版本我在之前的评论中列出了。我需要 WAS 7.0.0.19 和 JSF 2.0.4 或更高版本。【参考方案2】:Websphere 附带 JSF 1.2.something,默认情况下会加载它。要使用不同的 JSF 库(或 WS 提供的任何其他库,例如 commons-logging),您需要更改类加载器确定位置优先级的方式。他们称其为“最后一个父级”,意思是先加载您的库,然后再加载 WS 版本。
【讨论】:
是的,但是当您有多个应用程序使用旧版本时,不能选择 parent last【参考方案3】:我这几天一直在努力解决这个问题。这是我解决它的方法。
使用以下库:javax.faces-2.1.7.jar
如果您使用的是 PrimeFaces 3.1:primefaces-3.1.1.jar
Application Server 实例:类加载 - Parent Last
企业应用程序实例(war 模块):类加载 - Parent Last
确保删除所有 Servlet 容器库,例如 Tomcat 所需的库。
【讨论】:
您使用过 GlassFish 实现吗?按 jar 名称搜索表明了这一点。是使用 WebSphere 7.0 吗?【参考方案4】:按照 IBM 的建议,逐步将 WebSphere Application Server v7 上的 MyFaces 2.0 设置为共享库: http://wasbehindtheglass.blogspot.co.uk/
我为 Majorra/JSF 2.0.4 应用了类似的步骤,并仅使用 jsf-api.jar 和 jsf-impl.jar 创建了一个共享库。正如@Ian McLaird 所说,需要 WAS 7.0.0.19 和 JSF 2.0.4。 JSF 2.1.x 需要 Servlet 3,WAS7 不支持
【讨论】:
如果您使用的是 RAD,并且您不想在每次部署应用程序时从 WAS7 管理控制台更改设置共享库,那么您可以包含一个部署描述符(名为 deployment.xml ) 在您的项目中设置共享库。详情见链接:webspheretools.com/sites/webspheretools.nsf/docs/… 您是否尝试过使用 MyFaces 2.1,或者您正在写它不能基于其他来源工作?如果可以,可以发一下吗?【参考方案5】:我的经验:
-> Windows 上的 WAS 7.0.0.11
-> 我的 War 应用程序的 WEB-INF/lib 中的 javax.faces-2.0.11.jar
-> 使用带有独立类加载器的 javax.faces-2.0.11.jar 共享库
-> 与我的 War App 关联的共享库
-> 实例和应用程序的类加载器没有变化 (PARENT_FIRST)
有了这个配置(上图),应用程序可以在 WAS 7 上与 JSF 2.0 一起正常工作。 如果我从我的 War 应用程序中删除 javax.faces-2.0.11.jar,它不起作用。
【讨论】:
【参考方案6】:以下对我有用
创建一个共享库并将 JSF 2.0 jar 放入其中。 还要添加 EL 2.2 API 和 EL-Impl 2.2 jar,因为 JSF 2.0 隐式需要这个。 将此库添加到您的应用程序并将类加载器首选项设置为 PARENT_LAST。如下修改web.xml
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>com.sun.el.ExpressionFactoryImpl</param-value>
</context-param>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
就是这样。
【讨论】:
【参考方案7】:您好,我可以使用这个库来运行我的网站
在我的项目的 web.xml 中配置
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>com.sun.el.ExpressionFactoryImpl</param-value>
</context-param>
在 websphere 中配置以加载我的库(上一个父级)
问候
【讨论】:
【参考方案8】:谢谢你们!
它适用于较新版本的 javax.faces。查看 Maven 依赖项:
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.faces</artifactId>
<version>2.1.29-08</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>el-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>com.sun.el</groupId>
<artifactId>el-impl</artifactId>
<version>2.2</version>
</dependency>
不要忘记在 web.xml 中添加以下内容:
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>com.sun.el.ExpressionFactoryImpl</param-value>
</context-param>
最后将应用程序和模块的WebSphere类加载器顺序改为(parent last)设置: https://www.ibm.com/support/knowledgecenter/SSAW57_7.0.0/com.ibm.websphere.nd.doc/info/ae/ae/urun_rclassloader_inst.html
问候
【讨论】:
以上是关于JSF 2.0 能否与 Websphere 应用服务器版本 7.x 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
Managed Bean中的EJB3.0 @EJB注释JSF2 Websphere 7是不可能的?
在同一个 Tomcat 服务器上部署 JSF 1.2 和 JSF 2.0 应用程序