Здравствуйте. Помогите, пожалуйста, решить следующую проблему.
Делаю простой 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;
}
}