如何利用Weblogic 10.3.x上的EL 2.2功能



我安装了Weblogic 10.3.5。我在服务器上部署了一个带有JSF2.0和JSTL1.2的WAR。但我也需要EL 2.2的功能。我需要什么JAR?如果有人能给我指一份从头开始的分步指南,那就太好了,因为我已经尝试了几个小时,但没有成功。

最简单的方法是在/WEB-INF/lib中删除jboss-el.jar,它是一个与el 2.1兼容的实现,提供与el 2.2相同的功能,并告诉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>

另请参阅:

  • 调用直接方法或EL中带有参数/变量/参数的方法

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

最终,以下是在WebLogic 10.3.6服务器上对我有效的方法。

我从Glassfish下载了EL2.2 API和Implementation jar,并将它们包含在web应用程序的WEB-INF/lib文件夹中。

el-api-2.2.jar

el-impl-2.20-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>

当我发现el 2.2的jboss实现在重新部署时存在永久空间内存泄漏时,我重新提出了这个问题。我尝试了其他几种可用的实现方式,即

  • juel 2.2.1
  • tomcat jasper el 7.0.35

但一个也没跑。使用2.2 glassfish实现也不起作用(即使使用更喜欢的web-inf类或更喜欢的应用程序包),这是类加载问题的原因。

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

最新更新