Informações sobre a JVM

6 respostas
J

Boa tarde pessoal, estou com uma dúvida inusitada aqui, gostaria de recuperar informações sobre os processos que estão sendo executados na JVM para impedir que o usuario abra duas aplicações na mesma maquina, gostaria de verificar toda vez que o jar fosse e executado se uma instancia da apliucação já está sendo executada e caso esteja vou retornar uma mensagem.

Alguém da uma mão ai ?

abraço.

6 Respostas

E

http://www.guj.com.br/posts/list/64278.java

JxtaNode

Bom dia,

Não estou bem a comprender a pregunta. Se estou a comprender não tem uma mas duas preguntas.

1- Dentro da JVM :
  gostaria de recuperar informações sobre os processos que estão sendo executados na JVM:

Talvez, JMX , jconsole , (Java Troublshooting, Profiling, Monitoring and Management Tools)
http://java.sun.com/javase/7/docs/technotes/tools/index.html

2- Fora da JVM au nivel do OS :
  impedir que o usuario abra duas aplicações na mesma maquina ?

  na mesma Maquina Virtual ?  no caso normal o ClassLoader carga uma Applicação numa so JVM.

A verifcação deve estar au nivel do Systema Operativo  e não dentro da JVM.

Uma solução simples mas não sufeciente é utilisar un arquivo (ficheiro) com o PID.
Cada vez que lança outra instancia ela verifica o ficheiro.

E uma outra é utilizar talvez JMX ??? Tanho que implementar un exemplo…

Obrigado entanglement , pelo link do topico.
Estudei o topico mas para mim a pregunta ainda deve aver uma melhore solução.

Best Regards

ViniGodoy

Para controlar a criação da aplicação:

  1. Tente abrir um ServerSocket numa porta qualquer.
  2. Se abrir, mantenha-o aberto até a aplicação fechar;
  3. Se não abrir, não abra a aplicação.
JxtaNode

Bom dia ViniGodoy,

Para mim ainda não encontrei a solução correta. Ouvi as prepostas mas não encontrei uma boa solução.

1- Reservar uma porta para verificar que uma instância da applicação fonçiona jà no OS.
Tanho muitos applicativos em rede que utilisão portas et o meu FireWall não gosta de portas abertas…

2- Um arquivo (ficheiro) de “propreties” para indicar que a applição esta rodando,
jà me parece ser melhore mas o problema é o em caso de “crash” da applicação.

3- Utilisação de JMX MBeans … talvez muita coisa por nada.

4- ???

Abraços

ViniGodoy

Seu firewall não interferirá nesse caso, já que sua aplicação não fará comunicação por essa porta. Aliás, é até bom que você ligue o seu firewall para essa porta. Existem 65.535 portas disponíveis, basta escolher um número bem exótico.

Infelizmente, o Java não permite o jeito correto de fazer isso, que é através de chamadas ao SO. Se quiser realmente fazer do jeito certo, terá que escrever um driver JNI, que faz a comunicação com o SO. Entretanto, sua aplicação só será portável se você escrever esse driver para cada uma das plataformas que pretende atender.

J

Revolvi meu problema, com essa solução.

Obrigado.

Criado 9 de novembro de 2009
Ultima resposta 11 de nov. de 2009
Respostas 6
Participantes 4