JConsole показывает только операции без атрибутов MBean

У меня есть простой MBean X с 3 методами и четырьмя атрибутами. Он реализует интерфейс XMBean (2 метода).

В другом классе я регистрирую это:

    MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();

    X x= new X(14, 16, 17, 13);

    ObjectName name = new ObjectName("package:type=xxxx");

    mbs.registerMBean(x, name);

Я вижу это в jConsole. Я могу вызвать два метода, которые я реализую из интерфейса. Я думаю, что я должен видеть также атрибуты моего MBean? Почему jConsole показывает мне только операции? Как показать атрибуты?


person peter55555    schedule 21.12.2014    source источник
comment
Вставьте код для класса X. Какие 3 метода и 4 атрибута?   -  person Andy Dufresne    schedule 21.12.2014
comment
Спасибо. Я вставил код.   -  person peter55555    schedule 21.12.2014


Ответы (2)


Я вставил простой код ниже:

public class X implements XMBean
{
    public Automat(int aa, int bb, int cc, int dd)
    {
        a = aa;
        b = bb;
        c = cc;
        d = dd;
    }

    public int operation1(char product)
    {
        return 1;
    }

    public int operation2(char product)
    {
        return 2;
    }

    public Integer getA()
    {
        return a;
    }

    public Integer getB()
    {
        return b;
    }

    public Integer getC()
    {
        return c;
    }

    public Integer getD()
    {
        return d;
    }

    private int a;
    private int b;
    private int c;
    private int d;
}

////////////////////////////////////////////////////////////////////////////////////////

public interface XMBean
{
    public int operation1(char product);
    public int operation2(char product);
}
person peter55555    schedule 21.12.2014
comment
Я вижу, что отсутствуют две вещи: в интерфейсе нет сеттеров-геттеров, а в классе реализации тоже нет сеттеров. Взгляните на этот пример — примеры. javacodegeeks.com/enterprise-java/jmx/ - person Andy Dufresne; 21.12.2014

JMX сильно зависит от отражения с использованием интерфейсов *MBean. Как говорит Энди, интерфейс XBean должен предоставлять атрибуты в геттере и/или сеттере. Из Oracle's JMX tutorial:

Как определено в спецификации JMX, геттер — это любой общедоступный метод, который не возвращает void и имя которого начинается с get. Геттер позволяет менеджеру прочитать значение атрибута, тип которого совпадает с типом возвращаемого объекта. Сеттер — это любой общедоступный метод, который принимает один параметр и имя которого начинается с set. Сеттер позволяет менеджеру записать в атрибут новое значение, тип которого совпадает с типом параметра.

Если вы используете Eclipse, вы можете легко сгенерировать интерфейс, щелкнув правой кнопкой мыши, чтобы открыть контекстное меню, и выбрав Refactor > Extract Interface.

person Juan Amorocho    schedule 10.04.2015