【问题标题】:How to obtain JBoss Server Group Name programatically when deployed to a domain部署到域时如何以编程方式获取 JBoss 服务器组名称
【发布时间】:2015-04-12 13:30:35
【问题描述】:

如何从部署到域的 java 企业应用程序中以编程方式获取 jboss eap 6.x / wildfly 服务器组名称?

其他一些 jboss 值(例如节点名称)可以通过系统属性值获得,但 server-group-name 似乎不会以这种方式公开。

我希望能够在系统诊断功能中显示服务器组名称(即集群名称),以供技术用户验证他们正在查看正确的系统...(npe、dev、prod 等)

【问题讨论】:

    标签: jakarta-ee jboss7.x wildfly jboss-eap-6


    【解决方案1】:

    另一种(也许更好)的方法是使用管理 API https://docs.jboss.org/author/display/WFLY8/Management+API+reference

    【讨论】:

    • 感谢您的回答...您是否提供或参考了一些示例 java 代码?请记住,这需要从 JEE 服务器内已部署的应用程序中访问。我怀疑它需要使用应用程序内的管理凭据向本地端口发出 http 请求(应用程序如何知道哪个端口?),然后解析生成的 json。总的来说,它确实比 JMX 解决方案更复杂。
    • docs.jboss.org/author/display/WFLY8/The+native+management+API 显示代码。它不会比 JMX 更复杂(或者您是否在默认端口上暴露了没有凭据的整个服务器配置?)并且会提供更多选项。如果您在 web 应用程序中,您还可以使用 Javascript 和 JSON 来访问此 API,就像 webconsole 一样。
    • 查看该 API 规范,它似乎主要用于从容器外部执行。如果您可以显示几行使用 API 捕获服务器组名称的工作 java 代码,并且可以从部署在任何 JBoss 容器内的代码工作(无论是作为 EAR、EJB、WAR 还是 JAR 库)那么我会接受你的回答。还要记住容器是安全的,我不需要向已部署的应用程序公开外部管理凭据。
    【解决方案2】:

    我发现我需要使用 JMX 来获取这个值,因为它通过 MBean 暴露给 JVM(可通过 JConsole 验证......)

    所以回答我自己的问题:

    try {
        ObjectName serverMBean = new ObjectName("jboss.as:management-root=server");
        MBeanServer server = ManagementFactory.getPlatformMBeanServer();
        String serverGroupName = (String) ManagementFactory.getPlatformMBeanServer().getAttribute(serverMBean, "serverGroup");
        logger.info("JBoss server group name is" + serverGroupName);
    } catch (Exception e) {
        logger.error("Unable to identify JBoss server-group-name", e);
    }
    

    如果应用程序也可能部署到独立服务器,则可以先查询launchType 属性。有效值似乎是 STANDALONE 或 DOMAIN。

    在独立模式下,serverGroup 属性不可用,但可以使用jboss.node.name 系统属性作为替代系统标识符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 1970-01-01
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多