抽象或带注释的类而不是MXBean接口

时间:2012-06-21 11:06:43

标签: java class interface jmx

有没有办法将抽象或带注释的类用作MXBean描述符?我有这样的界面:

@MXBean
public interface Peer {
    public String getName();
}

并希望MXBean在类中与更多仅限于本地的方法结合使用,如:

public class PeerCombinedMXBean {
    // Expose this as MXBean attribute
    public String getName() { ... }

    // This method is local-instance-oriented
    public boolean isValid() { ... }
}

我需要像上面这样的模型来避免链接代理对象而不是使用复杂的半代理实例,如:

PeerCombinedMXBean peer = JMX.newMXBeanProxy(connection, name, PeerCombinedMXBean.class);
if (peer.isValid()) System.out.println(peer.getName());

修改

此问题与java.net article有关。他们的进步是什么?我现在可以安全地使用带有注释的MBean吗?

1 个答案:

答案 0 :(得分:1)

我最终为此做的是编写一个放在方法或属性上的自定义注释。然后,我以这样的方式实现了DynamicMBean interface,它解析了有问题的类上的注释,然后将它们注册到PlatformMBeanServer。据我所知,目前还没有这方面的公开实现,在我自己做之前,我还广泛搜索了这个主题。

例如,这是我希望从JConsole管理的类:

public class Foo
{
  // In JMX Console
  @Managed
  private boolean isBar;

  // Not in JMX Console
  private boolean isFoo;

  // In JMX Console
  @Managed
  public String getClassName()
  {
    return Foo.class.getName();
  }
}

然后,当我的应用程序启动时,我使用DynamicMBean的实现注册了这个类的实例并解析了注释。