Получить информацию о jboss - PullRequest
8 голосов
/ 27 мая 2011

Как можно найти порт jboss программно в приложении / войне, развернутом на этом сервере jboss? Использование Java

Это веб-сервис запущен, у нас нет пользовательского интерфейса

1 Ответ

7 голосов
/ 28 мая 2011

Я предполагаю, что вы хотите порт HTTP.

JBoss публикует коннектор Tomcat MBean для каждого веб-прослушивателя. Соглашение об именах ObjectNames mbeans:

  • Домен: jboss.web
  • Атрибуты:
    • адрес: Обязательный адрес
    • порт: порт прослушивания
    • тип: разъем

Хитрость заключается в том, чтобы без каких-либо предположений относительно адреса или порта связывания (адрес связывания мог быть 127.0.0.1 или 0.0.0.0 или имя хоста), находя правильный MBean. Для этого вы можете использовать JMX Query, который указывает:

  1. Известное доменное имя: jboss.web
  2. Известный тип: разъем
  3. Подстановочный знак для адреса: *****
  4. Подстановочный знак для порта: *****
  5. Выражение значения атрибута, которое указывает, что вы ищете порт протокола 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) {}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...