获取关于jboss的信息

8
如何在已经部署了jboss服务器的应用程序/ war内以编程方式找到jboss端口?使用Java。这是一个正在运行的Web服务,我们没有任何用户界面。

1
在什么上下文中?如果您在servlet请求上下文中,只需调用request.getLocalPort()即可获得所需的内容。 - pap
@pap 我没有Servlet请求上下文。 - Gandalf StormCrow
类似的问题,请查看https://dev59.com/Jm855IYBdhLWcg3wNxkM#4508602。 - Nayan Wadekar
1个回答

7
我假设您想要HTTP端口。
JBoss为每个Web监听器发布一个Tomcat连接器MBean。这些Mbean的ObjectName的命名约定是:
- 域:jboss.web - 属性: - 地址:绑定地址 - 端口:监听端口 - 类型:连接器
关键在于,不做任何关于绑定地址或端口的假设(绑定地址可以是127.0.0.1,或0.0.0.0或主机名),找到正确的MBean。为此,您可以使用指定以下内容的JMX查询:
1. 已知的域名称:jboss.web 2. 已知的类型:连接器 3. 地址的通配符:***** 4. 端口的通配符:***** 5. 属性值表达式,指定您正在寻找HTTP/1.1协议端口(而不是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()进行静态调用。
以下是一个简单的JSP示例,用于打印HTTP端口号:
<%@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提供的参考示例是如何执行此操作的很好的例子。
如果您的JBoss服务器部署了org.jboss.mx.remoting.service.JMXConnectorServerService或者您正在使用平台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) {}
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接