我应该使用 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) 来使用代理吗?会更好吗?