首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >修复Tomcat启动时的OmniFaces BeanManager初始化问题

修复Tomcat启动时的OmniFaces BeanManager初始化问题
EN

Stack Overflow用户
提问于 2016-09-01 01:06:36
回答 1查看 2.8K关注 0票数 2

我们最近已经迁移到Tomcat 8.5.4 ( 8.5.3)和OmniFaces2.4( 2.3),我们还在我们的Web应用程序中改变了一些东西。从那时起,我们的Web应用程序不再启动,日志中有以下例外:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Exception sending context initialized event to listener instance of class org.omnifaces.ApplicationListener

java.lang.ExceptionInInitializerError
at org.omnifaces.ApplicationListener.checkCDIAvailable(ApplicationListener.java:77)
at org.omnifaces.ApplicationListener.contextInitialized(ApplicationListener.java:61)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4716)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5178)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:152)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1403)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Caused by: java.lang.IllegalStateException: CDI BeanManager instance is not available in JNDI.
at org.omnifaces.config.BeanManager.<init>(BeanManager.java:100)
at org.omnifaces.config.BeanManager.<clinit>(BeanManager.java:49)
... 11 more

Caused by: java.lang.IllegalStateException: javax.naming.NamingException: WELD-001300: Unable to locate BeanManager
at org.omnifaces.util.JNDI.lookup(JNDI.java:95)
at org.omnifaces.config.BeanManager.<init>(BeanManager.java:96)
... 12 more

Caused by: javax.naming.NamingException: WELD-001300: Unable to locate BeanManager
at org.jboss.weld.resources.ManagerObjectFactory.getObjectInstance(ManagerObjectFactory.java:62)
at org.apache.naming.factory.FactoryBase.getObjectInstance(FactoryBase.java:94)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
at org.apache.naming.NamingContext.lookup(NamingContext.java:840)
at org.apache.naming.NamingContext.lookup(NamingContext.java:160)
at org.apache.naming.NamingContext.lookup(NamingContext.java:828)
at org.apache.naming.NamingContext.lookup(NamingContext.java:160)
at org.apache.naming.NamingContext.lookup(NamingContext.java:828)
at org.apache.naming.NamingContext.lookup(NamingContext.java:174)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:163)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at org.omnifaces.util.JNDI.lookup(JNDI.java:90)
... 13 more

Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener

java.lang.RuntimeException: java.lang.NoClassDefFoundError: Could not initialize class org.omnifaces.config.BeanManager
at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:292)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4714)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5178)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:152)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1403)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.omnifaces.config.BeanManager
at org.omnifaces.util.Beans.getManager(Beans.java:88)
at org.omnifaces.util.Beans.getReference(Beans.java:113)
at org.omnifaces.application.OmniApplication.<init>(OmniApplication.java:70)
at org.omnifaces.application.OmniApplicationFactory.createOmniApplication(OmniApplicationFactory.java:89)
at org.omnifaces.application.OmniApplicationFactory.getApplication(OmniApplicationFactory.java:54)
at com.sun.faces.application.InjectionApplicationFactory.getApplication(InjectionApplicationFactory.java:93)
at com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:142)
at com.sun.faces.lifecycle.ClientWindowFactoryImpl.<init>(ClientWindowFactoryImpl.java:62)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)
at javax.faces.FactoryFinderInstance.getImplGivenPreviousImpl(FactoryFinderInstance.java:405)
at javax.faces.FactoryFinderInstance.getImplementationInstance(FactoryFinderInstance.java:251)
at javax.faces.FactoryFinderInstance.getFactory(FactoryFinderInstance.java:543)
at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:283)
at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:328)
at com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:236)
at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:439)
at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:227)

我们的配置:

  • Tomcat 8.5.4
  • CDI焊接2.3.5最后
  • JSF2.2.13
  • Omnifaces 2.4
  • 原形6.0
  • WEB中的空beans.xml文件
  • 根Web应用程序上下文中的BeanManager资源条目
  • Tomcat是由我们的Java代码(嵌入式用法)启动的。

BeanManager资源条目:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Resource name="BeanManager"
          auth="Container"
          type="javax.enterprise.inject.spi.BeanManager"
          factory="org.jboss.weld.resources.ManagerObjectFactory"/>

我们回到Tomcat 8.5.3和全方位2.3,并尝试了不同的组件版本组合(8.5.3与2.4,8.5.4与2.3,等等)。为了找出问题的根源,却无济于事。

最后,我们怀疑在初始化所有这些组件(Tomcat、Weld、Onmnifaces、.)之间存在一个竞赛条件问题。

最后,我从上下文XML文件中删除了BeanManager资源条目。

从上下文中删除

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Resource name="BeanManager"
          auth="Container"
          type="javax.enterprise.inject.spi.BeanManager"
          factory="org.jboss.weld.resources.ManagerObjectFactory"/>

它解决了问题。

我查看了Tomcat 8.5.4的更改日志,可以找到这个更改:

不要试图在web应用程序初始化阶段启动web资源,因为web应用程序在这一点上没有完全配置,并且web资源可能没有正确配置。(markt)

