Как избежать этого исключения NullPointerException при удаленном подключении к JBoss AS через JMX из VisualVM? - PullRequest
3 голосов
/ 25 января 2012

Проблема:

Когда я подключаюсь через VisualVM и предоставляю правильные учетные данные, программа, похоже, немного подождет (либо обрабатывает, либо ожидает подключения), затем выдает ошибки с этим исключением.Кажется, что соединение не добавляется правильно после того, как это исключение - throw:

java.lang.NullPointerException: Illegal null argument
    at javax.management.remote.JMXConnectionNotification.<init>(JMXConnectionNotification.java:152)
    at javax.management.remote.rmi.RMIConnector$RMIClientCommunicatorAdmin.gotIOException(RMIConnector.java:1444)
    at javax.management.remote.rmi.RMIConnector$RemoteMBeanServerConnection.isInstanceOf(RMIConnector.java:1062)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.sun.tools.visualvm.jmx.impl.JmxModelImpl$CheckerInvocationHandler.invoke(JmxModelImpl.java:598)
    at $Proxy7.isInstanceOf(Unknown Source)
    at java.lang.management.ManagementFactory.newPlatformMXBeanProxy(ManagementFactory.java:616)
    at com.sun.tools.visualvm.tools.jmx.JvmMXBeansFactory$JvmMXBeansImpl.getMXBean(JvmMXBeansFactory.java:383)
    at com.sun.tools.visualvm.tools.jmx.JvmMXBeansFactory$JvmMXBeansImpl.getRuntimeMXBean(JvmMXBeansFactory.java:356)
    at com.sun.tools.visualvm.jmx.impl.JmxApplication.getPid(JmxApplication.java:84)
    at com.sun.tools.visualvm.jvmstat.JvmstatModelProvider.getMonitoredVm(JvmstatModelProvider.java:49)
    at com.sun.tools.visualvm.jvmstat.JvmstatModelProvider.createModelFor(JvmstatModelProvider.java:71)
    at com.sun.tools.visualvm.jvmstat.JvmstatModelProvider.createModelFor(JvmstatModelProvider.java:45)
    at com.sun.tools.visualvm.core.model.ModelFactory.getModel(ModelFactory.java:111)
    at com.sun.tools.visualvm.tools.jvmstat.JvmstatModelFactory.getJvmstatFor(JvmstatModelFactory.java:65)
    at com.sun.tools.visualvm.jvm.JRockitJvmProvider.createModelFor(JRockitJvmProvider.java:49)
    at com.sun.tools.visualvm.jvm.JRockitJvmProvider.createModelFor(JRockitJvmProvider.java:42)
    at com.sun.tools.visualvm.core.model.ModelFactory.getModel(ModelFactory.java:111)
    at com.sun.tools.visualvm.application.jvm.JvmFactory.getJVMFor(JvmFactory.java:65)
    at com.sun.tools.visualvm.jmx.impl.JmxApplicationProvider.addJmxApplication(JmxApplicationProvider.java:292)
    at com.sun.tools.visualvm.jmx.impl.JmxApplicationProvider.access$100(JmxApplicationProvider.java:73)
    at com.sun.tools.visualvm.jmx.impl.JmxApplicationProvider$3$1.run(JmxApplicationProvider.java:408)
    at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1424)
[catch] at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:1968)

Фон:

Я использую VisualVM для выполнения некоторой простой работы по профилированию.Я запускаю jboss-4.2.2.GA в Windows.

В моем файле run.bat есть:

set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=<myport>
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.local.only=false
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.ssl=false

В созданном мною файле паролей JMX я включил рольс доступом только для чтения и убедитесь, что права доступа для чтения установлены для этого файла.

Я могу подключиться к серверу на localhost:<myport> через JMX.Имя пользователя и пароль совпадают с ролью и паролем в моем файле конфигурации паролей JMX.Использование других учетных данных или другого пароля не работает, поэтому это определенно настроено правильно.

Я установил исключение общего брандмауэра в моем домене для java.exe.Когда у меня нет этого исключения, я вообще не могу подключиться к серверу.Когда он включен, я могу удаленно подключиться к myport через telnet и получить диалоговое окно с паролем, когда пытаюсь подключиться удаленно через VisualVM.

Я попытался просмотреть код, указанный в трассировке стека исключений.,Насколько я могу судить, connectionId, вероятно, null при построении JMXConnectionNotification.Я не могу сказать почему, потому что я не удосужился попытаться запустить это в отладчике.

Есть что-то, что я настроил неправильно?Как обойти эту ошибку?


Редактировать:

Я только что попытался подключиться удаленно с JConsole, и я получил совершенно другую ошибку:

java.rmi.ConnectException: Connection refused to host: 127.0.0.1;

У меня нет записей в моем файле hosts на клиентском компьютере, так как некоторые вещи в сети предлагают WRT эту ошибку.Это свидетельствует о другой проблеме, или они связаны?

Ответы [ 2 ]

2 голосов
/ 08 февраля 2013

В нашем случае было полезно установить следующее свойство:

set JAVA_OPTS=%JAVA_OPTS% -Djava.rmi.server.hostname=192.168.1.2

где 192.168.1.2 - фактический IP-адрес контролируемого сервера.

0 голосов
/ 25 января 2012

Это записи, которые у меня есть в run.bat, и они работают нормально.Может отсутствовать authenticate = true, вызывающий проблему.

set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=<myport>
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.authenticate=true
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.ssl=false
...