基本上我遵循标准的基本JMX教程并使用两种方法注册MXBean。
public interface QueueSamplerMXBean {
public QueueSample getQueueSample();
public void clearQueue();
}
但是,当我尝试查询已注册的MBean时,它只返回clearQueue。这是我的示例程序:
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
// Construct the ObjectName for the QueueSampler MXBean we will register
ObjectName mxbeanName = new ObjectName("com.example:type=QueueSampler");
// Create the Queue Sampler MXBean
Queue<String> queue = new ArrayBlockingQueue<String>(10);
queue.add("Request-1");
queue.add("Request-2");
queue.add("Request-3");
QueueSampler mxbean = new QueueSampler(queue);
// Register the Queue Sampler MXBean
mbs.registerMBean(mxbean, mxbeanName);
MBeanInfo info = mbs.getMBeanInfo(mxbeanName);
for(MBeanOperationInfo op : info.getOperations()) {
System.out.println("operation = " + op.getName());
}
我认为这就是为什么我一直得到&#34; java.lang.IllegalArgumentException。 ...在MBean上找不到操作XXXXXX(调用的方法名称).....我试图通过Jolokia代理(JSON到JMX桥)调用MXBean方法时遇到此异常。调用void返回类型的方法没有问题。
任何人都有任何线索为什么getOperations不会将JavaBean对象作为返回类型的方法返回给我?这太奇怪了。我必须遗漏一些非常简单的东西。
谢谢!
答案 0 :(得分:1)
我打赌你的MBean上有一个属性queueSample
,因为getFoo
通常会将可读属性foo
,setFoo
转换为可写属性,如果你有getter和setter,属性是r / w。
使用jconsole
之类的工具连接到VM并检查您的MBean。
答案 1 :(得分:0)
方法应该是:
public QueueSampleMBean getQueueSample();
QueueSample应该实现QueueSampleMBean(并且只显示简单类型)。