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:
-
Instrumentation layer: MBeans registrados com o agente JMX por meio do qual os recursos são gerenciados
-
JMX agent layer: o componente principal (MbeanServer) que mantém o registro dos MBeans gerenciados e fornece uma interface para acessá-los
-
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
-
Inicie o aplicativo no Eclipse
-
Inicie o Jconsole (localizado na pasta bin do diretório de instalação do JDK da sua máquina)
-
Conexão → nova conexão → selecione o processo Java local deste tutorial → Conectar → Aviso de conexão SSl insegura → Continuar com conexão insegura
-
Após a conexão ser estabelecida, clique na guia MBeans no canto superior direito do painel Exibir
-
A lista de MBeans registrados aparecerá na coluna esquerda
-
Clique em com.example.tutorial → básico → jogo
-
No jogo, haverá duas linhas, uma para atributos e operações
Aqui está uma rápida olhada na parte JConsole do processo:
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.