Développement d'un client Java JMX pour Liberty
Vous pouvez développer une application client Java™ Management Extensions (JMX) pour accéder au connecteur REST sécurisé de Liberty.
Pourquoi et quand exécuter cette tâche
A l'aide d'une application client distante JMX, vous pouvez administrer Liberty au moyen de la programmation JMX.
Procédure
- Commencez avec l'exemple de code d'application suivant. Ajoutez la bibliothèque client du connecteur REST Liberty au chemin d'accès
aux classes de l'application 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>); //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[] { "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 le serveur génère le magasin de clés du serveur pour un environnement de non production, utilisez le magasin de clés comme magasin de clés de confiance du client d'application. Le magasin de clés que le serveur génère pour un environnement de non production contient le certificat client. Par défaut, le fichier du magasin de clés de confiance du client d'application est ${server.output.dir}/resources/security/key.jks.
- Définissez la propriété javax.net.ssl.trustStoreType. Si vous utilisez le type de magasin de clés Java (JKS) par défaut, supprimez cette ligne.
- Remplacez les valeurs userid et password de la propriété JMXConnector.CREDENTIALS. Utilisez l'ID et le mot de passe de l'administrateur du serveur.
- Définissez le nom d'hôte et le numéro de port du serveur dans le constructeur JMXServiceURL à l'aide de l'une des méthodes suivantes :
- Utilisez le numéro de port HTTPS. Le numéro par défaut est 9443.
- Utilisez le contenu du fichier ${server.output.dir}/logs/state/com.ibm.ws.jmx.rest.address comme paramètre JMXServiceURLconstructor. Le programme génère ce fichier lorsqu'un serveur démarre avec la fonction restConnector-2.0 configurée et contient le point d'extrémité REST, comme par exemple service:jmx:rest://localhost:9443/IBMJMXConnectorREST.
- Pour exécuter l'application client sur une machine hôte différente, configurez le point d'extrémité HTTP du serveur pour accepter les connexions en provenance des hôtes distants. Par exemple, utilisez un astérisque (*) comme attribut hôte du point d'extrémité defaultHttpEndpoint.
<httpEndpoint id="defaultHttpEndpoint" httpPort="9080" httpsPort="9443" host="*" />
- Facultatif : Désactivez la vérification du nom d'hôte pour les certificats SSL (Secure Sockets Layer). Les certificats qui sont installés avec Liberty peuvent ne pas contenir le nom d'hôte de l'endroit où le serveur s'exécute. Si vous souhaitez désactiver la vérification de nom d'hôte
des certificats SSL, vous pouvez définir la propriété système com.ibm.ws.jmx.connector.client.disableURLHostnameVerification sur true, ce qui désactive
la vérification de nom d'hôte pour toutes les connexions. Pour désactiver la vérification du nom d'hôte sur une base de connexion
individuelle, transmettez la propriété en tant que nouvel élément environment lorsque vous créez la connexion 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" }); ...
- Facultatif : Configurez les paramètres de connecteur REST JMX à l'aide de la mappe d'environnement.
... 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); ...
- Facultatif : Le connecteur REST Liberty permet d'utiliser une fabrique de sockets SSL personnalisés spécifique pour obtenir des sockets. Si l'exception javax.net.ssl.SSLHandshakeException:
com.ibm.jsse2.util.j: PKIX path building failed: java.security.cert.CertPathBuilderException: unable to find valid certification
path to requested target s'affiche, vous pouvez créer votre propre SSLContext à partir de vos propres magasins de clés puis utiliser le SocketFactory de ce contexte avec le
connecteur 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<String, Object> environment = new HashMap<String, Object>(); 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);
Que faire ensuite
Rubrique parent : Configuration d'une connexion JMX sécurisée à Liberty
Tâches associées:

Nom du fichier : twlp_dev_jmxclient.html