26 de jan de 2013

JMX - Acesso remoto a processos


O JMX (Java Management Extensions) é uma ferramenta do Java para acessar ou monitorar processos/aplicações remotamente. É bem simples de se implementar. É necessário apenas criar uma interface e utilizá-la para acessar remotamente algum processo Java que esteja rodando.

Passos para criar uma aplicação utilizando JMX:

  • Criar uma interface. Detalhe: o nome da interface precisa terminar com “Mbean”.
  • Implementar a interface e registar o Mbean para que ele possa ser acessado remotamente.
  • Criar um client para acessar a aplicação.


  • Vamos criar uma demo bem simples, um contador!

    CountMbean.java
    public interface CountMBean {
     
     int getCount();
     
     void increment();
     
    }
    

    Count.java
    public class Count implements CountMBean{
     
     private static int count = 0;
    
     public int getCount() {
      return count;
     }
    
     public void increment() {
      count++;
     }
     
    }
    

    AppJMX.java
    public class AppJMX {
    
     public static void main(String[] args) throws Exception {
    
      MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
      ObjectName mbeanName = new ObjectName("com.jmxexample:type=Count");
    
      Count count = new Count();
      mbs.registerMBean(count, mbeanName);
    
      Thread.sleep(Long.MAX_VALUE);
    
     }
    }
    


    Os parâmetros a seguir são necessários para o funcionamento da demo e devem ser passados ao executar o programa:

    -Dcom.sun.management.jmxremote
    -Dcom.sun.management.jmxremote.port=9999
    -Dcom.sun.management.jmxremote.authenticate=false
    -Dcom.sun.management.jmxremote.ssl=false


    Sem entrar muitos nos detalhes, a execução vai ficar mais ou menos assim:

    java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -classpath %classpath com.jmxexample.AppJMX

    ClientJMX.java
    JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi");
    JMXConnector jmxConnector = JMXConnectorFactory.connect(url, null);
      
    MBeanServerConnection mbeanConn = jmxConnector.getMBeanServerConnection();
    ObjectName mbeanName = new ObjectName("com.jmxexample:type=Count");
    
    CountMBean countMBean = JMX.newMBeanProxy(mbeanConn, mbeanName, CountMBean.class, true);
    
    countMBean.increment();
    System.out.println(countMBean.getCount());
    


    Outra possibilidade é utilizar o jconsole:



    É isso ae, galera! Prometo não demorar muito a fazer outro post. Esse começo de ano estava de férias na Coréa no Norte e lá o Blogger é bloqueado pelo governo, por isso a demora... rsrs

    Código Fonte: http://depositfiles.com/files/j1hjr5mhy

    Falow! Aqui é java, morou!?