【问题标题】:Using mojorra implementaiton on Websphere Application Server 8在 Websphere Application Server 8 中使用 mojarra 实现
【发布时间】:2012-07-16 00:09:24
【问题描述】:

我认为我受困于想法。我正在尝试将liferay portlet 从weblogic 移到WAS 8。在weblogic 上,我一直在使用JSF 2.0 的mojorra 实现和primefaces 作为组件库。我在 WAS 上安装了 primefaces,当我尝试移动 portlet 时,问题开始出现。

第一个问题是 WAS 不断尝试使用 myfaces 作为 JSF 实现 - 我知道这是因为 myfaces 抛出异常:

引起:java.lang.IllegalArgumentException: factoryName'javax.faces.view.facelets.FaceletCacheFactory' 在 javax.faces.FactoryFinder.checkFactoryName(FactoryFinder.java:383)

我在 maven pom.xml 文件中有以下依赖项:

<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-api</artifactId>
    <version>2.1.2</version>
</dependency>
<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-impl</artifactId>
    <version>2.1.2</version>
</dependency>

对于 WAS 应用程序,我将类加载器设置为首先加载我的类。但这没有帮助。为了确保我为服务器配置了新的类加载器 - 但情况再次重复。我的最后一个想法是将 mojarra jar 定义为共享库 - 但后来我得到了 ClassFormatException(我没有时间研究它)。

有什么想法吗?


将 mojorra 类添加到 WAR 并更改类加载器后,我遇到了异常:

[7/17/12 18:52:25:072 CEST] 0000002c 配置 E 严重错误 部署期间: com.sun.faces.config.ConfigurationException:配置失败! factoryName 'javax.faces.view.facelets.FaceletCacheFactory' 在 com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:375) 在 com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:225) 在 com.ibm.ws.webcontainer.webapp.WebApp.notifyServletContextCreated(WebApp.java:1649) 在 com.ibm.ws.webcontainer.webapp.WebAppImpl.initialize(WebAppImpl.java:410)

我跟踪了异常,发现只有 myfaces 实现中的 factoryfinder 可能我应该向项目添加其他依赖项,除了已经存在的依赖项(jsf-api、jsf-impl)?


在将 jsf 库指定为共享库并将它们作为对我的战争的引用之后 - 初始化成功,没有任何错误 - 另一个问题是现在 liferay 正在抛出异常:

01:21:16,956 错误 [LiferayFacesContext:61] 实例未初始化 -- 调用者可能是静态的 01:21:16,960 错误 [LiferayLocalePhaseListener:87] java.lang.NullPointerException 在 com.liferay.faces.portal.lifecycle.LiferayLocalePhaseListener.setLocale (LiferayLocalePhaseListener.java:67)

也许是因为我还应该将 liferay 库定义为共享库 - 我会在几秒钟内尝试。

以下例外是:

引起:java.lang.NullPointerException at com.liferay.faces.bridge.renderkit.html_basic.HeadRendererBridgeImpl.encodeBegin (HeadRendererBridgeImpl.java:133)

不知道这两个异常是否相互关联 - 但结果是我的 portlet 无法工作:(

【问题讨论】:

  • 在我的情况下 PARENT_LAST 有帮助。通过将您的 mojarra 库包含在 web-inf/lib 下并为 ear 中的模块设置 PARENT_LAST,您有什么例外?您是否在 WAS8 中使用 RAD?

标签: primefaces liferay mojarra websphere-8


【解决方案1】:

在 WebSphere 中使用一些自定义类加载器魔法是完全可能的。在此处查看此线程:

http://forum.primefaces.org/viewtopic.php?f=3&t=6860

【讨论】:

  • 看起来很有希望,我会告诉你进展如何
  • 好的,一些新的事实 - 我已经将库定义为新创建的类加载器的共享库,并且所有人工制品都开始了。但问题是在运行 portlet 期间我遇到了不兼容类 javax.servlet.ServletContext 的异常 - 因为我发现 liferay 是在 2.5.0 版本之上构建的,但 WAS8 是随版本 2.6.0 提供的
  • 您是否按照所有指示进行操作?向下滚动并确保您阅读了有关隔离类加载器以及 websphere 如何让您在每次进行更改时从头开始的内容。
  • 是的,我做到了——最后我删除了所有配置并从头开始做——但你知道结局。这让我痛苦的是 ServletContext 类的故事,正如我告诉你的那样,WAS 尊重我的类加载器,我首先看到了我的 jar,但他忽略了那个 jar 中的 ServletContext 类,并选择了他自己的 jar 版本,其版本与包含在liferayportal*.war
  • 答案是你可以使用 JSF2.0 + liferay bridge + WAS8——因为简单的 servlet 规范实现是行不通的——降级到 WAS7 后一切正常
猜你喜欢
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
  • 2011-08-05
  • 2015-12-25
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
相关资源
最近更新 更多