如何部署的Oracle WebLogic 12.1 JSF 2.1 web应用程序?(How to

2019-08-01 11:48发布

我想部署一个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

我现在用的钻嘴鱼科实现版本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 Server从装载运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.FacesConfigResourceProviderprefer-application-resources在-section 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>

Answer 1:

通过添加提到的解决方案oehmiche在他作为一个答案的问题。

在META-INF /服务/ com.sun.faces.spi.FacesConfigResourceProvider添加到在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>



Answer 2:

一个除了oemiche的解决方案:在WebLogic 12c的R2(12.2),你必须覆盖从WegLogic的glassfish.jar(JSF 2.2)来的jsf.js:
把下列后... FacesConfigResourceProvider喜欢的应用程序资源:

<资源名称> META-INF /资源/ javax.faces / jsf.js </资源名称>

你要这个,如果你部署应用程序作为一个耳朵添加到WebLogic-application.xml中。



文章来源: How to deploy a JSF 2.1 webapp in Oracle Weblogic 12.1?