获取有关jboss的信息

时间:2011-05-27 14:27:54

标签: java jboss

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

这是一个运行的Web服务,我们没有任何用户界面

1 个答案:

答案 0 :(得分:7)

我假设你想要HTTP端口。

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

  • 域名: jboss.web
  • 属性:
    • 地址:绑定地址
    • port:侦听端口
    • 键入:连接器

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

  1. 已知域名: jboss.web
  2. 已知类型:连接器
  3. 地址的外卡:*****
  4. 港口的外卡:*****
  5. 一个属性值表达式,指定您正在寻找 HTTP / 1.1 协议端口(而不是 AJP 端口): Query.match(查询.attr(“protocol”),Query.value(“HTTP / 1.1”))
  6. 一旦你有一个MBossServerConnection到JBoss MBeanServer,这个语句将返回正确的端口:

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

    如果您正在尝试从运行 in 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。 Nayan Wadekar提供的reference就是如何做到这一点的一个很好的例子。

    如果你的JBoss服务器部署了org.jboss.mx.remoting.service.JMXConnectorServerService,或者你使用platform MBeanServer运行JBoss,你也可以使用本机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) {}
    }