找不到 CDI BeanManager
Posted
技术标签:
【中文标题】找不到 CDI BeanManager【英文标题】:Unable to find CDI BeanManager 【发布时间】:2019-05-30 00:27:06 【问题描述】:我正在尝试设置一个简单的应用程序以在 Wildfly 14 上使用 SpringBoot 2.1.1 和 Java 11(因为 Eclipse 不支持 Wildfly 15)。
部署失败,因为 Wildfly 在项目中。我只是尝试遵循简单(官方)教程,所以我不明白为什么会出现错误。
这是代码:
pom.xml
<properties>
<start-class>main</start-class>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
</parent>
<!-- Add typical dependencies for a web application -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!-- Package as an executable jar -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Application.java
package main;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableAutoConfiguration
public class Application
public static void main(String[] args)
SpringApplication.run(Application.class, args);
这是堆栈跟踪:
12:51:13,365 INFO [org.jboss.as.server.deployment](MSC 服务线程 1-8)WFLYSRV0027:开始部署“SpringBoot-0.0.1.war”(运行时名称:“SpringBoot- 0.0.1.战争”) 警告:发生了非法反射访问操作 警告:io.undertow.util.FlexBase64$1 的非法反射访问(jar:file:/C:/Users/87003556/Documents/Java/Wildfly%2014/modules/system/layers/base/io/undertow/core/main /undertow-core-2.0.13.Final.jar!/) 到构造函数 java.lang.String(char[],boolean) 警告:请考虑将此报告给 io.undertow.util.FlexBase64$1 的维护者 警告:使用 --illegal-access=warn 启用对进一步非法反射访问操作的警告 警告:所有非法访问操作将在未来版本中被拒绝 12:51:13,429 INFO [org.wildfly.extension.undertow](MSC 服务线程 1-6)WFLYUT0006:Undertow HTTPS 监听器 https 监听 127.0.0.1:8443 12:51:13,531 INFO [org.jboss.ws.common.management](MSC 服务线程 1-8)JBWS022052:启动 JBossWS 5.2.3.Final(Apache CXF 3.2.5.jbossorg-1) 12:51:15,606 WARN [org.jboss.as.ee](MSC 服务线程 1-1)WFLYEE0007:由于异常,未安装可选组件 org.springframework.http.server.reactive.ServletServerHttpResponse$ResponseAsyncListener(启用调试日志水平看原因) 12:51:15,606 WARN [org.jboss.as.ee](MSC 服务线程 1-1)WFLYEE0007:未安装可选组件 org.springframework.http.server.reactive.ServletHttpHandlerAdapter$HandlerResultAsyncListener 由于异常(启用调试日志水平看原因) 12:51:15,622 WARN [org.jboss.as.ee](MSC 服务线程 1-1)WFLYEE0007:由于异常,未安装可选组件 org.springframework.http.server.ServletServerHttpAsyncRequestControl(启用调试日志级别以查看原因) 12:51:15,622 WARN [org.jboss.as.ee](MSC 服务线程 1-1)WFLYEE0007:未安装可选组件 org.springframework.web.context.request.async.StandardServletAsyncWebRequest 由于异常(启用调试日志水平看原因) 12:51:15,622 WARN [org.jboss.as.ee](MSC 服务线程 1-1)WFLYEE0007:由于异常,未安装可选组件 org.springframework.http.server.reactive.ServletServerHttpRequest$RequestAsyncListener(启用调试日志水平看原因) 12:51:15,794 INFO [org.infinispan.factories.GlobalComponentRegistry](MSC 服务线程 1-7)ISPN000128:Infinispan 版本:Infinispan 'Estrella Galicia' 9.3.1.Final 12:51:15,966 INFO [org.jboss.as.clustering.infinispan](ServerService 线程池 -- 72)WFLYCLINF0002:从 ejb 容器启动客户端映射缓存 12:51:16,075 INFO [io.undertow.servlet](ServerService 线程池 -- 85)在类路径上检测到 1 个 Spring WebApplicationInitializers 12:51:16,153 INFO [javax.enterprise.resource.webcontainer.jsf.config](ServerService 线程池 -- 85)为上下文“/SpringBoot-0.0.1”初始化 Mojarra 2.3.5.SP2 12:51:16,761 严重 [javax.enterprise.resource.webcontainer.jsf.config](ServerService 线程池 -- 85)部署期间的严重错误::com.sun.faces.config.ConfigurationException:Factory 'javax.faces.lifecycle .ClientWindowFactory' 配置不正确。 在 com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:357) 在 com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:243) 在 com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:443) 在 com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:237) 在 io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:187) 在 io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:216) 在 io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:185) 在 io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42) 在 io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) ... 在 org.jboss.threads.JBossThread.run(JBossThread.java:485) 原因:javax.faces.FacesException: 在 com.sun.faces.application.ApplicationImpl.isJsf23(ApplicationImpl.java:2714) 在 com.sun.faces.application.ApplicationImpl.addELResolver(ApplicationImpl.java:549) ... 在 javax.faces.FactoryFinder.getFactory(FactoryFinder.java:292) 在 com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:354) ... 29 更多
12:51:16,761 错误 [org.jboss.msc.service.fail] (ServerService 线程池 -- 85) MSC000001: 无法启动服务 jboss.deployment.unit."SpringBoot-0.0.1.war"。 undertow-deployment:服务 jboss.deployment.unit 中的 org.jboss.msc.service.StartException。“SpringBoot-0.0.1.war”.undertow-deployment:java.lang.RuntimeException:java.lang.RuntimeException:com.sun .faces.config.ConfigurationException:工厂'javax.faces.lifecycle.ClientWindowFactory'未正确配置。 在 org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:81) 在 java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ... 在 java.base/java.lang.Thread.run(Thread.java:825) 在 org.jboss.threads.JBossThread.run(JBossThread.java:485) 原因:java.lang.RuntimeException:java.lang.RuntimeException:com.sun.faces.config.ConfigurationException:工厂'javax.faces.lifecycle.ClientWindowFactory'未正确配置。 在 io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:252) 在 org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:96) 在 org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:78) ... 8 更多 原因:java.lang.RuntimeException:com.sun.faces.config.ConfigurationException:工厂'javax.faces.lifecycle.ClientWindowFactory'未正确配置。 在 com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:315) 在 io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:187) 在 io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:216) 在 io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:185) 在 io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42) ... 在 io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:250) ... 10 更多 原因:com.sun.faces.config.ConfigurationException:未正确配置工厂“javax.faces.lifecycle.ClientWindowFactory”。 在 com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:357) ... 在 com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:237) ... 26 更多 原因:javax.faces.FacesException: 在 com.sun.faces.application.ApplicationImpl.isJsf23(ApplicationImpl.java:2714) 在 com.sun.faces.application.ApplicationImpl.addELResolver(ApplicationImpl.java:549) 在 org.jboss.as.jsf.injection.weld.WeldApplication.(WeldApplication.java:60) 在 org.jboss.as.jsf.injection.weld.WeldApplicationFactory.getApplication(WeldApplicationFactory.java:52) 在 com.sun.faces.application.InjectionApplicationFactory.getApplication(InjectionApplicationFactory.java:88) ...在 javax.faces.FactoryFinder.getFactory(FactoryFinder.java:292) 在 com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:354) ... 29 更多
12:51:16,762 错误 [org.jboss.as.controller.management-operation](控制器引导线程)WFLYCTL0013:操作(“部署”)失败 - 地址:([(“部署”=>“SpringBoot- 0.0.1.war")]) - 失败描述:"WFLYCTL0080: 失败的服务" => "jboss.deployment.unit.\"SpringBoot-0.0.1.war\".undertow-deployment" => "java .lang.RuntimeException:java.lang.RuntimeException:com.sun.faces.config.ConfigurationException:工厂'javax.faces.lifecycle.ClientWindowFactory'未正确配置。 原因:java.lang.RuntimeException:java.lang.RuntimeException:com.sun.faces.config.ConfigurationException:工厂'javax.faces.lifecycle.ClientWindowFactory'未正确配置。 原因:java.lang.RuntimeException:com.sun.faces.config.ConfigurationException:工厂'javax.faces.lifecycle.ClientWindowFactory'未正确配置。 原因:com.sun.faces.config.ConfigurationException:未正确配置工厂“javax.faces.lifecycle.ClientWindowFactory”。 原因:javax.faces.FacesException:无法找到 CDI BeanManager" 12:51:16,762 INFO [org.jboss.as.server](ServerService 线程池 -- 42)WFLYSRV0010:部署“SpringBoot-0.0.1.war”(运行时名称:“SpringBoot-0.0.1.war”) 12:51:16,762 INFO [org.jboss.as.controller](控制器引导线程)WFLYCTL0183:服务状态报告 WFLYCTL0186:无法启动的服务:service jboss.deployment.unit."SpringBoot-0.0.1.war".undertow-deployment: java.lang.RuntimeException: java.lang.RuntimeException: com.sun.faces.config.ConfigurationException : 工厂 'javax.faces.lifecycle.ClientWindowFactory' 未正确配置。
【问题讨论】:
您是否考虑将 cdi-api 添加到您的 pom.xml 依赖项中?它不包含在您指定的依赖项中。正如我们在 cmets 中所讨论的,解决方案可能就像将 cdi-api
添加到您的 pom.xml 依赖项中一样简单。它不包含在您指定的依赖项中。
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.2</version>
</dependency>
【讨论】:
如果出现错误,请在下面添加依赖项记住,必须包含启动 CDI 配置的上下文。
<Resource name="BeanManager" auth="Container" type="javax.enterprise.inject.spi.BeanManager" factory="org.apache.webbeans.container.ManagerObjectFactory" />
You can check the all setup here
或者您可以查看此blog
【讨论】:
这为我解决了这个问题,因为我的项目不是 maven。【参考方案3】:与您的问题没有直接关系,但可能对其他人有帮助。
我们正在使用带有joinfaces 的SpringBoot,在我们的例子中,问题是由faces-config.xml
中的错误引起的 - 特别是在标题部分<faces-config ...>
中。如果该文件最近更新,请检查您的git
。
【讨论】:
以上是关于找不到 CDI BeanManager的主要内容,如果未能解决你的问题,请参考以下文章
JSF-2.3 找不到我的 @Named CDI-1.2 托管 bean
在 WEB-INF/lib 内的 JAR 中找不到 CDI 实例
获取 CDI 托管 bean 实例的规范方法:BeanManager#getReference() 与 Context#get()
java.lang.NoClassDefFoundError: Ljavax/enterprise/inject/spi/BeanManager;