@parkito

Как написать агента MBean для JMX?

Здравствуйте. Помогите, пожалуйста, решить следующую проблему.

Делаю простой MBean

public interface TestI {
    public void testSetter();

    public String testGetter();

}

public class Test implements TestI {
    private String message = null;

    public Test() {
        message = "constructor";
    }

    public Test(String message) {
        this.message = message;
    }

    @Override
    public void testSetter() {
        message = "setter";
    }

    @Override
    public String testGetter() {
        return message;
    }
}


Регистрирую его

Test test = new Test();
        MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
        ObjectName objectName = new ObjectName("Admin:type=Test");
        mBeanServer.registerMBean(test, objectName);


В результате сыпятся исключения
Exception in thread "main" javax.management.NotCompliantMBeanException: MBean class test.Test does not implement DynamicMBean


Полез в интернеты смотреть, что у меня не так. Нашел пример.
public interface HelloMBean {
   public void setMessage(String message);
   public String getMessage();
   public void sayHello();
}
 
public class Hello implements HelloMBean 
{
   private String message = null;
 
   public Hello() {
      message = "Hello there";
   }
 
   public Hello(String message) {
      this.message = message;
   }
 
   public void setMessage(String message) {
      this.message = message;
   }
 
   public String getMessage() {
      return message;
   }
 
   public void sayHello() {
      System.out.println(message);
   }
}


private MBeanServer mbs = null;
 
    public SimpleAgent() 
    {
        // Получить экземпляр MBeanServer
        mbs = ManagementFactory.getPlatformMBeanServer();
 
        // Создаем наш MBean
        Hello helloBean = new Hello();
        ObjectName helloName = null;
 
        try {
            // И регистрируем его на платформе MBeanServer 
            helloName = new ObjectName("SimpleAgent:name=hellothere");
            mbs.registerMBean(helloBean, helloName);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }


Что самое интересное - этот пример у меня работает. Вывод: где-то косячу я. Где это может происходить?

UPD:

Верная версия

public class Test implements TestIMBean {
    private String message = null;

    public Test() {
        message = "constructor";
    }

    public Test(String message) {
        this.message = message;
    }

    @Override
    public void setMessage(String str) {
        this.message=message;
    }

    @Override
    public String getMessage() {
        return this.message;
    }
}
  • Вопрос задан
  • 634 просмотра
Решения вопроса 1
@sirs
попробуйте назвать свой интрефейс TestIMBean
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы