我曾经在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。
项目似乎一切正常(清理和构建良好),但错误不断出现。这就是我正在使用的环境:
PS:当我尝试使用NetBeans捆绑的Glassfish 3进行部署时,这就是错误:
SEVERE:部署期间出错:class com.sun.faces.application.annotation.PersistenceUnit Scanner无法访问其超级接口com.sun.faces.application.annotation.Scanner
由于
答案 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。