在带有Weld的Spring Boot环境中使用Omnifaces 2.x时失败 [英] Omnifaces 2.x fails when used in a Spring Boot environment with Weld
问题描述
最后,如此处所述,我在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屋!