1

JSFアプリケーションには、いくつかのWebページ用のさまざまなゲッターとセッターを持つセッションスコープのBeanがあり、訪問者が「送信」ボタンをクリックすると、ページから入力された値が出力ファイルに送信され、後で別のアプリケーションで処理されます.

特定の日にデータがファイルに書き込まれた回数を追跡したいと考えています。最終的にはおそらくデータベースを使用することになるでしょうが、そのファイルにアクセスしたすべての人によって更新される場所にカウンターを保存したいと考えています。ページ。私の理解では、マネージド Bean に静的 int として格納すると、値は別のセッションでは保持されません。日付の処理など、いくつかのユーティリティメソッドを格納する非 Bean クラスがあります。私の質問は、非 Bean クラスが、任意のセッションからアクセスできる静的変数を格納し、情報を追跡するために使用されるかどうかです。送信数のカウントなど?

返信ありがとうございます。

4

2 に答える 2

0

私の理解では、マネージド Bean に静的 int として格納すると、値は別のセッションでは保持されません。

それは正しくありません。静的変数はアプリケーション全体です。それらはインスタンスではなく、クラスに関連付けられています。クラスは、アプリケーションの存続期間中に一度だけロードされます。また、かなり単純な実験で自分でそれを考え出したでしょう。

あなたの唯一の懸念は、スレッドセーフかもしれません。インクリメンタル中に競合状態が発生しないように、 AtomicIntegerorのAtomicLong代わりに使用してください。int

以下も参照してください。

于 2013-02-05T11:42:38.303 に答える
0

サーバーを再起動しない限り、任意の静的フィールドで目的が達成されます。セッション スコープのマネージド Bean のフィールドであっても同様です。静的変数はインスタンスではなくクラスに属し、マネージド Bean のクラスは JVM によって 1 回だけロードされます。複数のスレッドからその静的変数にアクセスする可能性があるため、その値を変更するときに同期する必要があります。

于 2013-02-05T11:43:03.397 に答える