2

同じサービスを提供するホワイトラベル/マルチテナントサーバーがありますが、複数の顧客向けにブランド化されています。JMXを使用して、各顧客のステータス(nbrの呼び出し、nbrのエラーなど)を監視したいと思います。

Spring JMXアノテーションを使用してPOJOを接続する方法を知っています(以下のコードに従って)。私が本当に必要としているのは、顧客ごとに1つのMBeanですが、顧客はサーバーの起動時に動的にロードされるため、アノテーションを使用してこれを接続する方法がわかりません。

これは可能ですか?そうでない場合、起動時にMBeanをインスタンス化することは可能ですか?

@Component
@ManagedResource(objectName = "TravelAPI:name=Customer") 
public class CustomerStatus extends GeneralCustomerStatus {

    @ManagedAttribute
    String customerId;
    .
    .
    .


}
4

1 に答える 1

7

私が本当に必要としているのは、顧客ごとに1つのMBeanですが、顧客はサーバーの起動時に動的にロードされるため、アノテーションを使用してこれを接続する方法がわかりません。

実際に動的オブジェクトをインスタンス化するエンティティを作成し、を介してそれらをJMXに登録しますMBeanExporter。インスタンスをファクトリエンティティに挿入してMBeanExporterから、を呼び出しますMBeanExporter.registerManagedResource(...)

たとえば、次のようなことを行います。

...
mbeanExporter.registerManagedResource(beanInstance);
...

@Required
public void setMbeanExporter(MBeanExporter mbeanExporter) {
    this.mbeanExporter = mbeanExporter;
}

またNamingPolicy、動的オブジェクトが独自の名前を付けて一意にすることができるように、を使用します。詳細については、こちらをご覧ください。

@ManagedResourceobjectNameを動的に変更する

余談ですが、私のSimpleJMXパッケージには、動的オブジェクトを支援するためのコードがいくつか含まれています。

于 2012-08-30T21:26:10.660 に答える