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
- Entwickeln Sie einen JMX-Beispielclient. Der REST-Connector
unterstützt die JMX-Standard-API. Bei einem gestarteten
Liberty-Server, in dem das Feature restConnector-1.0 konfiguriert ist, kann der Inhalt von
${server.output.dir}/logs/state/com.ibm.ws.jmx.rest.address zum Instanziieren eines neuen
JMXServiceURL-Objekts verwendet werden.
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-Position>); System.setProperty("javax.net.ssl.trustStorePassword", <Truststore-Kennwort>); // 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[] { "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) { ... } } }
- Optional: Inaktivieren Sie die Überprüfung des Hostnamens für
SSL-Zertifikate. 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[] { "bob", "bobpassword" }); ...
- 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[] { "admin", "password" }); JMXServiceURL url = new JMXServiceURL("REST", "myhost", 9443, "/IBMJMXConnectorREST"); jmxConn = JMXConnectorFactory.connect(url, environment);
Übergeordnetes Thema: Sichere JMX-Verbindung zu Liberty konfigurieren
Zugehörige Tasks:


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