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

时间:2016-03-16 17:46:52

标签: java jmx

我对使用JMX监视/配置简单的Java客户端/服务器应用程序感兴趣。例如,我们将捕获Java程序中发生的任何网络异常。

可以通过这种方式扩展MBean吗?或者他们仅限于更具体的获得&设置功能?

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

由于

1 个答案:

答案 0 :(得分:2)

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

如果您想举例说明如何在正常工作的应用程序中完成此操作,您可能需要查看以下内容:

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

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

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

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

但有一些警告。需要注意的是,Java通常不提供任何良好的抽象来捕获来自任何应用程序源的给定类型的所有异常。你可以注册你的catch-all异常处理程序,但据我记得它不能很好地工作。

当我不得不做这样的事情时,我正在做什么,我使用AspectJ来注册一个处理异常的所有捕获位置。我使用编译时编织来降低性能影响,但我不确定它会对整体性能产生多大影响(如果它完全影响的话)。

¯\ _(ツ)_ /¯

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

但有一件事。你说

  

监视/配置简单的Java客户端/服务器应用程序

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