Easy JMX Example

Ein leicht verständliches Code-Beispiel zum Einsatz von Java Management Extensions (JMX) mit Standard MBeans.

ButtonStatsMBean

1
2
3
4
5
6
7
8
package de.bennyn.jmx.instrument;
 
public interface ButtonStatsMBean
{
  // Accessible through JConsole
  public void changeClicks(int timesClicked); // Operation
  public int getTimesClicked();               // Attribute
}

ButtonStats

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package de.bennyn.jmx.instrument;
 
public class ButtonStats implements ButtonStatsMBean
{
  private int timesClicked;
 
  public ButtonStats()
  {
  }
 
  public void init()
  {
    this.timesClicked = 0;
  }
 
  public void addClick()
  {
    this.timesClicked++;
  }  
 
  // Accessible through JConsole
  @Override 
  /*  
   * Don't name this method setTimesClicked(),
   * because then it will not appear as an operation in JConsole.
   */
  public void changeClicks(int timesClicked)
  {
    this.timesClicked = timesClicked;
  }
 
  @Override
  public int getTimesClicked()
  {
    return timesClicked;
  }  
}

Main

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package de.bennyn.jmx.view;
 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import java.lang.management.ManagementFactory;
import javax.management.ObjectName;
import javax.management.JMException;
import de.bennyn.jmx.instrument.ButtonStats;
 
public class Main
{
  // MBean
  private static ButtonStats manageableBean;
 
  public static void main(String[] args)
  {
    // Management (JMX)
    initManagement();
 
    // View (GUI)
    JFrame frame = new JFrame("Title");
    frame.setBounds(0, 0, 400, 400);
    frame.setVisible(true);
 
    JButton button = new JButton("Push me");
    button.addActionListener(new ActionListener()
    {
 
      @Override
      public void actionPerformed(ActionEvent ae)
      {
        System.out.println("Button pressed!");
        manageableBean.addClick();
      }
    });
    button.setSize(100, 100);
    frame.add(button);
  }
 
  private static void initManagement()
  {
    // Register MBean in Platform MBeanServer
    try
    {
      Main.manageableBean = new ButtonStats();
      ManagementFactory.getPlatformMBeanServer().
              registerMBean(Main.manageableBean,
              new ObjectName("de.bennyn.jmx.instrument:type=ButtonStats"));
    }
    catch (JMException ex)
    {
      System.out.println(ex.getLocalizedMessage());
    }
    // Initialize MBean
    manageableBean.init();
  }
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.