我正在使用Struts 2 v 2.3.16.3和tomcat 6。
用户将单击按ID查找对象的操作,页面将显示该对象。我遇到了一个零星的错误,用户将突然从另一台机器上的另一个用户获取另一个查找的id。因此,他们有效地调用相同的操作,但将不同的id传递给请求,但最终都会查看相同的ID。
这显然是灾难性的,数据完全被破坏,因为用户都认为他们正在编辑不同的记录。任何想法如何确保会话/请求活动对每个会话安全?
我也在使用spring并在我的Service层中使用@Transactional
注释,它返回DAO中的对象。我需要对此注释做些什么才能使每个会话都安全吗?
我正在使用org.springframework.orm.hibernate3.HibernateTransactionManager
答案 0 :(得分:1)
Classic Thread-UnSafe问题。
自从你提名Spring之后,我的第一个猜测是你没有在Spring xml配置中为你的动作bean指定正确的范围。
确保使用scope="prototype"
,否则Spring的默认范围是Singleton
,并且您不需要Action的单个(ton)实例,而不是ThreadLocal(和因此ThreadSafe)了。
如果不是这样,它可能是something on an Interceptor(与行动不同,不是线程安全),或者您使用的是static
(在您的Business / DAO层中,或者在行动本身)应该不是。