如何在该jboss服务器上部署的application / war中以编程方式找到jboss端口?使用Java
这是一个运行的Web服务,我们没有任何用户界面
答案 0 :(得分:7)
我假设你想要HTTP端口。
JBoss为每个Web侦听器发布一个Tomcat连接器MBean。 mbeans的ObjectNames的命名约定是:
诀窍是,不对绑定地址或端口做任何假设(绑定地址可能是127.0.0.1,或0.0.0.0或主机名),找到正确的MBean。为此,您可以使用指定的JMX查询:
一旦你有一个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) {}
}