有没有办法使用 JMX 代码来捕获网络异常?

Is there a way to use JMX code to capture a network exception?

我有兴趣使用 JMX 来 monitor/configure 一个简单的 Java Client/Server 应用程序。例如,我们将捕获 Java 程序中发生的任何网络异常。

MBean可以这样扩展吗?或者它们仅限于更具体的获取和设置功能?

到目前为止,我已经查看了 Notifications and Monitor MBeans

谢谢

好吧,我会说这绝对可行。我之前在 Apache Wicket 应用程序中使用 JMX 和自定义 MBean。无论如何,MBean 只是服务器应用程序中某些逻辑的包装器。所以您可以直接从您的应用程序中获取数据。

如果您想举例说明这是如何在工作应用程序中完成的,您可能需要检查一下:

https://github.com/apache/wicket/blob/master/wicket-jmx/src/main/java/org/apache/wicket/jmx/wrapper/MarkupSettings.java

class 基本上包含对应用程序的引用,并直接从服务器应用程序请求数据。

当服务器启动时,它会通过初始化程序注册所有 MBean class: https://github.com/apache/wicket/blob/master/wicket-jmx/src/main/java/org/apache/wicket/jmx/Initializer.java

然后每次查看 MBean 服务器时,您都会看到直接来自应用程序的最新信息。

不过有一些注意事项。需要注意的是 Java 通常不提供任何好的抽象来捕获来自应用程序任何来源的给定类型的所有异常。您可以注册您的万能异常处理程序,但据我所知它不能完美运行。

当我不得不做这样的事情时,我在做什么,我正在使用 AspectJ 注册一个 all catch 地方来处理异常。我正在使用编译时编织来减少性能影响,但我不确定它对整体性能有多大影响(如果它有影响的话)。

¯\_(ツ)_/¯

另一个警告是 JMX 连接通常很难在企业环境中设置。如果你必须通过两跳登录才能到达生产服务器,因为到处都有防火墙,那么你的监控连接肯定会失败,你需要继续向你的系统管理员购买啤酒并说服你的经理这不会强加任何安全措施风险。 :)

不过有一件事。你说

to monitor/configure a simple Java Client/Server application

您也想配置/监控客户端吗?我从来没有这样做过。我不确定这是否可能。