【问题标题】:How to leverage EL 2.2 functionality on Weblogic 10.3.x?如何在 Weblogic 10.3.x 上利用 EL 2.2 功能?
【发布时间】:2012-02-11 15:26:26
【问题描述】:

我安装了 Weblogic 10.3.5。我在服务器上部署了一个带有 JSF 2.0 和 JSTL 1.2 的 WAR。但我也需要 EL 2.2 功能。我需要什么 JAR?如果有人可以从头开始向我指出分步指南,那就太好了,因为我已经尝试设置了几个小时但没有运气。

【问题讨论】:

标签: java jsf jakarta-ee weblogic el


【解决方案1】:

最简单的方法是在/WEB-INF/lib 中删除jboss-el.jar,这是一个兼容EL 2.1 的实现,提供与EL 2.2 相同的features,并告诉JSF 实现使用该EL 实现。如何做到这一点取决于所使用的 JSF 实现。对于 Mojarra,您需要将以下上下文参数添加到 web.xml

<context-param>     
    <param-name>com.sun.faces.expressionFactory</param-name>
    <param-value>org.jboss.el.ExpressionFactoryImpl</param-value>   
</context-param>

对于 MyFaces,它是以下上下文参数:

<context-param>     
    <param-name>org.apache.myfaces.EXPRESSION_FACTORY</param-name>
    <param-value>org.jboss.el.ExpressionFactoryImpl</param-value>   
</context-param>

另见:

【讨论】:

  • 但是容器附带glassfish.el_1.0.0.0_2-1.jar 开箱即用。使用它默认提供的不是更好吗?
  • JBoss EL 是一个支持enhanced EL 的 EL 2.1 实现,而不是一个 EL 2.1 API。您仍然需要容器自己的 EL 2.1 API。只需保持原样,并确保您在 /WEB-INF/lib 中没有任何容器特定的库。请注意,“JBoss”名称并不意味着它源自 JBoss AS 服务器。 “JBoss”只是一个软件公司名称,就像“Apache”和“Oracle”一样。
  • 那么 glassfish 是 API 而不是实现?
  • 感谢 BalusC,我会再试一次。
  • 抱歉 Bauke,我很抱歉 :) 感谢您的帮助。
【解决方案2】:

我觉得接受的答案可能适用于所有情况,也可能不适用,当然,问题是你将被困在一个单一的 JBoss 版本的 EL 中,而没有任何支持在未来的补丁版本中继续修复错误正确的 2.2 实现。

最终,这就是在 WebLogic 10.3.6 服务器上对我有用的方法。

我从 Glassfish 下载了 EL 2.2 API 和实现 jar,并将它们包含在我的 Web 应用程序的 WEB-INF/lib 文件夹中。

el-api-2.2.jar

el-impl-2.2.0-SNAPSHOT.jar

执行此操作后,您通常需要向 web.xml 添加一个上下文参数,以表示要为新的 EL 实现加载的类,就像在 BalusC 的答案中一样。然而,Weblogic 似乎并不关心这一点,它的类加载器有自己的方式。您需要在您的weblogic.xml 中指定优先类加载到WEB-INF/lib 中的EL 类。这将允许加载您的 Glassfish 实现来代替与 WebLogic 捆绑的旧 EL 实现。

 <container-descriptor>
    <prefer-application-packages>
     <package-name>com.sun.el.*</package-name>
     <package-name>javax.el.*</package-name>
  </prefer-application-packages>
</container-descriptor>

【讨论】:

  • 我倾向于使用 Tomcat EL,因为我发现它通常具有更好的可变参数支持
【解决方案3】:

我必须重新提出这个问题,因为我发现 el 2.2 的 jboss 实现在重新部署时有一个 permgenspace memory leak。 我尝试了其他几种可用的实现,即

  • juel 2.2.1
  • tomcat-jasper-el 7.0.35

但没有运行。 使用 2.2 glassfish 实现也不起作用(即使使用 prefer-web-inf-classes 或 prefer-application-package),导致类加载问题。

如果有任何关于实现是最新的并且可以在不更改服务器类路径的情况下与 weblogic 一起使用的建议,我将不胜感激。

【讨论】:

  • 如果你仍然对这个问题感到好奇,那么请看我下面的回答。 Glassfish 实现确实有效,我相信您只是在某个地方遇到了构建或部署问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多