【问题标题】:How to get bound server address and port programmatically in Java EE?如何在 Java EE 中以编程方式获取绑定的服务器地址和端口?
【发布时间】:2014-07-14 16:14:14
【问题描述】:

在启动时,我们需要获取正在运行的应用程序的服务器地址和 http 端口。到目前为止,我们是这样设计的:

MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
ObjectName socketBindingMBean = new ObjectName("jboss.as:socket-binding-group=standard-sockets,socket-binding=http");

String  host = (String)  mBeanServer.getAttribute(socketBindingMBean, "boundAddress"),
Integer port = (Integer) mBeanServer.getAttribute(socketBindingMBean, "boundPort"));

一切都很好,但是在从 jBoss 7.1.1.Final 迁移到 7.1.3.Final 之后,我们遇到了在服务器启动时没有定义 MBean 的问题。这意味着如果我将应用程序部署在已经运行的 jboss 服务器上,一切都很好,但是如果我启动服务器并且应用程序被加载 服务器启动期间 MBean 不存在.

我不知道为什么,但我感觉 jBoss 确保在大多数 MBean 之前启动/加载外部应用程序。我看了看,发现在我们的应用程序之后加载了以下 Mbean:

  • jboss.as:interface=..
  • jboss.as:socket-binding-group=..
  • jboss.as:subsystem=..
  • jboss.as:core-service=management..(一些)

所以,

  • 如何强制 jBoss 在我的应用程序之前加载 MBean?
  • 还有其他方式/mbean 可以获取我的信息吗?

【问题讨论】:

  • 你能解决这个问题吗?
  • Hui,一年多以前 :) 我们通过将新线程中的 getAttribute-method-call 延迟几秒钟来解决问题。看起来并不完美,但直到今天仍能高效运行。

标签: java jakarta-ee jboss jboss7.x mbeans


【解决方案1】:

我在 JBOSS Wildfly 8.1 中遇到了同样的问题。我用下面的代码解决了这个问题,它可以让我获取服务器地址和 http 端口:

//http port
ManagementFactory.getPlatformMBeanServer().getAttribute(new ObjectName("jboss.as:socket-binding-group=standard-sockets,socket-binding=http"), "port");

//http adress
ManagementFactory.getPlatformMBeanServer().getAttribute(new ObjectName("jboss.as:interface=public"), "inet-address");

【讨论】:

  • 我配置的偏移量为 1,得到的是 8080 而不是 8081
猜你喜欢
  • 1970-01-01
  • 2019-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多