如何在Oracle Weblogic 12.1中部署JSF 2.1 webapp?

时间:2012-10-15 14:44:12

标签: java-ee jsf-2 weblogic java-ee-6

我正在尝试将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添加到prefer-application-resources中的weblogic.xml部分。这个配置对我有用:              假                      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>

2 个答案:

答案 0 :(得分:5)

在他的问题中添加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>

答案 1 :(得分:2)

oemiche 解决方案的补充:在WebLogic 12c R2(12.2)上,您必须覆盖来自WegLogic的glassfish.jar(JSF 2.2)的jsf.js :
在...之后将以下内容放入prefer-application-resources:FacesConfigResourceProvider:

  

&LT;资源名称&gt; META-INF /资源/ javax.faces / jsf.js&LT; /资源名称&gt;

如果您将应用程序部署为耳朵,则必须将此添加到weblogic-application.xml。