4

統計または監視にEJB-@Singleton(javax.ejb.Singleton)を使用する必要がありますか、それとも共通の@ SessionScoped-Beanに統計をキャッシュする方がよいでしょうか?私の質問をクリアするために、ここに2つのシナリオがあります。

シナリオI:

ユーザーはWebセッションを開始し、統計またはデータテーブルを表示するためにデータベースクエリを実行します。これらのクエリは、そのセッション内で実行されます。したがって、10.000ユーザーは10.000の等しいデータベースクエリを作成します。

シナリオII:

ユーザーはWebセッションを開始し、事前に初期化された@Singleton-Beanから統計またはデータテーブルのデータを再試行します。@Singleton(javax.ejb.Singleton)は、Server-Startup(@Startup)の開始時にクエリを実行しました。したがって、10.000ユーザーは1つのキャッシュ(@Singleton)から読み取ることができ、データベースにクエリを実行する必要はありません。私の@Singleton-Beanは、他の誰かがデータを作成/編集/削除した場合に、キャッシュされたデータの更新をトリガーします。

だから私の質問は:

  • シナリオIIはシナリオIよりもスケーリングが優れていますか?はい、そうですね。私は正しいですか?
  • 他に考慮すべき注意事項や事柄はありますか?
  • Stateless-Beansは、@statefulや@Singletonよりもはるかにスケールアウトします。@ Stateless-Beanを使用して、JPA /HibernateCachesなどでクエリをキャッシュすることを検討する必要があります。
  • プロキシを使用するには、@ Singleton(javax.ejb.Singleton)の代わりに@ApplicationScoped(javax.enterprise.context)を使用する必要がありますか?それはもっと良いでしょうか?
4

1 に答える 1

2

はい、シナリオ 2 は 1 よりも優れています。ここでは効率について説明します。

永続層を意味する下位層を使用してエンティティをキャッシュすることをお勧めします。これは単にそうすることがその仕事だからです。

どちらを使用するかは、使用しているサーバーによって異なります。完全なエンタープライズサーバーを使用しているかどうか、そうであれば、それによって提供されるトランザクションをより適切に活用し、単純に tomcat などの Web コンテナーを使用している場合は、マネージド Bean をより適切に使用します。

于 2012-10-11T02:29:18.717 に答える