How to get bound server address and port programma

2019-02-12 10:07发布

At startup we need to get the server address and the http port of the running application. Until now we made it like this:

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"));

Everything was fine but after migration from jBoss 7.1.1.Final to 7.1.3.Final we got the problem that the MBean isn't defined at server startup. That means everything is fine if I deploy the application on an already running jboss server, but if I start the server and the application is loaded up during server start MBeans are not there.

I don't know why but I have the feeling that jBoss makes sure, that out application is started/loaded before most of the MBeans. I had a small look and found out that following Mbeans are loaded after our application:

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

So,

  • how can I force jBoss to load MBeans before my application?
  • is there another way/mbean where I can get my information?

1条回答
霸刀☆藐视天下
2楼-- · 2019-02-12 10:21

I got the same issue in JBOSS Wildfly 8.1 . I solved the problem with the code below that worked for me to get server address and http port:

//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");
查看更多
登录 后发表回答