我不知道Tomcat更改日志中报告的这个Web应用程序的初始化阶段问题是否与我们遇到的问题有关。将BeanManager资源从上下文中删除的原因仍然不清楚。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-01 23:19:43

javax.naming.NamingException:焊缝-001300:无法定位BeanManager

这基本上意味着找到了BeanManager JNDI资源定义(如context.xml中定义的那样),但尚未创建JNDI资源后面的具体BeanManager实例。

这确实与Tomcat8.5.4中的描述的变化相匹配。

不要试图在web应用程序初始化阶段启动web资源,因为web应用程序在这一点上没有完全配置,并且web资源可能没有正确配置。(markt)

我不知道马克·托马斯对这一决定的推理,也没有问题的联系。我猜他试图避免由潜在的初始化排序问题引起的间歇性中断部署所造成的混乱行为。这也许是件好事,但我认为Mark实际上忽略了通过<ordering>元素在web.xmlweb-fragment.xml文件中定义初始化顺序的可能性。我确实记得,Tomcat在@WebListener-annotated的调用顺序或以编程方式创建的实例(然而,对于<listener>声明的实例)的调用顺序方面从来没有遵守过这一点。也许Mark应该修复这个部分,而不是在初始化阶段完全禁用JNDI。

至于OmniFaces 2.4中的更改,根据第243期,该版本在特定于Weld的servlet上下文属性中添加了一个回退。这将在JNDI资源不存在时使用,而Weld则用作CDI实现。也就是说,Weld内部也将BeanManager实例存储为servlet上下文属性,这样OmniFaces就可以在不需要JNDI的情况下获取它。这意味着,context.xml不再是必要的。在Tomcat8.5.4中,您实际上也应该删除context.xml,因为OmniFaces 2.4仍然首先尝试检查JNDI资源,这最终会引发异常,因为由于Tomcat8.5.4的更改,BeanManager实例出乎意料地不可用。

在OmniFaces 2.5中,CDI初始化已经按照描述CDI1.0到1.1的迁移的第281期进行了重新处理和改进。OmniFaces不再使用JNDI检查BeanManager。OmniFaces现在将使用CDI1.1引入的CDI API。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BeanManager beanManager = CDI.current().getBeanManager();

这与JNDI配置/初始化无关。

OmniFaces 2.5还不是最终版本,但截至昨天,2.5-RC1已在Maven中心上市。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39267243

