Liberty の JMX Java クライアントの開発

Liberty プロファイルの保護された REST コネクターにアクセスする Java™ Management Extensions (JMX) クライアント・アプリケーションを開発することができます。

このタスクについて

JMX リモート・クライアント・アプリケーションを使用して、JMX プログラミングを使用して Liberty プロファイルを管理できます。

手順

  1. 以下のサンプル・アプリケーション・コードから開始します。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) {
             ...
        }
      }
    }
  2. サーバーが実稼働環境以外の環境のサーバー鍵ストアを生成する場合、その鍵ストアをアプリケーション・クライアントのトラストストアとして使用します。 サーバーが実稼働環境以外の環境用に生成する鍵ストアには、クライアントの証明書が含まれています。デフォルトでは、アプリケーション・クライアントのトラストストア・ファイルは ${server.output.dir}/resources/security/key.jks にあります。
  3. javax.net.ssl.trustStoreType プロパティーを設定します。デフォルトの Java 鍵ストア (JKS) タイプを使用する場合は、この行を削除してください。
  4. JMXConnector.CREDENTIALS プロパティーの useridpassword の値を置換します。管理者ユーザーの ID とパスワードをサーバーに使用してください。
  5. 以下のいずれかの方法で、JMXServiceURL コンストラクター内にサーバーのホスト名とポート番号を設定します。
    1. HTTPS ポート番号を使用します。デフォルトの数値は 9443 です。
    2. ファイル ${server.output.dir}/logs/state/com.ibm.ws.jmx.rest.address のコンテンツを JMXServiceURLconstructor パラメーターとして使用します。構成済みで REST エンドポイント (service:jmx:rest://localhost:9443/IBMJMXConnectorREST など) を含む restConnector-2.0 フィーチャーでサーバーが始動したとき、プログラムはこのファイルを書き込みます。
  6. 異なるホスト・マシンでクライアント・アプリケーションを実行する場合、リモート・ホストからの接続を受け入れるようにサーバー HTTP エンドポイントを構成します。 例えば、アスタリスク (*) を defaultHttpEndpoint エンドポイントのホスト属性として使用します。
    <httpEndpoint id="defaultHttpEndpoint"
         httpPort="9080"
         httpsPort="9443"
         host="*" />
  7. オプション: Secure Sockets Layer (SSL) 証明書のホスト名検証を使用不可にします。Liberty と一緒にインストールされる証明書には、サーバーの実行場所であるホスト名が含まれていないことがあります。SSL 証明書のホスト名検証を使用不可にする場合は、システム・プロパティー com.ibm.ws.jmx.connector.client.disableURLHostnameVerificationtrue に設定できます。これにより、すべての接続についてホスト名検証が使用不可になります。個別の接続についてホスト名検証を使用不可にする場合は、以下のように、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" });
    ...
  8. オプション: 環境マップを使用することで、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);
    ...
  9. オプション: 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);

次のタスク

アプリケーション内の JMX MBean にアクセスするには、MBean 属性および MBean 操作にアクセスする例を参照してください。

トピックのタイプを示すアイコン タスク・トピック

ファイル名: twlp_dev_jmxclient.html