blob: 7e85cd0db328444a333915330dd2db83dcad222f [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
Copyright (c) 2009, 2010, 2011, Oracle and/or its affiliates. All rights reserved.
-->
<html>
<head>
<title>Desenvolvendo um Gerenciador do Java Management Extensions (JMX) e Conectando-se a um Agente JMX Remoto</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
<meta name="description" content="Remote manager tutorial for NetBeans JMX Wizard module">
<link rel="stylesheet" href="../../../netbeans.css">
<meta name="TOPIC" content="ADVANCED">
<meta name="TYPE" content="ARTICLE">
<meta name="AUDIENCE" content="NBUSER">
<meta name="author" content="Jean-Francois DENISE">
<meta name="author" content="Joel FERAUD">
<meta name="KEYWORDS" content="NETBEANS, TUTORIAL, GUIDE, USER, DOCUMENTATION, JMX">
<meta name="description" content="A tutorial on how to implement and use a JMX manager and JMX agent in NetBeans IDE"/>
<link rel="stylesheet" type="text/css" href="../../../lytebox.css" media="screen">
<script type="text/javascript" src="../../../images_www/js/lytebox-compressed.js"></script>
</head>
<body>
<h1>Desenvolvendo um Gerenciador do Java Management Extensions (JMX) e Conectando-se a um Agente JMX Remoto</h1>
<p class="align-center"><b>Duração esperada: 30 minutos</b></p>
<p>O Módulo do Assistente JMX do NetBeans integra a tecnologia do JMX correta para seu workflow no NetBeans IDE. Este módulo permite que você desenvolva aplicações de gerenciamento, adicione o gerenciamento às aplicações existentes, desenvolva aplicações do gerenciador e monitore o estado da Máquina Virtual.
</p>
<p>Este tutorial mostra como executar as seguintes ações:</p>
<ol>
<li>Inicie um agente JMX para torná-lo acessível de um gerenciador JMX remoto.</li>
<li>Crie um gerenciador JMX.</li>
<li>Execute o gerenciador.</li>
<li>Atualize o gerenciador para adicionar sua própria lógica de gerenciamento. </li>
</ol>
<h3>Exercícios do Tutorial</h3>
<img alt="O conteúdo desta página se aplica ao NetBeans IDE 7.2, 7.3, 7.4 e 8.0" class="stamp" src="../../../images_www/articles/73/netbeans-stamp-80-74-73.png" title="O conteúdo desta página se aplica ao NetBeans IDE 7.2, 7.3, 7.4 e 8.0">
<ul>
<li><a href="#Exercise_1">Criando o Projeto de Anagrama de Amostra de Gerenciamento</a></li>
<li><a href="#Exercise_2">Executando o Agente</a></li>
<li><a href="#Exercise_3">Criando o Projeto do Gerenciador</a>
<ul>
<li><a href="#Exercise_3">Criando o Projeto</a></li>
<li><a href="#Exercise_4">Criando a Classe do Gerenciador Executável</a></li>
</ul>
</li>
<li><a href="#Exercise_5">Executando o Gerenciador</a></li>
</ul>
<h3>Pré-requisitos</h3>
<p>Este tutorial pressupõe que você tenha algum conhecimento básico das tecnologias a seguir ou alguma experiência de programação com elas: </p>
<ul>
<li>Tecnologia JMX: <a href="http://download.oracle.com/javase/6/docs/technotes/guides/jmx/index.html"> Documentação on-line do JMX</a>
</li>
<li>Tecnologia Java: <a href="http://www.oracle.com/technetwork/java/javase/tech/index.html"> Visão Geral das Tecnologias Java SE</a>
</li>
<li>NetBeans IDE</li>
</ul>
<p>Você também se beneficiará tendo conhecimento sobre<a href="http://download.oracle.com/javase/6/docs/technotes/guides/management/index.html"> Monitoramento e Gerenciamento da Plataforma Java</a></p>
<h3>Software Necessário para o Tutorial</h3>
<p>Para este tutorial, você precisa ter instalado no computador os seguintes softwares:</p>
<table>
<tbody>
<tr>
<th class="tblheader" scope="col">Software ou Recurso</th>
<th class="tblheader" scope="col">Versão Necessária</th>
</tr>
<tr>
<td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">NetBeans IDE</a></td>
<td class="tbltd1">Versão Java 7.2, 7.3, 7.4, 8.0</td>
</tr>
<tr>
<td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">JDK (Java Development Kit)</a></td>
<td class="tbltd1">versão 7 ou 8</td>
</tr>
<tr>
<td class="tbltd1">Plug-in do JMX</td>
<td class="tbltd1">Disponível na Central de Atualização do NetBeans</td>
</tr>
<tr>
<td class="tbltd1">Plug-in de JConsole</td>
<td class="tbltd1">Disponível na Central de Atualização do NetBeans</td>
</tr>
</tbody>
</table>
<p>Para instalar os plug-ins <strong>JMX</strong> e <strong>JConsole</strong>, selecione Ferramentas > Plug-ins e faça download do módulo do Centro de Atualização do NetBeans.</p>
<h3>Recursos</h3>
<ul>
<li>Conteúdo de ajuda do Netbeans (Ajuda > Conteúdo de Ajuda > JMX). Esta ajuda também fica disponível nos Assistentes.</li>
</ul>
<a name="Exercise_1"></a>
<h2>Criando o Projeto de Anagrama de Amostra de Gerenciamento</h2>
<p>O objetivo deste exercício é criar um agente JMX para o qual a aplicação do gerenciador pode estabelecer conexão. O plug-in do JMX inclui um projeto Java de amostra do agente JMX. Neste exercício você criará este projeto de amostra, em vez de gravar um agente JMX desde o começo.
</p>
<ol>
<li>Escolha Arquivo > Novo Projeto.</li>
<li>Nestas Amostras, selecione a categoria JMX.</li>
<li>Selecione o Jogo de Anagramas Gerenciado com o projeto JMX. <br /> <img alt="tela do Jogo de Anagramas Gerenciado com o projeto JMX no assistente Novo Projeto" class="margin-around b-all" src="../../../images_www/articles/74/java/jmx/jmx-newproject.png" title="Jogo de Anagramas Gerenciado com o JMX no assistente Novo Projeto" /></li>
<li>Clique em Próximo. Não é necessário alterar o nome do projeto default ou os valores do local. Confirme se a opção Definir como Projeto Principal foi selecionada e clique em Finalizar.</li>
</ol>
<a name="Exercise_2"></a>
<h2>Executando o Agente</h2>
<p>A meta deste exercício é iniciar a aplicação Java com o gerenciamento remoto do JMX ativado. O gerenciamento remoto permite que as aplicações clientes (gerenciadores do JMX) estabeleçam conexão à aplicação (agente JMX) e visualize as informações de gerenciamento e monitoramento.</p>
<p class="notes"><strong>Observação.</strong> Qualquer aplicação em execução com base em JDK 1.5, JDK 1.6 ou JDK 1.7 é um agente JMX para o qual você pode ativar o gerenciamento remoto.</p>
<ol>
<li>Confirme se o projeto JMXAnagramGame está selecionado e definido como o projeto principal. </li>
<li>Clique com o botão direito do mouse no projeto JMXAnagramGame e selecione Propriedades.</li>
<li>Selecione a categoria <strong>Monitoramento e Gerenciamento</strong> na caixa de diálogo Propriedades do Projeto.</li>
<li>Desmarque <strong>Anexar JConsole ao Projeto</strong>.</li>
<li>Selecione <strong>Ativar Acesso Remoto do RMI</strong>. Clique em OK.<br> <img alt="Configurar Agente" class="margin-around b-all" src="../../../images_www/articles/74/java/jmx/jmx-properties1.png" title="Categoria Monitoramento e Gerenciamento na caixa de diálogo Propriedades do projeto">
<p>Você pode fornecer uma porta na qual o agente aguarda pelas solicitações JMX de entrada. Neste tutorial, mantemos a porta default (1099). Se você forneceu outro número de porta, terá que fazer as alterações apropriadas em cada parte deste tutorial. Além disso, neste tutorial, não especificamos um arquivo de propriedades. (Para suas próprias aplicações, fornecemos um assistente para ajudá-lo a criar um arquivo de propriedades de gerenciamento).</p>
</li>
<li>Escolha Depurar > Executar Projeto Principal com Monitoramento e Gerenciamento do menu principal para acionar a aplicação Jogo de Anagramas.
<p>Se preferir, clique no botão Executar Projeto Principal com Monitoramento e Gerenciamento na barra de ferramentas (&nbsp; <img alt="Botão Executar Projeto Principal com Monitoramento e Gerenciamento na barra de ferramentas" src="../../../images_www/articles/74/java/jmx/run-project24.png" title="Botão Executar Projeto Principal com Monitoramento e Gerenciamento" />).</p>
<p>Quando você executar a aplicação, a janela Jogo de Anagramas será aberta. A JVM está fazendo listening do acesso de RM na porta 1099 de host local. O agente JMX está em execução e aguardando o gerenciador para enviar solicitações de gerenciamento.</p>
<img alt="Jogo de Anagramas" class="margin-around b-all" src="../../../images_www/articles/74/java/jmx/jmx-anagram.png" title="Jogo de Anagramas">
<p>Você pode minimizar a janela Anagramas, mas não pode sair da aplicação.</p>
</li>
</ol>
<a name="Exercise_3"></a>
<h2>Criando o Projeto do Gerenciador</h2>
<p>Neste exercício, você criará um projeto de aplicação Java chamado <tt>JMXAnagramManager</tt> e, em seguida, usará um assistente para criar uma classe de gerenciador executável.</p>
<div class="indent">
<h3>Criando o Projeto</h3>
<ol>
<li>Selecione Arquivo > Novo Projeto (Ctrl-Shift-N).</li>
<li>Escolha Aplicação Java na categoria Java. Clique em Próximo.<br> <img alt="tela do assistente Novo Projeto Java" class="margin-around b-all" src="../../../images_www/articles/74/java/jmx/jmx-newjavaproject.png" title="Assistente Novo Projeto Java"></li>
<li>Digite <strong>JMXAnagramManager</strong> como Nome do Projeto.</li>
<li>Selecione Definir como Projeto Principal (se não estiver selecionado) e desmarque a opção Criar Classe Principal. Clique em Finalizar.
<p class="notes"><strong>Observação.</strong> Você usará o assistente Gerenciador JMX para gerar a classe executável principal no próximo exercício. </p>
</li>
</ol>
<p>Quando clicar em Finalizar, o novo projeto será adicionado à árvore Projetos. Observe que um projeto do gerenciador JMX é como qualquer outro projeto de aplicação Java. </p>
<a name="Exercise_4"></a>
<h3>Criando a Classe do Gerenciador Executável</h3>
<p>Neste exercício, você aprenderá a usar o assistente Gerenciador JMX para gerar uma classe do gerenciador executável.</p>
<ol>
<li>Confirme se o projeto JMXAnagramManager está definido como o projeto principal. </li>
<li>Escolha Arquivo > Novo Arquivo (Ctrl-N; ⌘-N no Mac) e selecione Gerenciador JMX na categoria JMX. Clique em Próximo.<br /> <img alt="tela do modelo do Gerenciador JMX no assistente Novo Arquivo" class="margin-around b-all" src="../../../images_www/articles/74/java/jmx/jmx-newjmxmanager.png" title="O modelo do Gerenciador JMX no assistente Novo Arquivo" /></li>
<li>Digite <strong>AnagramsManager</strong> como o Nome da Classe.</li>
<li>Digite <strong>com.toys.anagrams.manager</strong> como o nome do pacote.</li>
<li>Confirme se Gerar Método Principal, Definir como Classe Principal do Projeto e Gerar Código de Descoberta do MBean de Amostra estão selecionados. Clique em Próximo.</li>
<li>Clique em Editar para digitar o URL do agente JMX para o qual você deseja estabelecer conexão.</li>
<li>Aceite os valores default na caixa de diálogo URL do Agente JMX do RMI. Clique em OK.
<p>A caixa de diálogo URL do Agente JMX do RMI ajuda a informar um URL de JMX válido, composto de um Protocolo, um Host, uma Porta e um caminho de URL.</p>
<img alt="tela da caixa de diálogo URL do Agente JMX do RMI" class="margin-around b-all" src="../../../images_www/articles/74/java/jmx/jmx-jmxagenturl.png" title="valores default na caixa de diálogo URL do Agente JMX do RMI" />
<p>Um elemento único é fornecido na lista drop-down do protocolo. O campo Protocolo é gravável, o que permite a você inserir seu próprio protocolo. O agente JVM do RMI do protocolo default é o protocolo RMI usado para estabelecer conexão ao agente JMX do JDK. O Agente que você iniciou anteriormente neste tutorial desta natureza. </p>
<p>Você deseja usar o host default e o valor da porta porque o Agente está fazendo listening no <tt>localhost:1099</tt>. O campo Caminho do URL é somente leitura e exibe como o caminho é construído para o Agente JVM do RMI. O Caminho do URL é atualizado automaticamente com os valores de host e porta.</p>
<p>Quando você clicar em OK, o campo URL do Agente JMX é atualizado com o URL completo, de acordo com os detalhes especificados na caixa de diálogo URL do Agente JMX do RMI.</p>
</li>
<li>Confirme se Conexão Autenticada e Gerar Código de Amostra para Conexão Autenticada estão selecionados. Clique em Finalizar.<br> <a href="../../../images_www/articles/74/java/jmx/jmx-jmxagenturl2.png" id="jmxagent" rel="lytebox" title="Assistente Novo Gerenciador JMX que exibe o URL do Agente JMX"> <img alt="tela do assistente Novo Gerenciador JMX que exibe o painel URL do Agente JMX" class="margin-around b-all" src="../../../images_www/articles/74/java/jmx/jmx-jmxagenturl2-sm.png" title="Clique para aumentar"></a>
<p>A conexão ao Agente não é autenticada porque você não forneceu nenhuma configuração de autenticação quando o agente foi acionado.</p>
</li>
</ol>
<p>Quando você clicar em Finalizar, o IDE gerará a classe do gerenciador e abrirá o arquivo no editor. Você pode ver se o IDE gerou algum código de amostra para ativar uma conexão autenticada gerada.</p>
</div>
<a name="Exercise_5"></a>
<h2>Executando o Gerenciador</h2>
<p>Neste exercício, você aprenderá a executar o gerenciador e descobrir os MBeans. </p>
<ol>
<li>No arquivo AnagramsManager.java, remova o comentário do código de descoberta do MBean localizado no método principal, de forma que ele seja lido:
<pre>
public static void main(String[] args) throws Exception {
//Manager instantiation and connection to the remote agent
AnagramsManager manager = AnagramsManager.getDefault();
// SAMPLE MBEAN NAME DISCOVERY. Uncomment following code:
Set resultSet =
manager.getMBeanServerConnection().queryNames(null, null);
for(Iterator i = resultSet.iterator(); i.hasNext();) {
System.out.println("MBean name: " + i.next());
}
// Close connection
manager.close();
System.out.println("Connection closed.");
}
</pre>
</li>
<li>Clique com o botão direito do mouse no editor e escolha Corrigir Importações (Alt-Shift-I; ⌘-Shift-I no Mac) para gerar quaisquer instruções de importação necessárias (<tt>java.util.Set</tt> e <tt>java.util.Iterator</tt>). Salve as alterações.</li>
<li>Escolha Executar > Executar Projeto Principal no menu principal.
<p>Alternativamente, clique com o botão direito do mouse no nó do projeto JMXAnagramManager na janela Projetos e escolha Executar.</p>
<p>Quando você escolhe Executar, a aplicação JMXAnagramManager será iniciada e estabelecerá conexão ao agente remoto, exibirá os nomes do MBean descoberto na janela de Saída e, em seguida, encerará a conexão: </p>
<p>O projeto é compilado, e o gerenciador é iniciado. Os <tt>ObejctNames</tt> descobertos são exibidos na janela de Saída. Você pode observar o nome do MBean <tt>AnagramsStats</tt> e também o MBeans da Java VM. Todos os MBeans padrão da VM estão localizados no domínio <tt>java.lang</tt> do JMX.</p>
<p>Veja o que você deverá visualizar na Janela de Saída do NetBeans de execução do JMXAnagramManager:</p>
<pre>
init:
deps-jar:
compile:
run:
MBean name: java.lang:type=MemoryManager,name=CodeCacheManager
MBean name: java.lang:type=Compilation
MBean name: java.lang:type=MemoryPool,name=PS Perm Gen
MBean name: com.sun.management:type=HotSpotDiagnostic
MBean name: java.lang:type=Runtime
MBean name: com.toy.anagrams.mbeans:type=AnagramsStats
MBean name: java.lang:type=ClassLoading
MBean name: java.lang:type=Threading
MBean name: java.lang:type=MemoryPool,name=PS Survivor Space
MBean name: java.util.logging:type=Logging
MBean name: java.lang:type=OperatingSystem
MBean name: java.lang:type=Memory
MBean name: java.lang:type=MemoryPool,name=Code Cache
MBean name: java.lang:type=GarbageCollector,name=PS Scavenge
MBean name: java.lang:type=MemoryPool,name=PS Eden Space
MBean name: JMImplementation:type=MBeanServerDelegate
MBean name: java.lang:type=GarbageCollector,name=PS MarkSweep
MBean name: java.lang:type=MemoryPool,name=PS Old Gen
Connection closed.
BUILD SUCCESSFUL (total time: 1 second)
</pre></li>
</ol>
<!--
<a name="Exercise_6"></a>
<h2>Exercise 6: Updating the Manager Class with Management Logic</h2>
<p>In this exercise you will learn how to make a simple JMX request to access
an MBean attribute. We will update the manager class main method in order to
access the <tt>NumResolvedAnagrams</tt> attribute. This attribute represents
the number of anagrams solved. </p>
<h3>Steps to Follow</h3>
<ol>
<li>In the main method, before closing the connection we are going to perform
the following actions:
<ul>
<li>Access the <tt>MBeanServerConnection</tt>.&nbsp; The <tt>MBeanServerConnection</tt>
class allows you to make requests to the remote server.</li>
<li>Create the Anagrams statistics MBean <tt>ObjectName</tt>. The name is
copied/pasted from the output. An object name is needed when a request
is sent to a remote agent in order to specify the MBean from which to
get the atribute.</li>
<li>Get the attribute <tt>NumResolvedAttribute</tt>.</li>
<li>Print the attribute value to the output.</li>
</ul>
To do so, copy and paste the four lines of code below at the end of the
AnagramsManager.java main method, right before the close conection lines:
<pre>
MBeanServerConnection connection = manager.getMBeanServerConnection();
ObjectName name = new ObjectName("com.toy.anagrams.mbeans:type=AnagramsStats");
Integer num = (Integer) connection.getAttribute(name, "NumSolvedAnagrams");
System.out.println("NumSolvedAnagrams : " + num);
</pre>
You may need to add an import clause for <tt>javax.management.ObjectName</tt>
</li>
<li>Once you have updated the source code, you can play with the Anagrams game
then run the project again in order to see the updated values.
In the NetBeans Output Window of the JMXAnagramManager run you should now see
at the end, before the connection closed, the added line:
<pre>
NumSolvedAnagrams : 0
</pre></li>
</ol>
-->
<p><b>Você concluiu! Bom trabalho!</b><br /> Esperamos que este tutorial tenha ajudado a entender como desenvolver aplicações do gerenciador para acessar informações exportadas devido ao JMX. </p>
<div class="feedback-box">
<a href="/about/contact_form.html?to=3&amp;subject=Feedback:%20Developing%20a%20Java%20Management%20Extensions%20Manager">Enviar Feedback neste Tutorial</a></div>
<br style="clear:both;">
<h2>Consulte Também</h2>
<p>Para obter mais informações, consulte os seguintes tópicos:</p>
<ul>
<li><a href="jmx-getstart.html">Conceitos Básicos sobre Monitoramento do JMX no NetBeans IDE</a></li>
<li><a href="jmx-tutorial.html">Adicionando Instrumentação do JMX (Java Management Extensions) à Aplicação Java</a></li>
</ul>
</body>
</html>