EJB- @ Singleton管理查询结果

时间:2012-05-09 07:50:57

标签: singleton ejb stateless-session-bean stateful-session-bean session-scope

我应该使用EJB- @ Singleton(javax.ejb.Singleton)进行统计或监控,还是最好将统计信息缓存在常见的@SessionScoped-Bean中?要澄清我的问题,这里有两种情况:

情景I:

用户开始Websession并进行数据库查询以查看统计信息或数据表。这些查询在其会话中已满。因此,10.000用户将进行10.000个相同的数据库查询。

情景II:

用户开始Websession并从预初始化的@ Singleton-Bean重试统计数据或数据表的数据。 @Singleton(javax.ejb.Singleton)在Server-Startup(@Startup)的开头进行了查询。因此,10.000用户可以从一个缓存(@Singleton)读取,而不必查询数据库。如果其他人创建/编辑/删除数据,我的@ Singleton-Bean会触发刷新其缓存数据。

所以我的问题是:

  • Scenario II是否比场景I更好地扩展?我猜是。我是对的吗?
  • 还有其他需要考虑的注意事项吗?
  • 我知道,Stateless-Beans比@stateful或@Singleton扩展得更多。我是否应该考虑使用@Stateless-Bean并使用JPA / Hibernate Caches等缓存查询。
  • 我应该使用@ApplicationScoped(javax.enterprise.context)而不是@Singleton(javax.ejb.Singleton)来使用代理吗?会更好吗?

1 个答案:

答案 0 :(得分:2)

是的,场景2的扩展性优于1,我们在这里谈论效率。

最好使用较低层(即持久层)来简单地缓存实体 因为这是它的工作。

使用要么取决于你使用的服务器,你使用完整的企业服务器,如果是,那么更好地利用它提供的交易,如果你只是使用像tomcat这样的web容器,那么更好地使用托管豆。