2012-02-08 22 views
0

メインクラスにリクエストごとにランダム値を生成する(ログ用に)Webサービスアプリケーションを作成しました。Javaアプリケーションの半静的フィールド

静的フィールドとして設定することはできません。次の要求がそれを上書きするためです。

私は、メインのもの(引数またはセッターとして)で使用するすべてのクラスに渡すこともできません。

半静的フィールドを作成することは可能ですか?1つのリクエストでは表示されますが、Webサービスに行くすべてのリクエストでは表示されませんか?

+0

>私はまた、それを主要なもの(引数またはセッターとして)で使用するすべてのクラスに渡すことはできません。何故なの?あなたは[Guice](http://code.google.com/p/google-guice/)のようなDIフレームワークを試しましたか?多くの依存性注入システムには、注入された依存関係が要求またはセッションに関連付けられていることを指定する方法があります。 –

+0

メインクラスからの 'UUID'パラメータを含むようにすべてのコンストラクタ/メソッドを変更することは、巨大なリファクタリングタスクになります。私はそれを避けたいです。 私はSpringを使用していますが、ここにどのように関与させるべきかわかりません(残念ながら私はSpringに精通していません)。 – hsz

答えて

4

Java EEモデルでは、1つのスレッドごとに1つの要求が処理され、同時に実行される要求によって競合が発生しないと想定できます。あなたはサーブレットの値を移入し、基礎となるクラスはスレッドやHTTPリクエストコンテキストの概念を持たずにsigletonにアクセスしている聞かせて、ThreadLocalのを使用してシングルトンを採用することができる、ということ

を言った:

public class RandomValueHolder { 

private static ThreadLocal<Long> randomValue; 

public static Long getRandomValue() { 
    return randomValue.get(); 
} 

public static void setRandomValue(Long value) { 
    randomValue = new ThreadLocal<Long>(); 
    randomValue.set(value); 

} 
} 
2

なぜRequest.setAttribute()で要求自体にデータを保存し、それを取得するには、対応するRequest.getAttribute()を使用attribute

2

としてHttpRequestを使用して値を保存していません。

関連する問題