3

我曾经在 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: 无法解析文档'jar:file:/opt/glassfish3/glassfish/domains/domain1/applications/[name-of-the-application]/WEB-INF /lib/javax.faces.jar!/META-INF/mojarra_ext.taglib.xml':空。有关详细信息,请参阅 server.log。

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

  • NetBeans 7.3.1
  • JSF 2.2 (莫哈拉)
  • GlassFish 开源版 3.1.1(内部版本 12)。

PS:当我尝试使用捆绑在 NetBeans 中的 Glassfish 3 进行部署时,出现以下错误:

严重:部署期间出错:com.sun.faces.application.annotation.PersistenceUnit 类扫描程序无法访问其超级接口 com.sun.faces.application.annotation.Scanner

谢谢

4

1 回答 1

10

无法解析文档 '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 文件。<glassfish-web-app>并在标签内从上面添加两行。

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

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

于 2013-09-02T21:02:25.767 回答