JMX-Java-Client für Liberty entwickeln
Sie können eine JMX-Clientanwendung (Java™ Management Extensions) entwickeln, um auf den gesicherten REST-Connector von Liberty zuzugreifen.
Informationen zu diesem Vorgang
Wenn Sie eine ferne JMX-Clientanwendung verwenden, können Sie Liberty mit JMX-Programmierung verwalten.
Vorgehensweise
- Beginnen Sie mit dem folgenden Beispielanwendungscode. Fügen Sie die Clientbibliothek des Liberty-REST-Connectors zum Anwendungsklassenpfad
liberty_home/clients/restConnector.jar hinzu.
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>); // Wenn trustStore nicht den Standardtyp jks hat, legen Sie den // Typ mit der folgenden Zeile fest. 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) { ... } } }
- Wenn der Server den Server-Keystore für eine nicht für die Produktion verwendete Umgebung generiert, verwenden Sie den Keystore als Truststore für den Anwendungsclient. Der Keystore, den der Server für eine nicht für die Produktion verwendete Umgebung generiert, enthält das Clientzertifikat. Die Truststore-Datei des Anwendungsclients ist standardmäßig ${server.output.dir}/resources/security/key.jks.
- Definieren Sie die Eigenschaft javax.net.ssl.trustStoreType. Wenn Sie den Standard-JKS-Typ (Java Keystore) verwenden, entfernen Sie diese Zeile.
- Ersetzen Sie die Benutzer-ID- und Kennwortwerte für die Eigenschaft JMXConnector.CREDENTIALS. Verwende Sie die Administrator-ID und das Kennwort für den Server.
- Definieren Sie den Hostnamen und die Portnummer für den Server im JMXServiceURL-Konstruktor mit einer der folgenden Methoden:
- HTTPS-Portnummer verwenden. Die Standardnummer ist 9443.
- Inhalt der Datei ${server.output.dir}/logs/state/com.ibm.ws.jmx.rest.address als JMXServiceURLconstructor-Parameter verwenden. Das Programm schreibt diese Datei, wenn ein Server mit dem Feature "restConnector-2.0" gestartet wird, das konfiguriert ist und den REST-Endpunkt enthält, wie z. B. service:jmx:rest://localhost:9443/IBMJMXConnectorREST.
- Wenn Sie die Clientanwendung auf einer anderen Hostmaschine ausführen möchten, konfigurieren Sie den HTTP-Endpunkt des Servers so, dass Verbindungen von fernen Hosts akzeptiert werden. Verwenden Sie beispielsweise einen Stern (*) als Hostattribute für den defaultHttpEndpoint-Endpunkt.
<httpEndpoint id="defaultHttpEndpoint" httpPort="9080" httpsPort="9443" host="*" />
- Optional: Inaktivieren Sie die Hostnamensprüfung für SSL-Zertifikate (Secure Sockets Layer).
Die mit Liberty installierten Zertifikate enthalten möglicherweise nicht den Namen des Hosts,
auf dem der Server ausgeführt wird. Wenn Sie die Überprüfung des Hostnamens für
SSL-Zertifikate inaktivieren möchten, können Sie die Systemeigenschaft
com.ibm.ws.jmx.connector.client.disableURLHostnameVerification auf true setzen. Damit
wird die Überprüfung des Hostnamens für alle Verbindungen inaktiviert.
Zum Inaktivieren der Hostnamensprüfung auf Verbindungsbasis übergeben Sie die Eigenschaft als neue
environment, wenn Sie die JMS-Verbindung erstellen:
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" }); ...
- Optional: Konfigurieren Sie die Einstellungen des JMX-REST-Connectos mit der Umgebungsmap.
... 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); ...
- Optional: Der Liberty-REST-Connector ermöglicht Ihnen, eine bestimmte angepasste SSL-Socket-Factory zum Anfordern von Sockets zu verwenden. Wenn
die Ausnahme 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 angezeigt wird, können Sie Ihren eigenen
SSLContext aus Ihren eigenen Keystores
erstellen und dann die SocketFactory aus diesem Kontext für den REST-Connector verwenden.
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);
Nächste Schritte
Übergeordnetes Thema: Sichere JMX-Verbindung zu Liberty konfigurieren
Zugehörige Tasks:

Dateiname: twlp_dev_jmxclient.html