Liberty の JMX Java クライアントの開発
Liberty プロファイルの保護された REST コネクターにアクセスする Java™ Management Extensions (JMX) クライアント・アプリケーションを開発することができます。
このタスクについて
JMX リモート・クライアント・アプリケーションを使用して、JMX プログラミングを使用して Liberty プロファイルを管理できます。
手順
- 以下のサンプル・アプリケーション・コードから開始します。Liberty REST コネクター・クライアント・ライブラリーをアプリケーションのクラスパス 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) { ... } } }
- サーバーが実稼働環境以外の環境のサーバー鍵ストアを生成する場合、その鍵ストアをアプリケーション・クライアントのトラストストアとして使用します。 サーバーが実稼働環境以外の環境用に生成する鍵ストアには、クライアントの証明書が含まれています。デフォルトでは、アプリケーション・クライアントのトラストストア・ファイルは ${server.output.dir}/resources/security/key.jks にあります。
- javax.net.ssl.trustStoreType プロパティーを設定します。デフォルトの Java 鍵ストア (JKS) タイプを使用する場合は、この行を削除してください。
- JMXConnector.CREDENTIALS プロパティーの userid と password の値を置換します。管理者ユーザーの ID とパスワードをサーバーに使用してください。
- 以下のいずれかの方法で、JMXServiceURL コンストラクター内にサーバーのホスト名とポート番号を設定します。
- HTTPS ポート番号を使用します。デフォルトの数値は 9443 です。
- ファイル ${server.output.dir}/logs/state/com.ibm.ws.jmx.rest.address のコンテンツを JMXServiceURLconstructor パラメーターとして使用します。構成済みで REST エンドポイント (service:jmx:rest://localhost:9443/IBMJMXConnectorREST など) を含む restConnector-2.0 フィーチャーでサーバーが始動したとき、プログラムはこのファイルを書き込みます。
- 異なるホスト・マシンでクライアント・アプリケーションを実行する場合、リモート・ホストからの接続を受け入れるようにサーバー HTTP エンドポイントを構成します。 例えば、アスタリスク (*) を defaultHttpEndpoint エンドポイントのホスト属性として使用します。
<httpEndpoint id="defaultHttpEndpoint" httpPort="9080" httpsPort="9443" host="*" />
- オプション: Secure Sockets Layer (SSL) 証明書のホスト名検証を使用不可にします。Liberty と一緒にインストールされる証明書には、サーバーの実行場所であるホスト名が含まれていないことがあります。SSL 証明書のホスト名検証を使用不可にする場合は、システム・プロパティー com.ibm.ws.jmx.connector.client.disableURLHostnameVerification を true に設定できます。これにより、すべての接続についてホスト名検証が使用不可になります。個別の接続についてホスト名検証を使用不可にする場合は、以下のように、JMX 接続の作成時に新規 environment としてプロパティーを渡します。
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" }); ...
- オプション: 環境マップを使用することで、JMX REST コネクター設定を構成します。
... 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); ...
- オプション: Liberty REST コネクターを使用することで、特定のカスタム SSL ソケット・ファクトリーを使用してソケットを取得できるようになります。
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 例外が表示されたら、自身の KeyStore から独自の SSLContext を作成し、そのコンテキストの SocketFactory を 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);
次のタスク
親トピック: Liberty へのセキュア JMX 接続の構成
関連タスク:

ファイル名: twlp_dev_jmxclient.html