Spring boot Omnifaces 2.x在使用Weld的Spring引导环境中使用时失败

Spring boot Omnifaces 2.x在使用Weld的Spring引导环境中使用时失败,spring-boot,cdi,omnifaces,weld,Spring Boot,Cdi,Omnifaces,Weld,最后,如前所述,我在Spring引导环境中成功地引导了Weld。CDI对使用Mojarra的JSF和使用Jersey的Web服务都没有问题 但是现在我在尝试将OmniFaces2.6包含在我的应用程序中时遇到了一个问题 我的应用程序启动失败,出现以下消息: com.sun.faces.config.ConfigurationException: Factory 'javax.faces.lifecycle.ClientWindowFactory' was not configured prope

最后,如前所述,我在Spring引导环境中成功地引导了Weld。CDI对使用Mojarra的JSF和使用Jersey的Web服务都没有问题

但是现在我在尝试将OmniFaces2.6包含在我的应用程序中时遇到了一个问题

我的应用程序启动失败,出现以下消息:

com.sun.faces.config.ConfigurationException: Factory 'javax.faces.lifecycle.ClientWindowFactory' was not configured properly.
    at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:330) ~[javax.faces-2.2.14.jar:2.2.14]
    at com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:236) ~[javax.faces-2.2.14.jar:2.2.14]
    at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:439) ~[javax.faces-2.2.14.jar:2.2.14]
    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:227) ~[javax.faces-2.2.14.jar:2.2.14]
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4743) [tomcat-embed-core-8.5.20.jar:8.5.20]
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5207) [tomcat-embed-core-8.5.20.jar:8.5.20]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat-embed-core-8.5.20.jar:8.5.20]
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419) [tomcat-embed-core-8.5.20.jar:8.5.20]
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409) [tomcat-embed-core-8.5.20.jar:8.5.20]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_141]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_141]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_141]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_141]
Caused by: javax.faces.FacesException: com.sun.faces.lifecycle.ClientWindowFactoryImpl
    at javax.faces.FactoryFinderInstance.getImplGivenPreviousImpl(FactoryFinderInstance.java:407) ~[javax.faces-2.2.14.jar:2.2.14]
    at javax.faces.FactoryFinderInstance.getImplementationInstance(FactoryFinderInstance.java:251) ~[javax.faces-2.2.14.jar:2.2.14]
    at javax.faces.FactoryFinderInstance.getFactory(FactoryFinderInstance.java:543) ~[javax.faces-2.2.14.jar:2.2.14]
    at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:283) ~[javax.faces-2.2.14.jar:2.2.14]
    at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:328) ~[javax.faces-2.2.14.jar:2.2.14]
     ... 12 common frames omitted
 Caused by: java.lang.IllegalStateException: Singleton not set for STATIC_INSTANCE => []
    at org.jboss.weld.bootstrap.api.helpers.RegistrySingletonProvider$RegistrySingleton.get(RegistrySingletonProvider.java:28) ~[weld-servlet-shaded-3.0.2.Final.jar:3.0.2.Final]
    at org.jboss.weld.Container.instance(Container.java:53) ~[weld-servlet-shaded-3.0.2.Final.jar:3.0.2.Final]
    at org.jboss.weld.SimpleCDI.<init>(SimpleCDI.java:77) ~[weld-servlet-shaded-3.0.2.Final.jar:3.0.2.Final]
    at org.jboss.weld.environment.WeldProvider$EnvironmentCDI.<init>(WeldProvider.java:45) ~[weld-servlet-shaded-3.0.2.Final.jar:3.0.2.Final]
    at org.jboss.weld.environment.WeldProvider.getCDI(WeldProvider.java:61) ~[weld-servlet-shaded-3.0.2.Final.jar:3.0.2.Final]
    at javax.enterprise.inject.spi.CDI.lambda$getCDIProvider$0(CDI.java:87) ~[weld-servlet-shaded-3.0.2.Final.jar:3.0.2.Final]
    at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174) ~[na:1.8.0_141]
    at java.util.TreeMap$KeySpliterator.tryAdvance(TreeMap.java:2770) ~[na:1.8.0_141]
    at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126) ~[na:1.8.0_141]
    at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498) ~[na:1.8.0_141]
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485) ~[na:1.8.0_141]
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[na:1.8.0_141]
    at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152) ~[na:1.8.0_141]
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.0_141]
    at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464) ~[na:1.8.0_141]
    at javax.enterprise.inject.spi.CDI.getCDIProvider(CDI.java:88) ~[weld-servlet-shaded-3.0.2.Final.jar:3.0.2.Final]
    at javax.enterprise.inject.spi.CDI.current(CDI.java:64) ~[weld-servlet-shaded-3.0.2.Final.jar:3.0.2.Final]
    at org.omnifaces.util.Beans.getManager(Beans.java:87) ~[omnifaces-2.6.8.jar:2.6.8]
    at org.omnifaces.util.Beans.getReference(Beans.java:115) ~[omnifaces-2.6.8.jar:2.6.8]
    at org.omnifaces.application.OmniApplication.<init>(OmniApplication.java:66) ~[omnifaces-2.6.8.jar:2.6.8]
    at org.omnifaces.application.OmniApplicationFactory.createOmniApplication(OmniApplicationFactory.java:86) ~[omnifaces-2.6.8.jar:2.6.8]
    at org.omnifaces.application.OmniApplicationFactory.getApplication(OmniApplicationFactory.java:51) ~[omnifaces-2.6.8.jar:2.6.8]
    at com.sun.faces.application.InjectionApplicationFactory.getApplication(InjectionApplicationFactory.java:93) ~[javax.faces-2.2.14.jar:2.2.14]
    at com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:142) ~[javax.faces-2.2.14.jar:2.2.14]
    at com.sun.faces.lifecycle.ClientWindowFactoryImpl.<init>(ClientWindowFactoryImpl.java:62) ~[javax.faces-2.2.14.jar:2.2.14]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_141]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_141]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_141]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_141]
    at java.lang.Class.newInstance(Class.java:442) ~[na:1.8.0_141]
    at javax.faces.FactoryFinderInstance.getImplGivenPreviousImpl(FactoryFinderInstance.java:405) ~[javax.faces-2.2.14.jar:2.2.14]
    ... 16 common frames omitted
