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

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

Open Liberty Liberty 用の JMX Java クライアントの開発に関する最新資料は、 Open Liberty Web サイトから入手できます。

このタスクについて

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

この構成では、アクセスを必要とするすべてのユーザーに対して、 Liberty で管理ロール・マッピングを実行する必要があります。

ユーザー認証がシングル・サインオン・テクノロジー (例えば、SAML、OpenID Connect、JWT など) を使用して実行される場合、ユーザーは構成済みのユーザー・レジストリーに存在している必要があります。 構成済みのユーザー・レジストリーがない場合、または、ユーザーが構成済みのユーザー・レジストリーに存在しない場合、REST コネクターのクライアント・サイドを使用できません。 REST コネクターのクライアント・サイドは、wlp/clients/restConnector.jar ファイル内にあります。 代わりに、HTTPS 呼び出しを介して直接 REST コネクターにアクセスすることもできます。

手順

  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.p12 です。

    19.0.0.2 以前の場合、デフォルトでは、アプリケーション・クライアントのトラストストア・ファイルは ${server.output.dir}/resources/security/key.jks です。

  3. javax.net.ssl.trustStoreType プロパティーを設定します。

    デフォルトの key.p12 鍵ストア・ファイルを使用する場合、javax.net.ssl.trustStoreType プロパティーを PKCS12 に設定します。 デフォルトの鍵ストア・ファイルを使用しない場合は、プロパティーに適切な鍵ストア・タイプを設定してください。

    バージョン 19.0.0.2 以前では、デフォルトの Java 鍵ストア (JKS) タイプを使用する場合、この行を削除してプロパティーを設定します。

  4. JMXConnector.CREDENTIALS プロパティーの userid および password の値を置き換えます。 管理者ユーザーの 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 例外が表示された場合は、独自の鍵ストアから独自の 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 MBeans にアクセスするには、 MBean 属性および操作へのアクセスの例を参照してください。