0

有没有办法使用抽象类或带注释的类作为 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 文章有关。他们有什么进展?我现在可以安全地使用带注释的 MBean 吗?

4

1 回答 1

1

我最终为此做的是编写一个自定义注释,将其放置在方法或属性上。然后,我以这样一种方式实现了DynamicMBean 接口:它解析出相关类的注释,然后将它们注册到 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实现注册这个类的一个实例并解析出注释。

于 2012-06-21T12:21:27.343 回答