com.sun.faces.config.ConfigurationException:未正确配置工厂“javax.faces.lifecycle.ClientWindowFactory”。
在com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:330)~[javax.faces-2.2.14.jar:2.2.14]
在com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:236)~[javax.faces-2.2.14.jar:2.2.14]
在com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:439)~[javax.faces-2.2.14.jar:2.2.14]
在com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:227)~[javax.faces-2.2.14.jar:2.2.14]
在org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4743)[tomcat-embed-core-8.5.20.jar:8.5.20]
在org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5207)[tomcat-embed-core-8.5.20.jar:8.5.20]
在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)[tomcat-embed-core-8.5.20.jar:8.5.20]
在org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419)[tomcat-embed-core-8.5.20.jar:8.5.20]
在org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)[tomcat-embed-core-8.5.20.jar:8.5.20]
在java.util.concurrent.FutureTask.run(FutureTask.java:266)[na:1.8.0141]
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)[na:1.8.0141]
在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)[na:1.8.0141]
在java.lang.Thread.run(Thread.java:748)[na:1.8.0141]
原因:javax.faces.faces异常:com.sun.faces.lifecycle.ClientWindowFactoryImpl
在javax.faces.FactoryFinderInstance.getImplGivenPreviousImpl(FactoryFinderInstance.java:407)~[javax.faces-2.2.14.jar:2.2.14]
在javax.faces.FactoryFinderInstance.getImplementationInstance(FactoryFinderInstance.java:251)~[javax.faces-2.2.14.jar:2.2.14]
在javax.faces.FactoryFinderInstance.getFactory(FactoryFinderInstance.java:543)~[javax.faces-2.2.14.jar:2.2.14]
在javax.faces.FactoryFinder.getFactory(FactoryFinder.java:283)~[javax.faces-2.2.14.jar:2.2.14]
在com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:328)~[javax.faces-2.2.14.jar:2.2.14]
... 省略了12个公共框架
原因:java.lang.IllegalStateException:未为静态设置Singleton_实例=>[]
在org.jboss.weld.bootstrap.api.helpers.RegistrySingletonProvider$RegistrySingleton.get(RegistrySingletonProvider.java:28)~[weld-servlet-shaded-3.0.2.Final.jar:3.0.2.Final]
在org.jboss.weld.Container.instance(Container.java:53)~[weld-servlet-shaded-3.0.2.Final.jar:3.0.2.Final]
在org.jboss.weld.SimpleCDI.(SimpleCDI.java:77)~[weld-servlet-shaded-3.0.2.Final.jar:3.0.2.Final]
在org.jboss.weld.environment.WeldProvider$EnvironmentCDI.(WeldProvider.java:45)~[weld-servlet-shaded-3.0.2.Final.jar:3.0.2.Final]
在org.jboss.weld.environment.WeldProvider.getCDI(WeldProvider.java:61)~[weld-servlet-shaded-3.0.2.Final.jar:3.0.2.Final]
在javax.enterprise.inject.spi.CDI.lambda$getCDIProvider$0(CDI.java:87)~[weld-servlet-shaded-3.0.2.Final.jar:3.0.2.Final]
在java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174)~[na:1.8.0141]
在java.util.TreeMap$keypliterator.tryAdvance(TreeMap.java:2770)~[na:1.8.0141]
在java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)~[na:1.8.0141]
在java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)~[na:1.8.0141]
在java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)~[na:1.8.0141]
在java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)~[na:1.8.0141]
在java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)~[na:1.8.0_141]
在java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)~[na:1.8.0141]
在java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)~[na:1.8.0141]
在javax.enterprise.inject.spi.CDI.getCDIProvider(CDI.java:88)~[weld-servlet-shaded-3.0.2.Final.jar:3.0.2.Final]
在javax.enterprise.inject.spi.CDI.current(CDI.java:64)~[weld-servlet-shaded-3.0.2.Final.jar:3.0.2.Final]
在org.omnifaces.util.Beans.getManager(Beans.java:87)~[omnifaces-2.6.8.jar:2.6.8]
在org.omnifaces.util.Beans.getReference(Beans.java:115)~[omnifaces-2.6.8.jar:2.6.8]
在org.omnifaces.application.OmniApplication.(OmniApplication.java:66)~[omnifaces-2.6.8.jar:2.6.8]
在org.omnifaces.application.OmniApplicationFactory.createOmniApplication(OmniApplicationFactory.java:86)~[omnifaces-2.6.8.jar:2.6.8]
在org.omnifaces.application.OmniApplicationFactory.getApplication(OmniApplicationFactory.java:51)~[omnifaces-2.6.8.jar:2.6.8]
在com.sun.faces.application.InjectionApplicationFactory.getApplication(InjectionApplicationFactory.java:93)~[javax.faces-2.2.14.jar:2.2.14]
在com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:142)~[javax.faces-2.2.14.jar:2.2.14]
在com.sun.faces.lifecycle.ClientWindowFactoryImpl.(ClientWindowFactoryImpl.java:62)~[javax.faces-2.2.14.jar:2.2.14]
在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)~[na:1.8.0_141]
在sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)~[na:1.8.0141]
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)~[na:1.8.0141]
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>

        <groupId>Beca</groupId>
        <artifactId>EscolaSpringBoot</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>

        <name>Escola jsf-primefaces-spring-boot</name>
        <description>JSF - PrimeFaces Example using Spring Boot and Maven</description>
        <url>https://www.codenotfound.com/jsf-primefaces-example-spring-boot-maven.html</url>

        <parent>
                <groupId>org.joinfaces</groupId>
                <artifactId>jsf-spring-boot-parent</artifactId>
                <version>2.4.1</version>
                <relativePath /> <!-- lookup parent from repository -->
        </parent>

        <properties>
                <java.version>1.8</java.version>
                <jersey.version>2.26</jersey.version>
                <hibernate.version>5.2.12.Final</hibernate.version>
        </properties>

        <dependencies>
                <dependency>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter</artifactId>
                </dependency>
                <dependency>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-data-jpa</artifactId>
                </dependency>
                <dependency>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-security</artifactId>
                </dependency>
                <dependency>
                        <groupId>org.joinfaces</groupId>
                        <artifactId>jsf-spring-boot-starter</artifactId>
                        <exclusions>
                                <exclusion>
                                        <groupId>javax.enterprise</groupId>
                                        <artifactId>cdi-api</artifactId>
                                </exclusion>
                        </exclusions>
                </dependency>
                <dependency>
                        <groupId>org.jboss.weld.servlet</groupId>
                        <artifactId>weld-servlet-shaded</artifactId>
                        <version>3.0.2.Final</version>
                </dependency>
                <dependency>
                        <groupId>org.apache.commons</groupId>
                        <artifactId>commons-dbcp2</artifactId>
                </dependency>
                <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <scope>runtime</scope>
                </dependency>
                <dependency>
                        <groupId>org.omnifaces</groupId>
                        <artifactId>omnifaces</artifactId>
                        <version>2.6.8</version>
                </dependency>
                <dependency>
                        <groupId>org.glassfish.jersey.media</groupId>
                        <artifactId>jersey-media-json-jackson</artifactId>
                </dependency>
                <dependency>
                        <groupId>org.glassfish.jersey.containers</groupId>
                        <artifactId>jersey-container-servlet</artifactId>
                </dependency>
                <dependency>
                        <groupId>org.glassfish.jersey.ext.cdi</groupId>
                        <artifactId>jersey-cdi1x-servlet</artifactId>
                        <version>${jersey.version}</version>
                </dependency>
                <dependency>
                        <groupId>org.glassfish.jersey.inject</groupId>
                        <artifactId>jersey-hk2</artifactId>
                        <version>${jersey.version}</version>
                </dependency>
        </dependencies>


        <build>
                <plugins>
                        <!-- spring-boot-maven-plugin -->
                        <plugin>
                                <groupId>org.springframework.boot</groupId>
                                <artifactId>spring-boot-maven-plugin</artifactId>
                                <executions>
                                        <execution>
                                                <goals>
                                                        <goal>repackage</goal>
                                                </goals>
                                        </execution>
                                </executions>
                        </plugin>
                </plugins>
        </build>
