在带有Weld的Spring Boot环境中使用Omnifaces 2.x时失败 [英] Omnifaces 2.x fails when used in a Spring Boot environment with Weld

查看:96
本文介绍了在带有Weld的Spring Boot环境中使用Omnifaces 2.x时失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

最后,如此处所述,我在Spring Boot环境中成功引导了Weld。对于使用Mojarra的JSF和使用Jersey的Web服务,CDI都可以正常工作。



但是现在,当我尝试在应用程序中包含Omnifaces 2.6时遇到了问题。

p>

我的应用程序启动失败,并显示以下消息:

  com.sun.faces .config.ConfigurationException:未正确配置工厂'javax.faces.lifecycle.ClientWindowFactory'。 com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:330)处的
[comxsun.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]
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] 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(ContainerBa se.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] java.util.concurrent.FutureTask.run(FutureTask.java:266)中的
[java:na.1.8.0_141]
。 util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)[na:1.8.0_141] 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]
原因:javax.faces.FacesException: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]
at 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:未为STATIC_INSTANCE =>设置单例。 []
,位于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..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。< init>(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.0_141] java.util.TreeMap $ KeySpliterator.tryAdvance(Tre处的
eMap.java:2770)〜[na:1.8.0_141]
在java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)〜[na:1.8.0_141]
在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]
在java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)〜[na:1.8.0_141]
在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]
,位于javax.enterprise.inject.spi.CDI.current(CDI.java:64)〜[weld-servlet-shaded-3.0.2.Final .jar:3.0.2.Final]
at o rg.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] 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]
at 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。< init>(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.0_141]
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)〜[na:1.8.0_141]
在java.lang.reflect.Constructor.newInstance(Constructor.java:423)〜[na:1.8 .0_141] java.lang.Class.newInstance(Class.java:442)的
〜[na:1.8.0_141] javax.faces.FactoryFinderInstance.getImplGivenPreviousImpl(FactoryFinderInstance.java:405)的
〜 [javax.faces-2.2.14.jar:2.2.14]
...省略了16个常见框架

POM为:

 <?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-使用Spring Boot和Maven< / description>的PrimeFaces示例
< 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 /> <!-从存储库中查找父级->
< / parent>

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

<依赖关系>
< 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>运行时< / scope>
< / dependency>
< dependency>
< groupId> org.omnifaces< / groupId>
< artifactId> omnifaces< / artifactId>
< version> 2.6.8< / version>
< / dependency>
< dependency>
< groupId> org.glassfish.jersey.media< / groupId>
< artifactId>球衣-媒体-json-jackson< / artifactId>
< / dependency>
< dependency>
< groupId> org.glassfish.jersey.containers< / groupId>
< artifactId>球衣-容器-servlet< / artifactId>
< / dependency>
< dependency>
< groupId> org.glassfish.jersey.ext.cdi< / groupId>
< artifactId>球衣-cdi1x-servlet< / artifactId>
< version> $ {jersey.version}< / version>
< / dependency>
< dependency>
< groupId> org.glassfish.jersey.inject< / groupId>
< artifactId>球衣-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>重新包装< / goal>
< / goals>
< / execution>
< / executions>
< / plugin>
< / plugins>
< / build>
< / project>


解决方案

如@BalusC所述,这是一个订单问题



我正在使用:

  import org.jboss .weld.environment.servlet.Listener; 

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

@Bean
公共侦听器weldListener()
{
return new Listener();
}
}

因此它被初始化为运行的servlet上下文侦听器在JSF初始化之后。



我更改了代码以使用:

  @Bean 
public ServletContextInitializer weldServletContextInitializer()
{
return new WeldServletContextInitializer();
}

而不是 weldListener()其中 WeldServletContextInitializer 是:

  import javax.servlet.ServletContainerInitializer; 
import javax.servlet.ServletContext;
import javax.servlet.ServletException;

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

公共类WeldServletContextInitializer实现ServletContextInitializer
{
private ServletContainerInitializer servletContainerInitializer;

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

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

返回servletContainerInitializer;
}
}

现在Omnifaces 2.x毫无问题。 / p>

编辑



需要通过 org.omnifaces.ApplicationInitializer ,它是在此bean中完成的:

  @Bean 
public ServletContextInitializer omnifacesServletContextInitializer()
{
return new OmnifacesServletContextInitializer();
}

其中 OmnifacesServletContextInitializer 为:

  import javax.servlet.ServletContainerInitializer; 
import javax.servlet.ServletContext;
import javax.servlet.ServletException;

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

公共类OmnifacesServletContextInitializer实现ServletContextInitializer
{
private ServletContainerInitializer servletContainerInitializer;

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

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

返回servletContainerInitializer;
}
}


Finally I successfully bootstrapped Weld in a Spring Boot environment as explained here. CDI works with no problem both for JSF using Mojarra and for Web Services using Jersey.

But now I encountered a problem when trying to include Omnifaces 2.6 in my application.

My application start fails with this message:

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

The POM is:

 <?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>

解决方案

As stated by @BalusC it was a problem of order of initialization.

I was using:

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();
  }
}

So it was initialized as a servlet context listener that ran after JSF initialization.

I changed my code to use:

@Bean
public ServletContextInitializer weldServletContextInitializer()
{
  return new WeldServletContextInitializer();
}

instead of weldListener() where WeldServletContextInitializer is:

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;
  }
}

Now Omnifaces 2.x starts with no problem.

EDIT:

It is needed to initialize Omnifaces thru org.omnifaces.ApplicationInitializer, it is done in this bean:

@Bean
public ServletContextInitializer omnifacesServletContextInitializer()
{
    return new OmnifacesServletContextInitializer();
}

Where OmnifacesServletContextInitializer is:

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;
    }
}

这篇关于在带有Weld的Spring Boot环境中使用Omnifaces 2.x时失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