4

我應該使用EJB- @ Singleton(javax.ejb.Singleton)進行統計或監視,還是最好將統計數據緩存在@ SessionScoped-Bean中?要清除我的問題,這裏有兩種情況:EJB- @ Singleton來管理查詢結果

方案I:

用戶開始Websession,使數據庫查詢,查看統計數據表或。這些查詢已在其會話中完成。所以10.000個用戶會做10.000個相同的數據庫查詢。

方案II:

用戶開始一個Websession和從預先初始化@單例豆重試的統計或數據表的DATAS。 @Singleton(javax.ejb.Singleton)在Server-Startup(@Startup)的開始處進行查詢。因此,10.000用戶可以從ONE緩存(@Singleton)讀取數據,而無需查詢數據庫。如果其他人創建/編輯/刪除數據,My @ Singleton-Bean將觸發其緩存數據的刷新。

所以我的問題是:

  • 確實情景II鱗比方案我好?我猜是。我對嗎?
  • 是否有任何其他警告或事情要考慮?
  • 我知道,Stateless-Beans比@stateful或@Singleton擴展更多。我應該考慮使用@Stateless-Bean並用JPA/Hibernate Caches之類的東西來緩存查詢。
  • 我應該使用@ApplicationScoped(javax.enterprise.context)而不是@Singleton(javax.ejb.Singleton)來使用代理嗎?它會更好嗎?

回答

2

是的,情景2的縮放比1好,我們在這裏談論效率。

最好使用較低層(意思是持久層)來緩存實體,因爲這是它的工作。

使用要麼取決於你使用的服務器是否使用完整的企業服務器,如果是的話,那麼更好地利用它提供的交易,如果你只是簡單地使用諸如tomcat的web容器,那麼更好地使用託管的bean。

+1

我正在使用Jboss AS。 – nimo23