Olá Galera da Comp!
No post passado falamos sobre a Java Process Status Tool, uma ferramenta da Sun que permite verificar os processos que estão ativos na Máquina Virtual Java.
Neste post, veremos como utilizar as classes MonitoredHost e MonitoredVm.
Primeiramente devemos importar para o classpath o pacote tools.jar (disponível no JDK 1.5 ou posterior, na pasta lib). Para isso utilizaremos o NetBeans IDE na versão 6.1.
1 – Crie ou abra um projeto.
2 – No gerenciador de Projetos (lado esquerdo tela), clique com o botão direito do mouse sobre o nome do projeto e vá até Propriedades.
3 – Clique em Bibliotecas na janela que aparece.
4 – Clique no botão Adicionar JAR/Pasta.
5 – Navegue até a pasta lib do JDK (Exemplo: C:\Arquivos de programas\Java\jdk1.6.0\lib).
6 – Selecione o arquivo nomeado tools.jar.
7 – Dê OK em todas as janelas e volte para o projeto.
Ok, classpath do seu projeto agora já pode encontrar as classes das quais precisamos.
O código que utilizaremos como base será esta função desenvolvida por mim. O código é auto-explicativo e segue abaixo:
import java.util.Set;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashSet;
import sun.jvmstat.monitor.MonitorException;
import sun.jvmstat.monitor.MonitoredHost;
import sun.jvmstat.monitor.MonitoredVm;
import sun.jvmstat.monitor.MonitoredVmUtil;
import sun.jvmstat.monitor.VmIdentifier;
private void getJVMProcesses(ArrayList array){
try {
//Define qual máquina será monitorada, no nosso caso a máquina local
MonitoredHost local = MonitoredHost.getMonitoredHost("localhost");
//Faz um Hash com os processos da maquina virtual
Set vmlist = new HashSet(local.activeVms());
//For que executa enquanto houverem processos, fazendo com que um Object receba um id de cada um
for (Object id : vmlist){
//Configura qual processo será monitorado, no caso, o indicado pelo Object "id"
MonitoredVm vm = local.getMonitoredVm(new VmIdentifier("//" + id));
//adiciona no array o nome da classe main do processo
array.add(MonitoredVmUtil.mainClass(vm, false));
//adiciona no array o nome completo da classe main do processo (com nomes dos pacotes)
//array.add(MonitoredVmUtil.mainClass(vm, true));
}
//Excessões disparadas pelas classes Monitored
} catch (MonitorException ex) {
log.error("Erro na monitoração da JVM. \nErro: "+ex.getMessage());
} catch (URISyntaxException ex) {
log.error("Erro na busca do host para monitoração da JVM. \nErro: "+ex.getMessage());
}
}
Este método recebe um ArrayList e adiciona os processos encontrados em execução na JVM.
Bom, é isso por hoje.
Abraços!
[Gustavo]
O problema dessa resolução é que a licensa dessa biblioteca é GPL.
Olá Leandro, muito obrigado por responder!
Bom, acredito que se a licensa é GPL, aí que não deveriam mesmo ter problemas. Visto que, GPL (General Public License) é uma licensa pública que permite inclusive a alteração do código.
“Em termos gerais, a GPL baseia-se em 4 liberdades:
A liberdade de executar o programa, para qualquer propósito (liberdade nº 0)
A liberdade de estudar como o programa funciona e adaptá-lo para as suas necessidades (liberdade nº 1). O acesso ao código-fonte é um pré-requisito para esta liberdade.
A liberdade de redistribuir cópias de modo que você possa ajudar ao seu próximo (liberdade nº 2).
A liberdade de aperfeiçoar o programa, e liberar os seus aperfeiçoamentos, de modo que toda a comunidade se beneficie deles (liberdade nº 3). O acesso ao código-fonte é um pré-requisito para esta liberdade.”
Fonte: http://pt.wikipedia.org/wiki/GNU_General_Public_License