jconsole подключается к URL-адресу службы ipv6 JMX

У меня проблемы с подключением к URL-адресу службы JMX, имеющему адрес IPv6, через jconsole. Я пытался

service:jmx:rmi:///jndi/rmi://[fd02:c9e3:a6c0:4306:0:0:0:27]:5500/jmx  

и я получаю

Подключиться не удалось..

Что касается некоторого фона,

  • Я запускаю jconsole из своего окна Windows 7 и подключаюсь к серверу jmx в Linux.
  • сервер jmx представляет собой двойной стек Redhat linux box, и я могу подключиться через jconsole, используя адрес IPv4.
  • Не уверен, что это актуально, хост, к которому я пытаюсь подключиться, имеет 2 сетевых интерфейса, и один из них используется только для целей управления.

person javadeveloper    schedule 01.02.2011    source источник
comment
Просто чтобы проверить, настроена ли аутентификация на клиенте или отключена на сервере?   -  person Pace    schedule 01.02.2011
comment
Ваше приложение действительно прослушивает сокет IPv6 для соединений jmx?   -  person Heiko Rupp    schedule 02.02.2011
comment
Вы проверили базовое подключение? Сначала попробуйте ping fd02:c9e3:a6c0:4306:0:0:0:27, затем telnet fd02:c9e3:a6c0:4306:0:0:0:27 5500 из командной строки, чтобы узнать, открыт ли порт (в противном случае вы получите отказ в соединении). Telnet можно установить через Control Panel > Programs and Features > Turn Windows Features on or off > Telnet client, если его там еще нет.   -  person mpontillo    schedule 06.02.2011
comment
@Heiko/Mike, спасибо за ваш вклад. Я понял, что мой серверный процесс должен использовать «[]», чтобы избежать «:» как часть URL-адреса JMX.   -  person javadeveloper    schedule 08.02.2011
comment
@sfrocks: не могли бы вы опубликовать пример того, что вы сделали? Насколько я помню, вы можете ответить на свой собственный пост, и я чувствую, что это может быть полезно для других.   -  person Heiko Rupp    schedule 08.02.2011


Ответы (1)


Хорошо, я добавил условие ниже, чтобы заключить адрес хоста сервера в квадратные скобки.

    if ( aHost instanceof Inet4Address ) {
       this.hostAddress = aHost.getHostAddress();
    }
    else if ( aHost instanceof Inet6Address ) {
       this.hostAddress = "[" + aHost.getHostAddress() + "]";
    }
    else {
       throw someException();
    }

.............some other stuff.................

    registry = LocateRegistry.getRegistry( this.hostAddress, ... );

На самом деле адрес хоста указан как пара "имя-значение" в файле свойств. Следовательно, я мог бы сделать, как показано ниже, но это не сработало по другим причинам.

файл .properties

имя_хоста = [fd02:c9e3:a6c0:4306:0:0:0:27]

person javadeveloper    schedule 10.02.2011
comment
На самом деле это было бы неправильно: '[]' требуются в URL-адресе в соответствии с [RFC2732][1], они не являются частью имени хоста. [1]: tools.ietf.org/html/rfc2732 - person ankon; 14.12.2012