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
Utilizando una aplicación cliente remota de JMX, puede administrar Liberty mediante programación de JMX.
Procedimiento
- Desarrolle un cliente JMX de ejemplo. El conector REST da
soporte a la API JMX estándar. Para un servidor Liberty iniciado
con la característica restConnector-1.0
configurada, el contenido de
${server.output.dir}/logs/state/com.ibm.ws.jmx.rest.address
se puede utilizar para crear una instancia de un objeto
JMXServiceURL nuevo.
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>); //If the type of the trustStore is not jks, which is default, //set the type by using the following line. 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[] { "bob", "bobpassword" }); JMXServiceURL url = new JMXServiceURL("service:jmx:rest://<host>:<port>/IBMJMXConnectorREST"); JMXConnector connector = JMXConnectorFactory.newJMXConnector(url, environment); connector.connect(); MBeanServerConnection mbsc = connector.getMBeanServerConnection(); } catch(Throwable t) { ... } } }
- Opcional: Inhabilite la verificación de nombre de host para certificados SSL. Los
certificados que se instalan con Liberty podrían no contener el
nombre de host donde se está ejecutando el servidor. Si desea inhabilitar la verificación de nombres de hosts de los certificados de SSL, puede establecer la propiedad del sistema com.ibm.ws.jmx.connector.client.disableURLHostnameVerification en true, que inhabilita la verificación de nombres de hosts 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[] { "bob", "bobpassword" }); ...
- 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
sockects SSL personalizada específica 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[] { "admin", "password" }); JMXServiceURL url = new JMXServiceURL("REST", "myhost", 9443, "/IBMJMXConnectorREST"); jmxConn = JMXConnectorFactory.connect(url, environment);
Tema principal: Configuración de una conexión JMX segura a Liberty
Tareas relacionadas:


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=twlp_dev_jmxclient
Nombre de archivo:twlp_dev_jmxclient.html