Pregunta

Me gustaría monitorear el servidor remoto de glassfish. He habilitado la conexión JMX en domain.xml:

<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">

Pero esto no ayudó. Todavía no puedo conectarme al servidor con JConsole. Luego encontré la solución: necesito especificar las propiedades de JVM en domain.xml para abrir el puerto 8686 para la conexión remota. Así que agregué estas líneas en la sección java-config :

<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>

Pero ahora, cuando estoy iniciando el servidor, obtengo los siguientes errores:

  

No se pudo cargar Logmanager   " com.sun.enterprise.server.logging.ServerLogManager "   java.lang.ClassNotFoundException:   com.sun.enterprise.server.logging.ServerLogManager           en java.net.URLClassLoader $ 1.run (URLClassLoader.java:200)           en java.security.AccessController.doPrivileged (Native   Método)           en java.net.URLClassLoader.findClass (URLClassLoader.java:188)           en java.lang.ClassLoader.loadClass (ClassLoader.java:307)           en sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:301)           en java.lang.ClassLoader.loadClass (ClassLoader.java:252)           en java.util.logging.LogManager $ 1.run (LogManager.java:166)           en java.security.AccessController.doPrivileged (Native   Método)           en java.util.logging.LogManager. (LogManager.java:156)           en java.util.logging.Logger.getLogger (Logger.java:273)           en sun.management.snmp.util.MibLogger. (MibLogger.java:57)           en sun.management.snmp.util.MibLogger. (MibLogger.java:42)           en sun.management.jmxremote.ConnectorBootstrap. (ConnectorBootstrap.java:760)           en sun.management.Agent.startAgent (Agent.java:127)           en sun.management.Agent.startAgent (Agent.java:239)   javax.management.JMRuntimeException:   Error al cargar MBeanServerBuilder   clase   com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder:   java.lang.ClassNotFoundException:   com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder           en javax.management.MBeanServerFactory.checkMBeanServerBuilder (MBeanServerFactory.java:480)           en javax.management.MBeanServerFactory.getNewMBeanServerBuilder (MBeanServerFactory.java:511)           en javax.management.MBeanServerFactory.newMBeanServer (MBeanServerFactory.java:298)           en javax.management.MBeanServerFactory.createMBeanServer (MBeanServerFactory.java:213)           en javax.management.MBeanServerFactory.createMBeanServer (MBeanServerFactory.java:174)           en sun.management.ManagementFactory.createPlatformMBeanServer (ManagementFactory.java:302)           en java.lang.management.ManagementFactory.getPlatformMBeanServer (ManagementFactory.java:504)           en sun.management.jmxremote.ConnectorBootstrap.initialize (ConnectorBootstrap.java:392)           en sun.management.Agent.startAgent (Agent.java:127)           en sun.management.Agent.startAgent (Agent.java:239)   Causado por:   java.lang.ClassNotFoundException:   com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder           en java.net.URLClassLoader $ 1.run (URLClassLoader.java:200)           en java.security.AccessController.doPrivileged (Native   Método)           en java.net.URLClassLoader.findClass (URLClassLoader.java:188)           en java.lang.ClassLoader.loadClass (ClassLoader.java:307)           en sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:301)           en java.lang.ClassLoader.loadClass (ClassLoader.java:252)           en javax.management.MBeanServerFactory.loadBuilderClass (MBeanServerFactory.java:423)           en javax.management.MBeanServerFactory.checkMBeanServerBuilder (MBeanServerFactory.java:465)           ... 9 más Excepción lanzada por el agente:   javax.management.JMRuntimeException:   Error al cargar MBeanServerBuilder   clase   com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder:   java.lang.ClassNotFoundException:   com.sun.enterprise.admin.server.core.jmx.AppServerMBeanSe

¿Fue útil?

Solución

Los pasos para resolver el problema son: 1. usa la configuración predeterminada 2. agregue -Djava.rmi.server.hostname = en las Opciones de JVM de la instancia de GlassFish.

Otros consejos

Todavía comportamiento místico, pero con estas 4 configuraciones puedes conectarte a la JVM que ejecuta Glassfish (agregar a domain.xml en la consola de administración, reiniciar requerido)

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

¡Cuidado! ¡Esto no es seguro, ya que ahora cualquiera puede conectarle una jconsole!

OMI, esta no es la forma Glassfish, que está utilizando el conector JMX.

(arriba funciona en GF 3.1)

Terminé configurando la siguiente opción para asegurarme de que JMX con Glassfish sea compatible con firewall:

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

Donde XXXX es el número de puerto que usa en el firewall junto con el número de puerto JMX configurado del servidor de aplicaciones (generalmente 8686).

Lea más en esta publicación de blog . Tenga en cuenta que esta función requiere una versión más nueva de Glassfish. Lo he usado con éxito con Glassfish 2.1.1.

Si ejecuta su aplicación dentro del servidor de aplicaciones Glassfish, simplemente ejecute el siguiente comando asadmin, deberá reiniciar todos los servidores en ejecución para que el cambio surta efecto.

./asadmin enable-secure-admin

Hay configuraciones adicionales del servidor Glassfish para habilitar aún más la seguridad, vea más en Conexión remota a Glassfish a través de JMX .

Debe seguir los pasos en las opciones de JVM, estas son instrucciones para aplicaciones Java en general. Para una aplicación Java que se ejecuta con el servidor de aplicaciones Glassfish, simplemente use el comando asadm. ¡Eso me ahorró mucho tiempo!

** Otra nota, con solo las configuraciones que utilizan las opciones de JVM, Glassfish no podría comenzar con las excepciones de tiempo de ejecución anteriores. ** Estoy usando GF3.1.2 y superior, y Java 7.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top