在Glassfish中部署JSF应用程序时出错

时间:2013-09-02 19:16:18

标签: jsf netbeans glassfish

我曾经在Glassfish服务器上部署JSF + Primefaces应用程序,没有任何问题。最近我升级了我的NetBeans版本。之后我对大多数应用程序没有任何问题。但是当我尝试进行部署时,其中一个失败了,这就是错误消息:

  

部署期间出错:加载应用时出现异常:   java.lang.IllegalStateException:ContainerBase.addChild:start:   org.apache.catalina.LifecycleException:java.lang.RuntimeException:   com.sun.faces.config.ConfigurationException:   java.util.concurrent.ExecutionException:   com.sun.faces.config.ConfigurationException:无法解析文档   “罐子:文件中:/ opt / glassfish3 /的glassfish /域/域1 /应用/ [名称的最应用] /WEB-INF/lib/javax.faces.jar!/META-INF/mojarra_ext.taglib.xml “:   空值。有关更多详细信息,请参阅server.log。

项目似乎一切正常(清理和构建良好),但错误不断出现。这就是我正在使用的环境:

  • NetBeans 7.3.1
  • JSF 2.2(Mojarra)
  • GlassFish开源版3.1.1(版本12)。

PS:当我尝试使用NetBeans捆绑的Glassfish 3进行部署时,这就是错误:

  

SEVERE:部署期间出错:class com.sun.faces.application.annotation.PersistenceUnit Scanner无法访问其超级接口com.sun.faces.application.annotation.Scanner

由于

1 个答案:

答案 0 :(得分:9)

  

无法解析文件'jar:file:/ opt / glassfish3 / glassfish / domains / domain1 / applications / [name-of-the-application] /WEB-INF/lib/javax.faces.jar!/META- INF / mojarra_ext.taglib.xml

taglib文件的路径表明您已将JSF 2.2与webapp一起发布到其/WEB-INF/lib内,而不是升级GlassFish本身。由于GlassFish 3本身附带了JSF 2.1实现,因此您需要指示它不加载它以避免版本冲突。你没有说明你在做什么,所以我想这就是你问题的全部原因。

Glassfish本身已经捆绑了JSF,默认情况下,类加载优先于webapp中捆绑的一个。你基本上需要告诉Glassfish使用webapp捆绑的JSF。

为了实现这一目标,请编辑/WEB-INF/glassfish-web.xml以添加以下两行。

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

如果文件不存在,则创建它,您可以找到示例xml文件here。并在<glassfish-web-app>标记内添加上面两行。

然后,GlassFish将禁止加载自己的捆绑JSF,并依赖于webapp捆绑的JSF。

或者,如果您拥有对Glassfish的完全管理控制权,您还可以将javax.faces.jar文件从JSF 2.2复制到/glassfish/modules目录中,从而替换旧目录,以便从JSF升级它2.1到JSF 2.2,以便它适用于所有的webapps。