Я предполагаю, что вы хотите порт HTTP.
JBoss публикует коннектор Tomcat MBean для каждого веб-прослушивателя. Соглашение об именах ObjectNames mbeans:
- Домен: jboss.web
- Атрибуты:
- адрес: Обязательный адрес
- порт: порт прослушивания
- тип: разъем
Хитрость заключается в том, чтобы без каких-либо предположений относительно адреса или порта связывания (адрес связывания мог быть 127.0.0.1 или 0.0.0.0 или имя хоста), находя правильный MBean. Для этого вы можете использовать JMX Query, который указывает:
- Известное доменное имя: jboss.web
- Известный тип: разъем
- Подстановочный знак для адреса: *****
- Подстановочный знак для порта: *****
- Выражение значения атрибута, которое указывает, что вы ищете порт протокола HTTP / 1.1 (в отличие от порта AJP ): Query.match (Query.attr) («протокол»), Query.value («HTTP / 1.1»))
Если у вас есть MBeanServerConnection к 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");
Если вы пытаетесь определить порт из кода, работающего внутри JVoss JBM, получение 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 . Справочник , предоставленный Наяном Вадекаром, является хорошим примером того, как это сделать.
Если на вашем сервере JBoss развернут org.jboss.mx.remoting.service.JMXConnectorServerService или вы работаете с JBoss, используя MBeanServer на платформе , вы также можете использовать собственный JMX Remoting. Вот 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) {}
}