Desarrollo de un cliente JMX Java para Liberty
Puede desarrollar una aplicación cliente de Java™ Management Extensions (JMX) para acceder al conector REST protegido de Liberty.
Acerca de esta tarea
Mediante el uso de una aplicación cliente remota JMX, puede administrar Liberty a través de programación JMX.
Procedimiento
- Empiece con el código de aplicación de ejemplo siguiente. Añada la biblioteca de cliente de conector REST Liberty a la vía de acceso de clases de la aplicación liberty_home/clients/restConnector.jar.
import javax.management.remote.JMXServiceURL; import javax.management.MBeanServerConnection; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import java.util.HashMap; public class Test { public static void main(String[] args) { System.setProperty("javax.net.ssl.trustStore", <truststore location>); System.setProperty("javax.net.ssl.trustStorePassword", <truststore password>); //Si el tipo de trustStore no es jks, que es el valor predeterminado, //establezca el tipo utilizando la línea siguiente. System.setProperty("javax.net.ssl.trustStoreType", <truststore type>); try { HashMap<String, Object> environment = new HashMap<String, Object>(); environment.put("jmx.remote.protocol.provider.pkgs", "com.ibm.ws.jmx.connector.client"); environment.put(JMXConnector.CREDENTIALS, new String[] { "userid", "password" }); JMXServiceURL url = new JMXServiceURL("service:jmx:rest://localhost:9443/IBMJMXConnectorREST"); JMXConnector connector = JMXConnectorFactory.newJMXConnector(url, environment); connector.connect(); MBeanServerConnection mbsc = connector.getMBeanServerConnection(); } catch(Throwable t) { ... } } }
- Si el servidor genera el almacén de claves de servidor para un entorno de no producción, utilice el almacén de claves como el almacén de confianza de cliente de cliente de aplicaciones. El almacén de claves que genera el servidor para un entorno de no producción contiene el certificado de cliente. De forma predeterminada, el archivo de almacén de confianza del cliente de aplicaciones es ${server.output.dir}/resources/security/key.jks.
- Establezca la propiedad javax.net.ssl.trustStoreType. Si utiliza el tipo predeterminado de almacén de claves Java (JKS), elimine esta línea.
- Sustituya los valores de id_usuario y contraseña para la propiedad JMXConnector.CREDENTIALS. Utilice el ID de usuario y la contraseña del administrador para el servidor.
- Establezca el nombre de host y el número de puerto para el servidor en el constructor JMXServiceURL utilizando uno de los métodos siguientes:
- Utilice el número de puerto HTTPS. El número predeterminado es 9443.
- Utilice el contenido del archivo ${server.output.dir}/logs/state/com.ibm.ws.jmx.rest.address como el parámetro JMXServiceURLconstructor. El programa escribe este archivo cuando se inicia un servidor con la característica restConnector-2.0 que se ha configurado y contiene el punto final REST como, por ejemplo service:jmx:rest://localhost:9443/IBMJMXConnectorREST.
- Para ejecutar la aplicación cliente en una máquina de host diferente, configure el punto final HTTP del servidor para aceptar conexiones de hosts remotos. Por ejemplo, utilice un asterisco (*) como el atributo de host del punto final defaultHttpEndpoint.
<httpEndpoint id="defaultHttpEndpoint" httpPort="9080" httpsPort="9443" host="*" />
- Opcional: Inhabilite la verificación de nombre de host para los certificados SSL (Secure Sockets Layer). Los
certificados que se instalan con
Liberty
podrían no contener el nombre de host desde donde se está ejecutando
el servidor. Si desea inhabilitar la verificación de nombre de host de certificados SSL, puede establecer la propiedad de sistema com.ibm.ws.jmx.connector.client.disableURLHostnameVerification en true, que inhabilita la verificación de nombre de host para todas las conexiones. Para inhabilitar la verificación de nombres de host para cada conexión de forma individual, pase la propiedad como un nuevo valor de environment cuando cree la conexión JMX:
HashMap<String, Object> environment = new HashMap<String, Object>(); environment.put("jmx.remote.protocol.provider.pkgs", "com.ibm.ws.jmx.connector.client"); environment.put("com.ibm.ws.jmx.connector.client.disableURLHostnameVerification", Boolean.TRUE); environment.put(JMXConnector.CREDENTIALS, new String[] { "userid", "password" }); ...
- Opcional: Configure los valores del conector REST JMX utilizando la correlación de entornos.
... HashMap<String, Object> environment = new HashMap<String, Object>(); environment.put("com.ibm.ws.jmx.connector.client.rest.maxServerWaitTime", 0); environment.put("com.ibm.ws.jmx.connector.client.rest.notificationDeliveryInterval", 65000); ...
- Opcional: El conector REST
Liberty
permite que se utilice una fábrica de sockets SSL personalizada para
obtener sockets. Si se
muestra la excepción javax.net.ssl.SSLHandshakeException:
com.ibm.jsse2.util.j: Ha fllado la creación de vía de acceso PKIX:
java.security.cert.CertPathBuilderException: no se puede
encontrar vía de acceso de certificación válida en el destino
solicitado, puede crear su propio SSLContext desde sus
propios almacenes de claves y, después, utilizar el SocketFactory
de dicho contexto con el conector REST.
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); InputStream inputStream = new FileInputStream("myTrustStore.jks"); trustStore.load(inputStream, "password".toCharArray()); TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(trustStore); TrustManager[] trustManagers = trustManagerFactory.getTrustManagers(); SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, trustManagers, null); Map<serie, objeto> environment = new HashMap<serie, objeto>(); environment.put(ConnectorSettings.CUSTOM_SSLSOCKETFACTORY, sslContext.getSocketFactory()); environment.put(ConnectorSettings.DISABLE_HOSTNAME_VERIFICATION, true); environment.put("jmx.remote.protocol.provider.pkgs", "com.ibm.ws.jmx.connector.client"); environment.put(JMXConnector.CREDENTIALS, new String[] { "userid", "password" }); JMXServiceURL url = new JMXServiceURL("REST", "localhost", 9443, "/IBMJMXConnectorREST"); jmxConn = JMXConnectorFactory.connect(url, environment);
Qué hacer a continuación
Tema principal: Configuración de una conexión JMX segura con Liberty
Tareas relacionadas:

Nombre de archivo: twlp_dev_jmxclient.html