0

AFAIK @Singleton EJB は、次のようなページ ビューのカウントに適しています。

@Singleton
public class CounterBean {
    private int hits = 1;

    // Increment and return the number of hits
    public int getHits() {
        return hits++;
    }
}

これは、1 ページの Web アプリケーションでは問題なく機能します。たとえば、Web アプリケーションに 1,000 ページがあり、読み込まれるたびに各ビューのカウンターを表示したい場合はどうでしょうか。

@Singleton はこれに割り当てられますか? つまり、これは効率的でしょうか?(単一のインスタンスを頻繁に更新するために多くのBean を持つ)

私の推測では、単一のインスタンスですべての Web ページ カウンターを管理するのは効率的ではありません。@Singleton で何千もの @RequestScoped Bean を更新するMap <ViewID, Count>と、大量の同時実行性が発生すると想像してください...

再デプロイ時に永続的な値を更新するために、(@PostConstructデータベースからプル)、@PreDestroy(データベースにプッシュ) アノテーションを使用することを考えていました。

ページ ビュー カウンターは、各ビューに表示されます。

Web ページの数は動的です。

Google アナリティクスがこの仕事をしていることは理解していますが、問題は Java EE でこれを行う方法です。

アプリケーション サーバー: Jboss 7.1

4

1 に答える 1

1

本当にページ ビュー カウンターを実装したい場合は、永続化することをお勧めします。そうしないと、アプリケーションの再デプロイまたは再起動のたびにカウントが 0 から再開されます。また、アプリケーションが複数のサーバーでクラスター化されている場合、数値は正しくありません。

単なる演習である場合は、Bean 管理の同時実行性を使用し、ConcurrentHashMap含まれている のインスタンスを使用する必要がありますAtomicInteger。これら 2 つのクラスのドキュメントを参照して、それらがどのように機能するかを理解してputIfAbsent()くださいputIfAbsent()

于 2012-12-21T13:46:16.860 に答える