- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在研究 http://truevfs.java.net ,Java 的虚拟文件系统。 TrueVFS 是模块化的,使用插件架构在运行时加载功能,无需配置任何东西。一些可选插件使用平台 MBeanServer 来注册具有定义的 ObjectName 的 MBean 以进行监视和管理。
现在我的一些用户将 TrueVFS JAR 捆绑在他们的 WAR 中以部署到 Tomcat 等。这工作正常,除非他们包含启用 JMX 的插件之一并在不同上下文中部署 WAR 的多个实例。
这是行不通的,因为每个 Web 应用程序都有自己的启用 JMX 的插件的类加载器定义,但它们将共享相同的平台 MBeanServer 并使用相同的 ObjectNames 来注册它们的 MBean,因此会发生冲突.
现在我该如何解决这个问题呢?我已经提取了 MBeanServer 查找,以便我可以将它提取到另一个插件中,但是我无法确定一个普遍适用的策略,我应该使用哪个 MBeanServer 来注册我的 MBean。
我用谷歌搜索了这个主题,找到了一些 documentation for WebLogic这表明我应该使用 JNDI 查找 MBeanServer。然而,这似乎是 WebLogic 特有的。
难道没有通用的通用方法吗?
更新:
这是使用附加属性来识别网络应用程序定义的类加载器的快速概念验证:
import java.lang.management.ManagementFactory;
import javax.management.JMX;
import javax.management.MBeanServer;
import javax.management.ObjectName;
public class Messenger implements MessengerMXBean {
private static MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
public static void main(String[] args ) throws Exception {
register("one");
register("two");
find();
System.out.println("Waiting for interrupt...");
Thread.sleep(Long.MAX_VALUE);
}
private static void register(String context) throws Exception {
mbs.registerMBean(new Messenger(),
new ObjectName(":type=Messenger,context=" + context));
}
private static void find() throws Exception {
for (ObjectName name : mbs.queryNames(new ObjectName(":type=Messenger,*"), null))
System.out.println(JMX.newMXBeanProxy(mbs, name, MessengerMXBean.class).getMessage());
}
public String getMessage() { return "Hello world!"; }
}
public interface MessengerMXBean { String getMessage(); }
正如预期的那样,该程序注册了两个 Messenger MBean,找到它们并打印它们的“Hello world!”消息。
但是,这种解决方案也有缺点:
这些是严重的限制,但似乎我没有更好的选择,所以我可能会走这条路。
最佳答案
您可以为每个 war 模块重新创建一个新的 MBeanServer。但是,当从外部 JSR-160 客户端查询它们时,您还需要指定 MBeanServer。
当您使用 Jolokia 时您将透明地合并 JVM 的所有 MBeanServer。但是,当您的 MBean 具有相同的名称且只有一个可访问时,这在这里也无济于事。
对于这种情况,我的解决方案是使用相同的 MBeanServer,但使用不同名称的 MBean。您可以为这些 MBean 使用完全正交的域,或者除了其他属性之外,还可以在名称中添加额外的“限定符”键值对。当我希望在典型情况下只有一个 MBean 时,我会首先尝试添加具有固定名称的 MBean。如果失败,我将另一个 ",qualifier=..."
部分添加到名称中,其中包含一个自动生成的值,可以由某个值(如 WAR 名称)或什至唯一标识的值一个可配置的。
事实上,从客户端的角度来看,处理多个 MBeanServer 确实很痛苦,因此使用 JMX 作为具有唯一(可能部分生成的 MBean 名称)的全局命名空间是简单的选择。
关于jakarta-ee - 在 Tomcat、WebLogic、Glassfish 等中使用哪个 MBeanServer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13145440/
如果在启动 JVM 时设置“com.sun.management.jmxremote”系统属性,则可以运行 jconsole 或 visualvm 并连接到本地 mBeanServer。我想做他们正在
好的,所以。我已经部署了一个通过 spring 的 MBeanExporter 和注释公开的 MBean 的 war 。我部署了另一个 war 应用程序,它使用一些代码与 mbean 进行通信。我在从
.. 所讨论的 MBeanServer 没什么特别的,从 ManagementFactory.getPlatformMBeanServer() 调用返回的对象,显然是 com.sun.jmx.mbea
我可以知道在 glassfish 3 中显示以下消息的常见原因是什么? WARNING: Multiple [2] JMX MBeanServer instances exist, we will u
我调用在 Weblogic MBeanServer 上注册的自定义监视器,但 weblogic 仅在 15 秒后才给我更新的值。 Weblogic缓存是否调用? 最佳答案 找到了! 我用以下( Spr
我正在使用互联网上的代码来获取服务器的健康状态。该代码中使用了 weblogic.management.mbeanservers.domainruntime,但我无法找到它的 jar。我没有使用mav
对于一个以恒定间隔执行操作的简单 Java 库,我使用 MXBeans 实现了 JMX 管理,它按预期工作,我可以在 JConsole 中查询状态和设置参数、暂停/恢复操作等。 现在我想创建一个 We
我想使用 MBeanServer.queryMBeans(ObjectName name, QueryExp query) 来获取带有查询表达式的 MBean,但它似乎不适用于 QueryExp 查询
我正在使用 spring-boot 2.1.3 将应用程序从 Spring 4.3.8 迁移到 Spring 5.1.5。 JMX启用的Bean配置: 构建和安装工
我有一个在 JBoss 4.2.2 上运行的 Web 应用程序。为了监控性能,我启用了 Java 5 附带的内部平台 JMX 服务器。换句话说,我添加了: -Dcom.sun.management.j
我看到以下 JARS 出现以下 PowerMock/EasyMock 错误: jar activemq-all-5.9.0.jar com.ibm.mq.headers-7.0.1.5.jar com
我目前正在研究 http://truevfs.java.net ,Java 的虚拟文件系统。 TrueVFS 是模块化的,使用插件架构在运行时加载功能,无需配置任何东西。一些可选插件使用平台 MBea
我正在尝试使用名为 getdbPoolStatistics() 的函数获取 dbpool 详细信息,该函数返回我要监视的所有指标的 HashMap 。在 getdbPoolStatistics() 中
在我的应用程序中,我创建并维护与远程 JVM 的 MBeanServer 的多个连接。我想汇集这些连接。但不确定他们是否对远程 MBeanServer 施加任何负载。 我想知道维护与远程 JVM MB
如果 Tomcat 作为 Windows 服务运行(使用 Windows Tomcat 安装程序创建),您不能简单地使用 -Dcom.sun.management.jmxremote 启用 JMX .
我正在使用部署在 tomcat 服务器(我已在本地运行)上的 WAR 文件来使用 spring 的 JMX 支持。然而,尽管遵循了发布的指南,我还是无法将我的 MBean 专门部署到 tomcat 的
我在 vista 机器上。我已经使用这些选项启动了 tomcat 5.5.27: CATALINA_OPTS="-Dcom.sun.management.jmxremote.port=9003 \
迁移到tomcat 7.0.22之后并安装 t7mp(来自谷歌代码的 tomcat 7 插件)我正在 maven 2 顺便说一句尝试运行 mvn t7:run 时,出现以下异常: WARNING:
我有 Tomcat 7.0,它有一些 Java 代码,我用它来连接到 Weblogic 12c 服务器以管理 weblogic 服务器。我可以使用 RMI/IIOP,但不能使用 T3。每个人都说确保
我是一名优秀的程序员,十分优秀!