Apache TomEE 10无法实例化ManagedExecutorService资源,求故障排查
问题
在全新安装的TomEE 10环境中,已按照官方文档在tomee.xml中声明如下资源:
<Resource id="Foo" type="ManagedExecutorService"> Core = 5 Max = 25 KeepAlive = 5 s Queue = 15 ThreadFactory = org.apache.openejb.threads.impl.ManagedThreadFactoryImpl Lazy = true </Resource>
启动时,TomEE在catalina.out中抛出错误:
25-Jun-2024 21:07:30.229 SEVERE [main] jdk.internal.reflect.NativeMethodAccessorImpl.invoke Exception processing global JNDI Resources org.apache.openejb.core.ivm.naming.LazyObjectReference$LazyNamingException: Error calling instance factory method: public org.apache.openejb.threads.impl.ManagedExecutorServiceImpl org.apache.openejb.resource.thread.ManagedExecutorServiceImplFactory.create() at org.apache.openejb.core.ivm.naming.LazyObjectReference.getObject(LazyObjectReference.java:39) …
堆栈跟踪不完整,缺少“Caused by …”信息。当前环境为全新VM,安装了Ubuntu 24.04、openjdk-17以及TomEE 10.0.0-M1-plume,请问可能的错误原因是什么?
可能的错误原因及解决建议
- ThreadFactory配置方式错误:
ManagedThreadFactoryImpl是需要通过TomEE资源声明的组件,不能直接在ManagedExecutorService配置中引用全类名。需先定义一个ManagedThreadFactory类型的资源,再通过资源ID来引用,而非直接指定类名。 - 预发布版本存在bug:你使用的TomEE 10.0.0-M1是里程碑预发布版本,可能存在线程池资源配置相关的已知问题。建议升级到TomEE 10的正式稳定版,或回退到TomEE 9稳定版本测试。
- 配置参数格式不兼容:
KeepAlive参数的5 s格式可能在该版本中不被支持,部分TomEE版本仅接受纯数字(默认单位为秒),可尝试改为KeepAlive = 5后重启测试。 - 日志级别限制导致堆栈不全:默认日志级别可能隐藏了
Caused by部分的关键信息,可修改conf/logging.properties,将java.util.logging.ConsoleHandler.level设为FINEST,重启后查看完整堆栈以定位具体报错点。
内容的提问来源于stack exchange,提问作者cpliu338
相关产品推荐
相关产品推荐

