4

我应该使用 EJB-@Singleton (javax.ejb.Singleton) 进行统计或监视,还是将统计信息缓存在公共 @SessionScoped-Bean 中会更好?为了澄清我的问题,这里有两种情况:

情景一:

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

场景二:

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

所以我的问题是:

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

1 回答 1

2

是的,场景 2 的规模比 1 更好,我们在这里谈论的是效率。

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

使用哪个取决于您使用的服务器,您是否使用完整的企业服务器,如果是,那么更好地利用它提供的事务,如果您只是使用诸如tomcat之类的Web容器,那么最好使用托管bean。

于 2012-10-11T02:29:18.717 回答