java - 获取jboss的信息

标签 java jboss

如何在部署在该 jboss 服务器上的 application/war 中以编程方式找到 jboss 端口?使用 Java

它是一个运行的网络服务,我们没有任何用户界面

最佳答案

我假设您需要 HTTP 端口。

JBoss 为每个 Web 监听器发布一个 Tomcat 连接器 MBean。 mbean 的 ObjectNames 的命名约定是:

  • 域:jboss.web
  • 属性:
    • address:绑定(bind)地址
    • 端口:监听端口
    • 类型:连接器

诀窍在于,无需对绑定(bind)地址或端口(绑定(bind)地址可以是 127.0.0.1、0.0.0.0 或主机名)做任何假设,就能找到正确的 MBean。为此,您可以使用指定以下内容的 JMX 查询:

  1. 已知域名:jboss.web
  2. 已知类型:连接器
  3. 地址的通配符:*****
  4. 端口的通配符:*****
  5. 一个属性值表达式,指定您正在寻找 HTTP/1.1 协议(protocol)端口(相对于 AJP 端口):Query.match(Query .attr("协议(protocol)"), Query.value("HTTP/1.1"))

一旦您拥有到 JBoss MBeanServer 的 MBeanServerConnection,此语句将返回正确的端口:

String port = server.queryNames(
   new ObjectName("jboss.web:type=Connector,address=*,port=*"), 
   Query.match(Query.attr("protocol"), Query.value("HTTP/1.1")))
   .iterator().next().getKeyProperty("port");

如果您试图通过 JBoss JVM 内部运行的代码确定端口,获取 MBeanServerConnection 是微不足道的,因为您可以对 org.jboss.mx.util.MBeanServerLocator.locateJBoss() 进行静态调用。 .

这是一个打印 HTTP 端口号的简单 JSP 示例:

<%@page contentType="text/html" import="java.util.*,org.jboss.mx.util.*,javax.management.*" %>
<html><head><title>JBoss Web Server Port</title></head><body>
<%
    try {
        MBeanServerConnection server = MBeanServerLocator.locateJBoss();
        String port = server.queryNames(
            new ObjectName("jboss.web:type=Connector,address=*,port=*"), 
            Query.match(Query.attr("protocol"), Query.value("HTTP/1.1")))
            .iterator().next().getKeyProperty("port");
        out.println("<p>Port:" + port + "</p>");

    } catch (Exception e) {
        e.printStackTrace(System.err);
    }
%></body></html>

如果需要远程获取,需要使用JBoss客户端RMIAdaptor . reference Nayan Wadekar 提供的是如何执行此操作的一个很好的示例。

如果您的 JBoss 服务器有一个 org.jboss.mx.remoting.service.JMXConnectorServerService已部署或您正在使用 platform MBeanServer 运行 JBoss ,您还可以使用 native JMX 远程处理。这是一个 Groovy 示例:

import javax.management.*;
import javax.management.remote.*;
conn = null;
try {
    url = new JMXServiceURL("service:jmx:rmi://njw810/jndi/rmi://njw810:1090/jmxconnector");
    conn = JMXConnectorFactory.connect(url);
    server = conn.getMBeanServerConnection();
    objectName = new ObjectName("jboss.web:type=Connector,address=*,port=*");    // HTTP/1.1
    println server.queryNames(objectName, Query.match(Query.attr("protocol"), Query.value("HTTP/1.1"))).iterator().next().getKeyProperty("port");
} finally {
    try { conn.close(); println "Connection Closed"; } catch (Exception e) {}
}

关于java - 获取jboss的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6153661/

相关文章:

java - 我如何检查Java中是否存在变量?

java - 系统外观和感觉是否会改变元素大小?

java - 远程连接到 JBoss 7.1.1 MBean

java - 如何在xhtml页面中打印Hashmap值

java - 如何在 SQL Provider 中使用带有 Mybatis Annotation 的 IN 子句

java - 如何手动加密 SOAP 消息?

java - 管理交易的最佳方式

java - 服务 jboss.web.deployment.default-host./.realm 已经注册

java - 查找点是否在三角形内(2D)

java - 如何将 jdbc-realm 配置为 jBoss jbpm