0

一部のデータを静的変数に保存したいと考えており、同じ JBOSS7 にデプロイされたすべての Web サービスがそれらのデータにアクセスできるようにしたいと考えています。スタンドアロンの JBOSS は単一の JVM で実行され、すべてのサービスは同じ JVM で実行されるため、静的変数にアクセスできると思いました。

ただし、Web サービスがデータを取得しようとすると NullPointerException が発生することに気付きました。

これは私のストレージクラスです:

public enum OneJvmCacheImpl {

    INSTANCE;

    private ConcurrentHashMap<String, Object> values = new ConcurrentHashMap<String, Object>();

    public <T> T get(String key, Class<T> type) {
        return type.cast(values.get(key));
    }

    ...     

}


OneJvmCacheImpl.INSTANCE.get(...);

Web サービスから値にアクセスできない理由を教えてください。ありがとう、V.

4

2 に答える 2

1

jBoss では、異なるデプロイメント間で静的変数を共有することは絶対に許可されません。それはセキュリティ上の大きな問題になるでしょう。もし私があなたの隣に戦争を展開し、あなたの静的変数を変更し始めたらどうなるでしょうか...

このような値は、データベース、memcache、共有ファイルなどの別のものに保持する必要があります。

于 2013-11-10T11:13:35.450 に答える
1

展開によって個別の war ファイルを意味する場合、静的変数は別のクラスローダーによってロードされるため、他の war ファイル内の他の Web サービスには表示されません。各戦争には独自のクラスローダーがあるため、クラスの独自の「クラスインスタンス」です。問題のクラスをデプロイメント間で共有される場所に移動することで解決できるかもしれませんが、データベースまたは分散キャッシュを使用して解決することをお勧めします。

于 2013-11-10T11:19:16.100 に答える