复制
相关文章
BootStrap3如何禁止响应式布局
我查阅了资料发现将:less变量@screen-xs和@screen-sm设置为0并重新编译less可解决问题。但是最终效果还不是特别好,不过大体上算禁止响应式布局了!
卡尔曼和玻尔兹曼谁曼
2019/01/25
1.6K0
基于bootstrap3响应式Tooltip提示插件
ggtooltip.js是一款非常实用的基于bootstrap 3.X的jQuery tooltip提示插件。该bootstrap jQuery tooltip插件实用简单,支持在4个方向上像素tooltip信息,支持修改tooltip的背景色、前景色和边框颜色。 该jQuery tooltip插件实用简单,支持在4个方向上像素tooltip信息,支持修改tooltip的背景色、前景色和边框颜色。它的特点有:
小狐狸说事
2022/12/01
1.1K0
WordPress 响应式主题 Zanblog 2.0(采用Bootstrap3框架)
主题特色 优雅的UI设计 Zanblog 2.0 的配色更加精致、简约、大气、优雅、令人着迷。同样沿用扁平化设计风格,简约、大气,更加符合互联网的浏览习惯,也更利于CSS3技术的使用与网站性能的提升。 采用Bootstrap3正式版 众所周知,在Zanblog 1.x版本中,我们大胆地采用了Bootstrap3的开发者版本,所以存在着许多bug与不足,而在Zanblog 2.0中,我们重新引入了最新的Bootstrap3正式版,让你领略Bootstrap3带来的非凡魅力! 采用HTML5语义化标签重写页面结
星哥玩云
2022/06/11
5460
SAP ABAP——内表(二)【创建内表】
💬个人网站:【芒果个人日志】​​​​​​ 💬原文地址:SAP ABAP——内表(二)【创建内表】 - 芒果个人日志 (wyz-math.cn) 💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。 💅文章概要:本文主要介绍一下SAP
THUNDER王
2023/02/23
3790
SAP ABAP——内表(二)【创建内表】
SAP ABAP——内表(四)【内表命令】
💬个人网站:【芒果个人日志】​​​​​​ 💬原文地址:SAP ABAP——内表(四)【内表命令】 - 芒果个人日志 (wyz-math.cn) 💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。 💅文章概要:本文主要介绍一下SAP A
THUNDER王
2023/02/23
3650
SAP ABAP——内表(四)【内表命令】
SAP ABAP——内表(一)【内表概要介绍】
💬个人网站:【芒果个人日志】​​​​​​ 💬原文地址:SAP ABAP——内表(一)【内表概要介绍】 - 芒果个人日志 (wyz-math.cn) 💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。 💅文章概要:本文是SAP AB
THUNDER王
2023/02/23
6840
SAP ABAP——内表(一)【内表概要介绍】
SAP ABAP——内表(十)【读取内表数据】
💬个人网站:【芒果个人日志】​​​​​​ 💬原文地址:SAP ABAP——内表(十)【读取内表数据】 - 芒果个人日志 (wyz-math.cn) 💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。 💅文章概要:本文主要介绍一下SAP
THUNDER王
2023/02/23
5000
SAP ABAP——内表(十)【读取内表数据】
SAP ABAP——内表(九)【删除内表数据】
💬个人网站:【芒果个人日志】​​​​​​ 💬原文地址:SAP ABAP——内表(九)【删除内表数据】 - 芒果个人日志 (wyz-math.cn) 💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。 💅文章概要:本文主要介绍一下SA
THUNDER王
2023/02/23
1.1K0
SAP ABAP——内表(九)【删除内表数据】
SAP ABAP——内表(八)【修改内表数据】
💬个人网站:【芒果个人日志】​​​​​​ 💬原文地址:SAP ABAP——内表(八)【修改内表数据】 - 芒果个人日志 (wyz-math.cn) 💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。 💅文章概要:本文主要介绍一下SAP
THUNDER王
2023/02/23
6890
SAP ABAP——内表(八)【修改内表数据】
SAP ABAP——内表(七)【追加内表数据—COLLECT】
💬个人网站:【芒果个人日志】​​​​​​ 💬原文地址:SAP ABAP——内表(七)【追加内表数据—COLLECT】 - 芒果个人日志 (wyz-math.cn) 💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。 💅文章概要:本文
THUNDER王
2023/02/23
9260
SAP ABAP——内表(七)【追加内表数据—COLLECT】
SAP ABAP——内表(五)【追加内表数据—INSERT】
💬个人网站:【芒果个人日志】​​​​​​ 💬原文地址:SAP ABAP——内表(五)【追加内表数据—INSERT】 - 芒果个人日志 (wyz-math.cn) 💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。 💅文章概要:本文
THUNDER王
2023/02/23
6780
SAP ABAP——内表(五)【追加内表数据—INSERT】
SAP ABAP——内表(六)【追加内表数据—APPEND】
💬个人网站:【芒果个人日志】​​​​​​ 💬原文地址: SAP ABAP——内表(六)【追加内表数据—APPEND】 - 芒果个人日志 (wyz-math.cn) 💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。 💅文章概要:本文
THUNDER王
2023/02/23
1.4K0
SAP ABAP——内表(六)【追加内表数据—APPEND】
React Native commond+r 不起作用 无响应
commond + r 不起作用 请检查模拟器是否连接到了电脑键盘
onety码生
2018/11/21
9380
Docker - 容器内软件设置
概述 一个大概导览,可能会常用。 详情会在文章底部给连接。 具体内容 一、安装软件太慢换一个源 mv /etc/apt/sources.list /etc/apt/sources.list.bak cat <<EOF >/etc/apt/sources.list deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free deb http://mirrors.ustc.edu.cn/debian stable-updates ma
断痕
2021/01/21
6950
MySQL user表损坏案例一则
今天业务反馈某业务数据连接不上,登录看了一下,发现数据库服务已经挂了(由于特殊原因,该库没有监控,并且是单点--成本原因,刺激不?!)。于是查看日志,一直在反复刷下图信息。
DBA札记
2023/03/09
1.3K0
MySQL user表损坏案例一则
bootstrap3 组件
<span class="input-group-addon"><span class="glyphicon glyphicon-search"></span></span>
用户5760343
2019/10/14
6900
bootstrap3  组件
bootstrap3 js
tooltip 弹出框 popover image.png 折叠面板:accordion modal image.png image.png 轮播:carousel
用户5760343
2019/10/14
1K0
bootstrap3 js
MySQL | 表的内连接
数据操作语言:表连接查询(一) 从多张表中提取数据 从多张表提取数据,必须指定关联的条件。如果不定义关联条件就会出现无条件连接,两张表的数据会交叉连接,产生 笛卡尔积。 规定了连接条件的表连接语句,就不会出现笛卡尔积。 # 查询每名员工的部门信息 SELECT e.empno,e.ename,d.dname FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno; 表连接的分类 表连接分为两种:内连接 和 外连接 内连接是结果集中只保留符合连接条件的记录 外
Zkeq
2022/05/18
3.3K0
MySQL | 表的内连接
Power Pivot里的表间关系不起作用?
小勤:那有什么意义?反正我放了值进去都会起作用的,自然就变成了其相对应的关系了,干嘛不直接在拉字段到行字段的时候就限制好呢?
大海Power
2021/08/30
1.7K0
复制文件到Docker容器内
举例说明: 假设一个运行的容器ID为9a28f199688e,想要将本地文件/path/to/local-file 复制到容器中的 /path/to/destination 目录中。
程序新视界
2023/09/07
9280

相似问题

表的Bootstrap3响应不起作用

50

如果在容器div内拒绝响应

12

如果在表内绑定,则使用knockout

10

在容器内保留响应表

11

如果在母版页内,则日期选取器不起作用

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文