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

标签 java jakarta-ee jboss jboss7.x mbeans

在启动时,我们需要获取正在运行的应用程序的服务器地址和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服务器上部署应用程序,一切都很好,但是如果我启动服务器并且应用程序在服务器启动期间加载,MBeans不存在.

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

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

所以,

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

最佳答案

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

关于java - 如何在 Java EE 中以编程方式获取绑定(bind)的服务器地址和端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24741004/

相关文章:

java - 是否可以将依赖项 CDI 与 Wildfly 一起使用?

java - 意外的 EOF;期待元素 <attribute> 的关闭标记

java - 如何使用java从嵌入在mongodb数组中的内部文档中检索数据

java - findResource ("") 当 module-info.java 存在时返回 null,这是为什么呢?

java - Eclipse 项目中缺少 .classpath 文件

java - 带有 @Scheduled 注释的方法在 Spring Boot 应用程序中不起作用

java - 如何在不使用 web.xml 的情况下将 JavaEE 7/JPA 2.1 动态 Web 应用程序部署到 IBM Liberty Profile

jsf - session 结束时销毁 View 范围的bean

multithreading - 在异步方法中处理ConcurrentAccessTimeoutException

java - JBoss 6.4.20 补丁中允许使用哪些版本的 Jackson?