在Java EE环境中测试乐观锁定

时间:2013-03-29 15:34:10

标签: java hibernate unit-testing optimistic-locking

据我所知,如果数据库表中的一行被多个线程同时更新,则数据库会标记错误。

在我们的生产环境中,我们在群集中有2个Tomcat服务器。可能会发生这两个用户同时被定向到每个Tomcat服务器并且他们更新数据库表中的相同记录。结果,将抛出异常。

如何在本地计算机上模拟这种情况?或者我如何做一些与生产相同的环境?

我正在开发的技术:Java 6,Spring 3,Hibernate,MS SQL Server 2008和Tomcat 7.

3 个答案:

答案 0 :(得分:0)

  

据我所知,数据库表中的行是否同时更新   通过多个线程,数据库将标记错误。

不一定。如果您运行以下两个语句,

UPDATE foo SET bar=baz WHERE bah=doh;

数据库可以简单地安排一个接一个地运行这些查询。但有plenty of possibilities for a deadlock,一般而言,结果取决于您的查询及其时间,数据集等。

答案 1 :(得分:0)

你不想模拟场景。我读了它,因为你想测试处理乐观锁异常的代码。我只是模拟抛出异常的类并显式抛出OptimisticLockException。在测试环境中使用异常处理程序内的模拟类,并编写测试fr异常处理程序。

我相信你并不担心测试乐观锁是否有效。因为这是Hibernate开发人员的工作。

答案 2 :(得分:0)

您可以使用两个交易来模拟它。 开始第一个tx。 开始第二个tx。 在第一个TX中进行一些更改并提交它。 在第二个TX中进行一些更改并提交它。 Hibernate应该给你OptimisticLockException。