2009-08-05 2 views
2

Я хотел был бы контролировать дистанционный сервер стальной рыбы. Я включил JMX Connection в domain.xml:Как активировать JMX на удаленном сервере Glassfish для доступа с помощью jconsole?

<jmx-connector accept-all="true" address="0.0.0.0" auth-realm-name="admin-realm" enabled="true" name="system" port="8686" protocol="rmi_jrmp" security-enabled="false"> 

Но это не помогло. Я до сих пор не могу подключиться к серверу с помощью JConsole. Затем я нашел решение - мне нужно указать свойства JVM в domain.xml, чтобы открыть порт 8686 для удаленного подключения. Поэтому я добавил эти строки в Java-конфигурации раздел:

<jvm-options>-Dcom.sun.management.jmxremote</jvm-options> 
<jvm-options>-Dcom.sun.management.jmxremote.port=8686</jvm-options> 
<jvm-options>-Dcom.sun.management.jmxremote.local.only=false</jvm-options> 
<jvm-options>-Dcom.sun.management.jmxremote.authenticate=false</jvm-options> 

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

Не удалось загрузить LogManager «ком .sun.enterprise.server.logging.ServerLogManager» java.lang.ClassNotFoundException: com.sun.enterprise.server.logging.ServerLogManager в java.net.URLClassLoader $ 1.Run (URLClassLoader.java:200) на Java .security.Ac cessController.doPrivileged (Родной метод) на java.net.URLClassLoader.findClass (URLClassLoader.java:188) в java.lang.ClassLoader.loadClass (ClassLoader.java:307) в sun.misc.Launcher $ AppClassLoader. loadClass (Launcher.java:301) at java.lang.ClassLoader.loadClass (ClassLoader.java:252) at java.util.logging.LogManager $ 1.run (LogManager.java:166) at java.security.AccessController .doPrivileged (родной метод) в java.util.logging.LogManager. (LogManager.java:156) по адресу java.util.logging.Logger.getLogger (Logger.java:273) at sun.management.snmp. util.MibLogger. (MibLogger.java:57) at sun.management.snmp.u til.MibLogger. (MibLogger.java:42) at sun.management.jmxremote.ConnectorBootstrap. (ConnectorBootstrap.java:760) at sun.management.Agent.startAgent (Agent.java:127) at sun.management. Agent.startAgent (Agent.java:239) javax.management.JMRuntimeException: Не удалось загрузить MBeanServerBuilder класс com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder: java.lang.ClassNotFoundException: обыкн .sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder в javax.management.MBeanServerFactory.checkMBeanServerBuilder (MBeanServerFactory.java:480) в javax.management.MBeanServerFactory.getNewMBeanServerBuilder (MBeanServerFactory. Java: 511) на javax.management.MBeanServerFactory.newMBeanServer (MBeanServerFactory.java:298) на javax.management.MBeanServerFactory.createMBeanServer (MBeanServerFactory.java:213) на javax.management.MBeanServerFactory.createMBeanServer (MBeanServerFactory.java: 174) в sun.management.ManagementFactory.createPlatformMBeanServer (ManagementFactory.java:302) в java.lang.management.ManagementFactory.getPlatformMBeanServer (ManagementFactory.java:504) в sun.management.jmxremote.ConnectorBootstrap.initialize (ConnectorBootstrap. java: 392) at sun.management.Agent.startAgent (Agent.java:127) at sun.management.Agent.startAgent (Agent.java:239) Вызвано: java.lang.ClassN otFoundException: com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder at java.net.URLClassLoader $ 1.run (URLClassLoader.java:200) at java.security.AccessController.doPrivileged (Родной метод) на java.net.URLClassLoader.findClass (URLClassLoader.java:188) на java.lang.ClassLoader.loadClass (ClassLoader.java:307) в sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:301) на java.lang.ClassLoader.loadClass (ClassLoader.java:252) в javax.management.MBeanServerFactory.loadBuilderClass (MBeanServerFactory.java:423) в javax.management.MBeanServerFactory.checkMBeanServerBuilder (MBeanServerFactory. Java: 465) ... 9 более Исключение брошено агентом: javax.management.JMRuntimeException: Не удалось загрузить MBeanServerBuilder класса com.sun.enterprise.admin.server.core .jmx.AppServerMBeanServerBuilder: java.lang.ClassNotFoundException: com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder

Как я могу решить эту проблему?

Заранее спасибо.

ответ

3

Шаги к решению проблемы: 1. использовать настройки по умолчанию 2. add -Djava.rmi.server.hostname = в опции JVM экземпляра GlassFish.

+0

Чтобы убедиться: первый шаг - это связано с удалением всех параметров com.sun.management.jmxremote из параметров JVM? – tronda

+0

Это означает держать их такими же, как они были из коробки. Если настройки JMX существуют, пусть они, если они этого не делают, не добавляют. – Pavel

2

Я в конечном итоге установив следующий параметр, чтобы гарантировать, что JMX с Glassfish является удобным для брандмауэра:

<jvm-options>-Dcom.sun.aas.jconsole.server.cbport=XXXX</jvm-options> 

Где XXXX это номер порта, который вы используете в брандмауэре вместе с сервером приложений сконфигурирован JMX номер порта (обычно 8686).

Подробнее в this blogpost. Обратите внимание, что для этой функции требуется более новая версия Glassfish. Я успешно использовал его с Glassfish 2.1.1.

2

Еще мистическое поведение, но с этими 4 настройками вы можете подключиться к JVM работает Glassfish (добавить в domain.xml в консоли администратора, требуется перезагрузка)

-Djava.rmi.server.hostname=yourhost 
-Dcom.sun.management.jmxremote.port=8686 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 

Остерегайтесь! Это небезопасно, так как теперь любой пользователь может подключить к нему консоль!

IMO это не путь Glassfish, который использует разъем JMX.

(Выше работает в GF 3.1)

+0

Большое спасибо. Это именно тот ответ, который я искал для удаленного подключения к серверу из стекла, работающему на виртуальной машине на моей машине! – Cuga

0

Если запустить приложение внутри сервера приложений GlassFish, просто запустите следующую команду asadmin, вам нужно будет перезапустить все работающие серверы для того, чтобы изменения вступили в силу.

./asadmin включить-безопасный-администратор

Есть дополнительные конфигурации Glassfish сервера для дальнейшего включения безопасности, больше на Connecting remotely to Glassfish through JMX.

Вам необходимо выполнить действия по настройкам JVM, это инструкции для приложений Java в целом. Для приложения Java, которое работает с сервером приложений Glassfish, просто используйте команду asadm. Это спасло меня много времени!

** Другое примечание: только с настройками, использующими параметры JVM, Glassfish не сможет начать с вышеупомянутых исключений во время выполнения. ** Я использую GF3.1.2 и выше, а Java 7.

Смежные вопросы