</project>
import org.jboss.weld.environment.servlet.Listener; 

@SpringBootApplication
public class MyApplication
{
  public static void main(String[] args)
  {
    SpringApplication.run(MyApplication.class, args);
  }

  @Bean
  public Listener weldListener()
  {
    return new Listener();
  }
}
@Bean
public ServletContextInitializer weldServletContextInitializer()
{
  return new WeldServletContextInitializer();
}
import javax.servlet.ServletContainerInitializer;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;

import org.jboss.weld.environment.servlet.EnhancedListener;
import org.springframework.boot.web.servlet.ServletContextInitializer;

public class WeldServletContextInitializer implements ServletContextInitializer
{
  private ServletContainerInitializer servletContainerInitializer;

  @Override
  public void onStartup(ServletContext servletContext) throws ServletException
  {
    ServletContainerInitializer servletContainerInitializer = getServletContainerInitializer();
    servletContainerInitializer.onStartup(null, servletContext);
  }

  private ServletContainerInitializer getServletContainerInitializer()
  {
    if (servletContainerInitializer == null)
      servletContainerInitializer = new EnhancedListener();

    return servletContainerInitializer;
  }
}
@Bean
public ServletContextInitializer omnifacesServletContextInitializer()
{
    return new OmnifacesServletContextInitializer();
}
import javax.servlet.ServletContainerInitializer;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;

import org.omnifaces.ApplicationInitializer;
import org.springframework.boot.web.servlet.ServletContextInitializer;

public class OmnifacesServletContextInitializer implements ServletContextInitializer
{
    private ServletContainerInitializer servletContainerInitializer;

    @Override
    public void onStartup(ServletContext sc) throws ServletException
    {
        ServletContainerInitializer servletContainerInitializer = getServletContainerInitializer();
        servletContainerInitializer.onStartup(null, sc);
    }

    private ServletContainerInitializer getServletContainerInitializer()
    {
        if (servletContainerInitializer == null)
            servletContainerInitializer = new ApplicationInitializer();

        return servletContainerInitializer;
    }
}