ここには相反する要件があるようです。
- アプリケーションの最小限のコードを変更したい。
- 読み取りおよび/または書き込み用にすべてのプロパティを公開する必要があります。
- について話しているかもしれませんし、話していないかもしれません
System.getProperty(...)
。そうでない場合は、さまざまなオブジェクトのフィールドについて話していると思います。
これを行うには (少なくとも) 2 つの方法があります。現在、ソース コードから mbeans をどのようにエクスポートしているかを知らなければ、特定の構成に合わせて回答を調整することはできません。私の答えは代わりに、SimpleJMX パッケージを使用してプロパティを公開する方法を示します。
あなたが話しているのであればSystem.getProperty(...)
、任意のプロパティを照会して値を返すことができる JMX mbean を書くことができます。
@JmxOperation(description = "Query for property")
public String queryForProperty(String name) {
return System.getProperty(name);
}
代わりに、オブジェクトのリストからフィールドをエクスポートする必要がある場合は、エクスポートする各フィールドに注釈を追加するか、委任を通じてフィールドをエクスポートする Bean を作成する必要があります。簡単な方法はないと思いますし、何をどのようにエクスポートするかについての何らかの情報がなくても、一連のオブジェクトを簡単にエクスポートできるパッケージを知りません。
SimpleJMX を使用すると、フィールドまたは get メソッドに注釈を付けてフィールドをエクスポートできます。
@JmxAttributeField(description = "Number of hits in the cache")
private int hitCount;
...
// this can also be specified as @JmxAttributeMethod on the getter/setter methods
@JmxAttributeMethod(description = "Number of misses in the cache")
private int getMissCount() {
return missCount;
}
は、JMX による値の設定を許可する を@JmxAttributeField
サポートしています。isWritable = true
セッターに注釈を付けて、@JmxAttributeMethod
書き込み可能にすることもできます。
各クラスに注釈を追加したくない場合は、委譲によって値をエクスポートするある種の JMX コンテナー クラスを作成する必要があります。
public class JmxPublisher {
private Class1 object1;
private Class2 object2;
...
public JmxPublisher(Class1 object1, Class2 object2) {
this.object1 = object1;
this.object2 = object2;
...
}
@JmxAttributeMethod(description = "Number of hits in the cache")
public int getClass1HitCount() {
return object1.getHitCount();
}
@JmxAttributeMethod(description = "Shutdown the background thread")
public void setClass2Shutdown(boolean shutdown) {
return object2.setShutdown(shutdown);
}
...
}