当有超过150个用户连接到我们的网络应用程序时,我的数据库返回的不一致数据有奇怪的行为。
我的EJB通过大多数Netbeans 7.0生成的代码连接到MySQL,为可重用性定制了一点。发生的事情是,每隔一段时间,用户就会收到(在浏览器中)不应该是的数据。即用户正在查看产品A
的详细信息,但部分数据(某些一对多关系数据)属于不同的产品。当较少用户登录时,我们没有此问题。似乎问题开始引起大约150名用户的兴趣。
代码的EntityManager
部分仅em.create(...)
,em.persist(...)
或em.merge(...)
。没有refresh()
或flush()
。我禁用了共享缓存。我没有负载平衡。
什么/我在哪里可以看到更多?
答案 0 :(得分:4)
这取决于你的情况。
但是如果您想使用这些方法,请提供您的信息:
refresh()
使用数据库表中的数据更新实体。
flush()
完全相反,将实体中的值保存到数据库表中。
但是由于您正在使用EJB,如果您正在使用CMP,那么默认情况下,EJB中的所有方法都在事务中运行(除非提供事务属性以不使用它们)。事务以方法调用开始,并在方法完成时结束。最后它被提交,这意味着您不需要调用flush()
。但是如果您需要在提交之前将数据库与实体同步,那么您需要调用flush()
。
除此之外,它实际上取决于您的要求。