Introdução básica ao JMX

Introdução básica ao JMX

1. Introdução

OJava Management Extensions (JMX) framework foi introduzido no Java 1.5 e encontrou ampla aceitação na comunidade de desenvolvedores Java desde seu início.

Ele fornece uma infraestrutura facilmente configurável, escalável, confiável e mais ou menos amigável para gerenciar aplicativos Java local ou remotamente. A estrutura introduz o conceito de MBeans para gerenciamento de aplicativos em tempo real.

Este artigo é um guia passo a passo para iniciantes para criar e configurar um MBean básico e gerenciá-lo por meio do JConsole.

2. Arquitetura JMX

A arquitetura JMX segue uma abordagem em três camadas:

  1. Instrumentation layer: MBeans registrados com o agente JMX por meio do qual os recursos são gerenciados

  2. JMX agent layer: o componente principal (MbeanServer) que mantém o registro dos MBeans gerenciados e fornece uma interface para acessá-los

  3. Remote management layer: geralmente ferramenta do lado do cliente como JConsole

3. Criando uma classe MBean

Ao criar MBeans, existe um padrão de design específico ao qual devemos estar em conformidade. A classe MBean do modelo DEVE implementar uma interface com o seguinte nome:*“model class name” plus MBean*.

Então, vamos definir nossa interface MBean e a classe que a implementa:

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;
    }
}

A classeGame substitui um métodoplayFootball() da interface pai. Além disso, a classe tem uma variável de membroplayerNamee getter / setter para ela.

Observe que getter / setter também são declarados na interface pai.

4. Instrumentando com o Agente JMX

Os agentes JMX são as entidades em execução local ou remotamente que fornecem acesso de gerenciamento aos MBeans registrados com eles.

Vamos usarPlatformMbeanServer - o componente principal do agente JMX e registrar oGame MBean com ele.

Usaremos outra entidade -ObjectName - para registrar a instância da classeGame com oPlatformMbeanServer; esta é uma string que consiste em duas partes:

  • domain: pode ser uma string arbitrária, mas de acordo com as convenções de nomenclatura MBean, deve ter o nome do pacote Java (evita conflitos de nomenclatura)

  • key: uma lista de pares “key=value” separados por uma vírgula

Neste exemplo, aqui está nossoObjectName:“com.baledung.tutorial:type=basic,name=game”. __

ObteremosMBeanServer da classe de fábricajava.lang.management.ManagementFactory:

MBeanServer server = ManagementFactory.getPlatformMBeanServer();

E vamos registrar a classe MBean do modelo usando seuObjectName personalizado:

ObjectName objectName = null;
try {
    objectName = new ObjectName("com.example.tutorial:type=basic,name=game");
} catch (MalformedObjectNameException e) {
    e.printStackTrace();
}

Finalmente, apenas para poder testá-lo - adicionaremos um loopwhile para evitar que o aplicativo seja encerrado antes de podermos acessar o MBean através do JConsole:

while (true) {
}

5. Acessando o MBean

5.1. Conectando do lado do cliente

  1. Inicie o aplicativo no Eclipse

  2. Inicie o Jconsole (localizado na pasta bin do diretório de instalação do JDK da sua máquina)

  3. Conexão → nova conexão → selecione o processo Java local deste tutorial → Conectar → Aviso de conexão SSl insegura → Continuar com conexão insegura

  4. Após a conexão ser estabelecida, clique na guia MBeans no canto superior direito do painel Exibir

  5. A lista de MBeans registrados aparecerá na coluna esquerda

  6. Clique em com.example.tutorial → básico → jogo

  7. No jogo, haverá duas linhas, uma para atributos e operações

Aqui está uma rápida olhada na parte JConsole do processo:

image

5.2. Gerenciando o MBean

Os princípios básicos do gerenciamento do MBean são simples:

  • Os atributos podem ser lidos ou gravados

  • Métodos podem ser chamados e argumentos podem ser fornecidos a eles ou valores retornados a partir deles

Vamos ver o que isso significa para oGame MBean na prática:

  • attribute: digite um novo valor para o atributoplayerName - por exemplo “Messi” e clique emRefresh button

O seguinte log aparecerá no console do Eclipse:

Defina playerName para valorizar Messi

  • operations: digite um valor para o argumento String do métodoplayFootBall() - por exemplo “Barcelona” e clique no botão do método. Umwindow alert for successful invocation aparecerá

O seguinte log aparecerá no console do eclipse:

Messi jogando futebol pelo Barcelona

6. Conclusão

Este tutorial abordou o básico da configuração de um aplicativo ativado por JMX usando o MBeans. Além disso, discutiu sobre o uso de uma ferramenta típica do lado do cliente, como o JConsole, para gerenciar o MBean instrumentado.

O domínio da tecnologia JMX é muito amplo em escopo e alcance. Este tutorial pode ser considerado um passo para iniciantes nesse sentido.

O código-fonte deste tutorial pode ser encontradoover on Github.