Liberty의 JMX Java 클라이언트 개발

Liberty의 보안 REST 커넥터에 액세스하기 위한 JMX(Java™ Management Extensions) 클라이언트 애플리케이션을 개발할 수 있습니다.

이 태스크 정보

JMX 원격 클라이언트 애플리케이션을 사용하면 JMX 프로그래밍을 통해 Liberty를 관리할 수 있습니다.

프로시저

  1. 다음 샘플 애플리케이션 코드를 사용하여 시작하십시오. 애플리케이션 클래스 경로 liberty_home/clients/restConnector.jarLiberty REST 커넥터 클라이언트 라이브러리를 추가하십시오.
    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 매개변수로 사용하십시오. 구성된 restConnector-2.0 기능으로 서버를 시작하고 해당 서버에 REST 엔드포인트(예: service:jmx:rest://localhost:9443/IBMJMXConnectorREST)가 포함되어 있는 경우 프로그램에서 이 파일을 작성합니다.
  6. 다른 호스트 시스템에서 클라이언트 애플리케이션을 실행하려면 원격 호스트로부터의 연결을 승인하도록 서버 HTTP 엔드포인트를 구성하십시오. 예를 들어 defaultHttpEndpoint 엔드포인트의 호스트 속성으로 별표(*)를 사용하십시오.
    <httpEndpoint id="defaultHttpEndpoint"
         httpPort="9080"
         httpsPort="9443"
         host="*" />
  7. 옵션: SSL(Secure Sockets Layer) 인증서의 호스트 이름 확인 기능을 사용 안함으로 설정하십시오. 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를 작성한 후 REST 커넥터와 함께 그 컨텍스트에서 SocketFactory를 사용할 수 있습니다.
    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 속성 및 조작 액세스 예제를 참조하십시오.

주제의 유형을 표시하는 아이콘 태스크 주제

파일 이름: twlp_dev_jmxclient.html