如何在 Oracle Weblogic 12.1 中部署 JSF 2.1 webapp?
Posted
技术标签:
【中文标题】如何在 Oracle Weblogic 12.1 中部署 JSF 2.1 webapp?【英文标题】:How to deploy a JSF 2.1 webapp in Oracle Weblogic 12.1? 【发布时间】:2012-10-05 13:43:15 【问题描述】:我正在尝试将 JSF 2.1 Web 应用程序部署到 Weblogic 12.1 应用程序服务器,但部署失败并出现以下异常
<javax.enterprise.resource.webcontainer.jsf.config> <BEA-000000>
<Critical error during deployment:
com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED!
com.oracle.injection.integration.jsf.WeblogicFacesConfigResourceProvider
cannot be cast to com.sun.faces.spi.ConfigurationResourceProvider
at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:377)
at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:223)
at weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.java:582)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
Truncated. see log file for complete stacktrace
我正在使用 Mojarra 实现版本 2.1.13 - 这是对应的 pom.xml
条目:
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1.13</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.1.13</version>
</dependency>
我在weblogic.xml
中添加了以下几行,以防止 weblogic 服务器加载随附的 jsf 实现:
<container-descriptor>
<prefer-web-inf-classes>false</prefer-web-inf-classes>
<prefer-application-packages>
<package-name>javax.faces.*</package-name>
<package-name>com.sun.faces.*</package-name>
<package-name>com.bea.faces.*</package-name>
</prefer-application-packages>
<prefer-application-resources>
<resource-name>javax.faces.*</resource-name>
<resource-name>com.sun.faces.*</resource-name>
<resource-name>com.bea.faces.*</resource-name>
<resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</resource-name>
</prefer-application-resources>
</container-descriptor>
WeblogicFacesConfigResourceProvider
包含在weblogic.jar
中。
那么这里出了什么问题? - 有什么提示吗?
解决方案
好的,我找到了解决方案:您必须将META-INF/services/com.sun.faces.spi.FacesConfigResourceProvider
添加到weblogic.xml
中的prefer-application-resources
部分。此配置对我有用:
错误的
javax.faces.
com.sun.faces.
com.bea.faces.*
<prefer-application-resources>
<resource-name>javax.faces.*</resource-name>
<resource-name>com.sun.faces.*</resource-name>
<resource-name>com.bea.faces.*</resource-name>
<resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</resource-name>
<resource-name>META-INF/services/com.sun.faces.spi.FacesConfigResourceProvider</resource-name>
</prefer-application-resources>
</container-descriptor>
【问题讨论】:
【参考方案1】:添加oehmiche
在他的问题中提到的解决方案作为答案。
将 META-INF/services/com.sun.faces.spi.FacesConfigResourceProvider 添加到 weblogic.xml 中的 prefer-application-resources-section。此配置对我有用:false javax.faces。 com.sun.faces。 com.bea.faces.*
<prefer-application-resources>
<resource-name>javax.faces.*</resource-name>
<resource-name>com.sun.faces.*</resource-name>
<resource-name>com.bea.faces.*</resource-name>
<resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</resource-name>
<resource-name>META-INF/services/com.sun.faces.spi.FacesConfigResourceProvider</resource-name>
</prefer-application-resources>
【讨论】:
你能做 jsf 2.2 还是要求太多?【参考方案2】:oemiche 解决方案的补充:在 WebLogic 12c R2 (12.2) 上,您必须覆盖来自 WegLogic 的 glassfish.jar (JSF 2.2) 的 jsf.js: 在 ...FacesConfigResourceProvider 之后将以下内容放入 prefer-application-resources 中:
META-INF/resources/javax.faces/jsf.js
如果您将应用程序部署为 ear,则必须将其添加到 weblogic-application.xml。
【讨论】:
以上是关于如何在 Oracle Weblogic 12.1 中部署 JSF 2.1 webapp?的主要内容,如果未能解决你的问题,请参考以下文章
在 oracle 12.1 中如何使用 sqlplus 将表数据导出到 csv 文件中
如何查看 oracle weblogic server11g集群连接池最大容量