0

Is there a way to use abstract or annotated class as MXBean descriptor? I have interface like:

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

and want that MXBean to be combined in class with more local-side-only methods like:

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

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

I need model like above to avoid chain-in proxy object instead to use complex half-proxified instance like:

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

Edit

This question is related to java.net article. What is they progress? Can I use MBeans with annotation safely now?

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 に答える