JMX 기본 소개

1. 소개

하는 JMX (Java Management Extensions) 프레임 워크는 자바 1.5에 도입되었고, 그것의 처음부터 자바 개발자 커뮤니티의 광범위한 수용을 발견했다.

Java 애플리케이션을 로컬 또는 원격으로 관리하기 위해 쉽게 구성 가능하고 확장 가능하며 안정적이고 다소 친숙한 인프라를 제공합니다. 이 프레임 워크는 애플리케이션의 실시간 관리를위한 MBean의 개념을 도입합니다.

이 기사는 기본 MBean을 생성 및 설정하고 JConsole을 통해 관리하는 초보자를위한 단계별 가이드입니다.

2. JMX 아키텍처

JMX 아키텍처는 3 계층 접근 방식을 따릅니다.

  1. 계측 계층 : 자원이 관리되는 JMX 에이전트에 등록 된 MBean
  2. JMX 에이전트 계층 : 관리되는 MBean의 레지스트리를 유지하고 이에 액세스 할 수있는 인터페이스를 제공하는 핵심 구성 요소 (MbeanServer)
  3. 원격 관리 계층 : 일반적으로 JConsole과 같은 클라이언트 측 도구

3. MBean 클래스 생성

MBean을 만드는 동안 우리가 따라야 할 특정 디자인 패턴이 있습니다. 모델 MBean 클래스는 "모델 클래스 이름"과 MBean 이름으로 인터페이스를 구현해야합니다 .

따라서 MBean 인터페이스와이를 구현하는 클래스를 정의 해 보겠습니다.

public interface GameMBean { public void playFootball(String clubName); public String getPlayerName(); public void setPlayerName(String playerName); } public class Game implements GameMBean { private String playerName; @Override public void playFootball(String clubName) { System.out.println( this.playerName + " playing football for " + clubName); } @Override public String getPlayerName() { System.out.println("Return playerName " + this.playerName); return playerName; } @Override public void setPlayerName(String playerName) { System.out.println("Set playerName to value " + playerName); this.playerName = playerName; } }

게임 클래스는 메소드 오버라이드 (override) playFootball () 부모 인터페이스를. 이 외에도 클래스에는 멤버 변수 playerName 및 getter / setter가 있습니다.

getter / setter는 부모 인터페이스에서도 선언됩니다.

4. JMX 에이전트를 사용한 계측

JMX 에이전트는 등록 된 MBean에 대한 관리 액세스를 제공하는 로컬 또는 원격으로 실행되는 엔티티입니다.

JMX 에이전트의 핵심 구성 요소 인 PlatformMbeanServer를 사용 하여 Game MBean을 등록 해 보겠습니다 .

다른 엔티티 인 ObjectNam e 를 사용하여 PlatformMbeanServer에 Game 클래스 인스턴스 를 등록합니다 . 이것은 두 부분으로 구성된 문자열입니다.

  • domain : 임의의 문자열 일 수 있지만 MBean 명명 규칙에 따라 Java 패키지 이름을 가져야합니다 (이름 충돌 방지).
  • key : 쉼표로 구분 된 " key = value "쌍 의 목록

이 예에서는 “com.baledung.tutorial : type = basic, name = game”을 사용합니다.

팩토리 클래스 java.lang.management.ManagementFactory 에서 MBeanServer 를 가져옵니다 .

그런 다음 생성 된 ObjectName을 사용하여 모델 MBean을 등록합니다 .

try { ObjectName objectName = new ObjectName("com.baeldung.tutorial:type=basic,name=game"); MBeanServer server = ManagementFactory.getPlatformMBeanServer(); server.registerMBean(new Game(), objectName); } catch (MalformedObjectNameException | InstanceAlreadyExistsException | MBeanRegistrationException | NotCompliantMBeanException e) { // handle exceptions }

마지막으로 테스트 할 수 있도록 하기 위해 JConsole을 통해 MBean에 액세스하기 전에 애플리케이션이 종료되는 것을 방지 하는 while 루프를 추가합니다 .

while (true) { }

5. MBean 액세스

5.1. 클라이언트 측에서 연결

  1. Eclipse에서 애플리케이션 시작
  2. Jconsole을 시작합니다 (컴퓨터의 JDK 설치 디렉토리의 bin 폴더에 있음).
  3. 연결-> 새 연결->이 자습서의 로컬 Java 프로세스 선택-> 연결-> 안전하지 않은 SSl 연결 경고-> 안전하지 않은 연결 계속
  4. 연결이 설정되면보기 창의 오른쪽 상단 MBeans 탭을 클릭합니다.
  5. 등록 된 MBean 목록이 왼쪽 열에 나타납니다.
  6. com.baeldung.tutorial-> 기본-> 게임 클릭
  7. 게임에는 속성 및 작업에 대해 각각 하나씩 두 개의 행이 있습니다.

다음은 프로세스의 JConsole 부분에 대한 간략한 설명입니다.

5.2. MBean 관리

MBean 관리의 기본은 간단합니다.

  • 속성은 읽거나 쓸 수 있습니다.
  • 메소드를 호출 할 수 있으며 인수를 제공하거나 메소드에서 리턴 된 값을 제공 할 수 있습니다.

이것이 실제로 Game MBean에 어떤 의미인지 살펴 보겠습니다 .

  • attribute : playerName 속성에 대한 새 값 (예 : "Messi")을 입력하고 새로 고침 버튼을 클릭 합니다.

Eclipse 콘솔에 다음 로그가 나타납니다.

playerName을 Messi 값으로 설정

  • operations : playFootBall () 메서드의 문자열 인수에 대한 값을 입력합니다 ( 예 : "Barcelona"). 메서드 버튼을 클릭합니다. 성공적인 호출을위한 윈도우 경고가 나타납니다

Eclipse 콘솔에 다음 로그가 나타납니다.

바르셀로나를 위해 축구를하는 메시

6. 결론

이 튜토리얼에서는 MBean을 사용하여 JMX 지원 애플리케이션을 설정하는 기본 사항을 다뤘습니다. 또한 인스트루먼트 된 MBean을 관리하기 위해 JConsole과 같은 일반적인 클라이언트 측 도구를 사용하는 방법에 대해 논의했습니다.

JMX 기술의 영역은 범위와 범위가 매우 넓습니다. 이 튜토리얼은이를 향한 초보자의 단계로 간주 될 수 있습니다.

이 튜토리얼의 소스 코드는 Github에서 찾을 수 있습니다.