Jakarta ee 如何在VisualVM中标识/重命名EJB线程以进行调试

Jakarta ee 如何在VisualVM中标识/重命名EJB线程以进行调试,jakarta-ee,visualvm,Jakarta Ee,Visualvm,有没有办法给在EJB中运行的线程起一个名字,这样它们就可以在VisualVM中的线程列表中被识别?线程调用计时器(@Timeout)和JMS(onMessage())方法以及http servlet方法 目前,线程的通用名称如下: http--0.0.0.0-443-3 or EJB default - 9 我目前使用: Thread.currentThread().setName("Checker thread") 在这些方法的开头,我不确定它是否总是在VisualVM中工作,因此我正在

有没有办法给在EJB中运行的线程起一个名字,这样它们就可以在VisualVM中的线程列表中被识别?线程调用计时器(@Timeout)和JMS(onMessage())方法以及http servlet方法

目前,线程的通用名称如下:

http--0.0.0.0-443-3
or
EJB default - 9
我目前使用:

Thread.currentThread().setName("Checker thread") 

在这些方法的开头,我不确定它是否总是在VisualVM中工作,因此我正在寻找其他想法。

在EJB的
@PostConstruct
方法中,我使用与您相同的
线程
语句


您还可以考虑将其放置在类级拦截器中,并使用来获取EJB的名称,并在此时相应地命名线程

@Dharmesh,感谢您的样式编辑。即使您可以使用编辑器上方的花括号,并在发布问题或答案时将代码放入其中,您也不能将其放入@PostConstruct并永久设置名称b/c该线程可以在容器中的其他位置重新用于完全不同的任务,因此在发布问题或答案时,该名称会产生误导查看堆栈转储。我没有说,但在离开该方法之前,我必须将名称重置为其原始名称。@AlJo这不是我使用glassfish的经验。你用什么容器?JBoss。这当然是可能的,因为线程来自一个线程池——在通常情况下——并且不能保证每次都会从线程池中选择哪一个来运行特定的方法。