在MBean上找不到任何操作

时间:2014-09-16 05:20:43

标签: java jmx

基本上我遵循标准的基本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对象作为返回类型的方法返回给我?这太奇怪了。我必须遗漏一些非常简单的东西。

谢谢!

2 个答案:

答案 0 :(得分:1)

我打赌你的MBean上有一个属性queueSample,因为getFoo通常会将可读属性foosetFoo转换为可写属性,如果你有getter和setter,属性是r / w。

使用jconsole之类的工具连接到VM并检查您的MBean。

答案 1 :(得分:0)

方法应该是:

public QueueSampleMBean getQueueSample();

QueueSample应该实现QueueSampleMBean(并且只显示简单类型)。