我有一个简单的Mbean来实现这些接口
public interface HelloMBean {
public void print();
public void printHello();
public int getInt();
public String getName();
public void setName(String s);
}
实施是:
public class Hello implements HelloMBean{
private String name;
@Override
public String getName() {
// TODO Auto-generated method stub
return this.name;
}
@Override
public void setName(String s) {
// TODO Auto-generated method stub
this.name=s;
}
@Override
public void print() {
// TODO Auto-generated method stub
System.out.println("heelp!");
}
@Override
public void printHello() {
// TODO Auto-generated method stub
System.out.println("heelp!"+" "+this.name);
}
@Override
public int getInt() {
// TODO Auto-generated method stub
return 0;
}
}
我开始用Mbean服务器注册我的Mbean,
MBeanServer server=ManagementFactory.getPlatformMBeanServer();
ObjectName objectName=new ObjectName("richard:name=fuck");
try {
server.registerMBean(new Hello(),objectName);
} catch (InstanceAlreadyExistsException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MBeanRegistrationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NotCompliantMBeanException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
System.in.read();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
但是当我检查Jconsole时,它只有两个操作,分别是print()和printHello
我不知道它为什么会发生,因为它只是一个非常简单的Mbean ......
答案 0 :(得分:3)
规则是get*()
和set*()
是(变成)属性访问者。因此,它们在属性部分下公开,而不在操作中公开。
如果存在getter,则JMX客户端可以读取该属性,如果存在setter,则可以写入。仅限制定者或仅在此类财产上获取者是完全有效的。