如何从JBoss 5.x下的JavaEE应用程序中获取类加载器ObjectName
我们的JavaEE应用程序有一个服务,它负责安装和启动其他服务,具体取决于存储在数据库中的配置。服务是使用如何从JBoss 5.x下的JavaEE应用程序中获取类加载器ObjectName,java,jboss,jakarta-ee,jboss5.x,Java,Jboss,Jakarta Ee,Jboss5.x,我们的JavaEE应用程序有一个服务,它负责安装和启动其他服务,具体取决于存储在数据库中的配置。服务是使用 ServiceControllerMBean.install( org.w3c.dom.Element element, javax.management.ObjectName objectName) 方法。此方法需要类加载器ObjectName作为第二个参数。在JBoss 4.x下,我们使用以下方法获得类加载器名称: final ServiceControllerMBe
ServiceControllerMBean.install(
org.w3c.dom.Element element,
javax.management.ObjectName objectName)
方法。此方法需要类加载器ObjectName作为第二个参数。在JBoss 4.x下,我们使用以下方法获得类加载器名称:
final ServiceControllerMBean serviceController =
(ServiceControllerMBean) MBeanProxy.get(
ServiceControllerMBean.class,
ServiceControllerMBean.OBJECT_NAME, server);
final ClassLoader = serviceController.getClass().getClassLoader();
final ObjectName loader = new ObjectName(
"jmx.loading:UCL=" + Integer.toHexString(classLoader.hashCode()))
但是,这在JBoss 5.x下不起作用,因为类装入器的命名已更改
有人能建议一种在JBoss5.x下获取类加载器名称的方法吗
提前感谢您找到此问题的文档: 很高兴能看到一个透视图 最后,我发现了一个不错的论坛帖子: 其他信息:
ClassLoader loader = Thread.currentThread().getContextClassLoader();
System.out.println( loader ); // sun.misc.Launcher$AppClassLoader@a12a00
loader = ThreadClassloader.class.getClassLoader();
System.out.println( loader ); // sun.misc.Launcher$AppClassLoader@a12a00
Hpe这有助于您从代码中获取更多信息。在对该主题进行了一点研究后,我得到了问题的答案。虽然我不太喜欢它,因为它看起来更像另一个黑客。但我会使用它,除非有人提出更优雅的解决方案。因此: 在JBoss 5.1.0(我正在使用的)中,类装入器的注册名称如下:
jboss.classloader:id="vfsfile:<archive-file-name>"
jboss.classloader:id=“vfsfile:”
同时,toString()方法返回的类加载器对象的字符串表示形式如下所示:
BaseClassLoader@<memory-address>{vfsfile:<archive-file-name>}
BaseClassLoader@{vfsfile:}
因此,可以从类加载器字符串表示中提取归档文件名,并从中构造适当的ObjectName。这不是我问题的确切答案,但您提供的线程解决了我的另一个问题。无论如何,谢谢你:-)