如何在Java EE中以编程方式获取绑定的服务器地址和端口?

Mar*_*cel 11 java jboss mbeans java-ee jboss7.x

在启动时,我们需要获取正在运行的应用程序的服务器地址和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"));
Run Code Online (Sandbox Code Playgroud)

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

我不知道为什么,但我觉得jBoss确保在大多数MBean之前启动/加载应用程序.我看了一眼,发现在申请后加载了Mbeans:

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

所以,

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

小智 5

我在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");
Run Code Online (Sandbox Code Playgroud)