You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TomEE Plume 9.1.0中REST API的TomEEMicroProfileListener调用错误排查

TomEE Plume 9.1.0中JAX-RS类部署时的无影响错误分析

问题场景

我在学习REST API时,发现标注了@Path注解的类部署时会抛出一个不影响应用运行的错误,想查明原因,使用的是TomEE Plume 9.1.0版本。

代码示例

@Path("/rs")
public class HelloWorld {
    @GET
    @Path("/sayHello")
    @Produces("text/plain")
    public String sayHello() {
        return "Hello world";
    }
}

错误日志

06-Jan-2024 04:36:46.537 SEVERE [http-nio-8080-exec-4] org.apache.openejb.observer.ObserverManager$MethodInvocation.invoke error invoking org.apache.tomee.microprofile.TomEEMicroProfileListener@2807bdeb
    java.lang.IllegalStateException: On a thread without an initialized context nor a classloader mapping a deployed app
        at org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(ThreadSingletonServiceImpl.java:366)
        at org.apache.openejb.cdi.ThreadSingletonServiceImpl.getContext(ThreadSingletonServiceImpl.java:342)
        at org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(ThreadSingletonServiceImpl.java:377)
        at org.apache.openejb.cdi.ThreadSingletonServiceImpl.get(ThreadSingletonServiceImpl.java:71)
        at org.apache.webbeans.config.WebBeansFinder.getSingletonInstance(WebBeansFinder.java:57)
        at org.apache.webbeans.config.WebBeansContext.getInstance(WebBeansContext.java:197)
        at org.apache.webbeans.config.WebBeansContext.currentInstance(WebBeansContext.java:215)
        at org.apache.webbeans.container.OwbCDI.getWebBeansContext(OwbCDI.java:47)
        at org.apache.webbeans.container.OwbCDI.instance(OwbCDI.java:52)
        at org.apache.webbeans.container.OwbCDI.select(OwbCDI.java:97)
        at io.smallrye.opentracing.SmallRyeTracingDynamicFeature.<init>(SmallRyeTracingDynamicFeature.java:30)
        at org.apache.tomee.microprofile.TomEEMicroProfileListener.registerMicroProfileJaxRsProviders(TomEEMicroProfileListener.java:150)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
        at java.base/java.lang.reflect.Method.invoke(Method.java:578)
        at org.apache.openejb.observer.ObserverManager$MethodInvocation.invoke(ObserverManager.java:402)
        at org.apache.openejb.observer.ObserverManager.doFire(ObserverManager.java:111)
        at org.apache.openejb.observer.ObserverManager.fireEvent(ObserverManager.java:100)
        at org.apache.openejb.loader.SystemInstance.fireEvent(SystemInstance.java:151)
        at org.apache.openejb.server.cxf.rs.CxfRsHttpListener.configureFactory(CxfRsHttpListener.java:1328)
        at org.apache.openejb.server.cxf.rs.CxfRsHttpListener.deployApplication(CxfRsHttpListener.java:665)
        at org.apache.openejb.server.rest.RESTService.deployApplication(RESTService.java:546)
        at org.apache.openejb.server.rest.RESTService.afterApplicationCreated(RESTService.java:305)
        at org.apache.tomee.webservices.TomeeJaxRsService.afterApplicationCreated(TomeeJaxRsService.java:53)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
        at java.base/java.lang.reflect.Method.invoke(Method.java:578)

原因分析

这个错误是TomEE集成SmallRye OpenTracing时的线程上下文问题:在部署JAX-RS应用阶段,TomEEMicroProfileListener尝试注册SmallRyeTracingDynamicFeature,但此时线程没有初始化CDI上下文,也没有关联已部署应用的类加载器,导致抛出IllegalStateException。

由于错误仅发生在部署环节,且应用核心逻辑不受影响,所以不会干扰API的正常调用。

解决方案

  • 禁用OpenTracing功能:如果不需要微服务追踪,可在TomEE的conf/system.properties中添加配置:
    openejb.microprofile.opentracing.enabled=false
    
  • 升级TomEE版本:该问题在TomEE 9.1.1及后续版本中已被修复,升级到最新稳定版即可解决。
  • 保留功能的适配:若需要OpenTracing,无需修改业务代码,容器层面的上下文初始化问题会在新版本中得到修复。

内容的提问来源于stack exchange,提问作者Steffano Aravico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 01:56:04