2017-08-15 9 views
0
春JMXためにThreadLocalで設定値IがgetManValue()を複数回呼び出す場合、結果はになり、setManValueの値を設定した後矛盾

値矛盾動作

@ManagedResource(objectName = "MAN-TEST:name=SetValue", description = "Set Value for JMX") 
@Component 
public class ValueSetJMX { 
    private static ThreadLocal<String> jmxValue = new ThreadLocal<String>(); 

    @ManagedAttribute 
    public void setManValue(String valueJMX) { 
    jmxValue.set(valueJMX) 
    } 

    @ManagedAttribute 
    public String getManValue() { 
      return jmxValue.get(); 
    } 
} 

動作

時にはヌルです。

この

答えて

2

を解決するための任意のより良い方法は、私はあなたがリモートから値を取得/設定する意味推測あります。

いいえ; ThreadLocalを使用することはできません。要求ごとに同じRMIスレッドを使用する保証はありません。

+0

getManValue()はすべてのJMX操作で使用されます(アスペクトを使用したグローバル値)2人のユーザーがこれらのBeanを操作して2つの異なる値を設定すると、問題が発生します。 –

+0

JMX操作は個別です。ユーザーコードを追加することなく(そして入力データに基づいて状態にアクセスすることなく)呼び出し間に状態を格納することはできません。 'ThreadLocal'はそれをカットしません。 –