我们在 EJB 3.0 / JPA 1.0 / DB2 10.1 应用程序中遇到表锁定和死锁问题。我们发现,如果在支持事务的 ejb 方法中执行简单的 SELECT 查询,记录会被锁定(下一个键共享锁定 - NS 锁定模式),最终导致潜在的死锁问题。如果在没有事务的情况下在 ejb 方法中执行相同的查询,则不会发生锁定,我认为这是应该的方式。
问题:我们有 ejb ejbA 和需要事务的 methodA。我们有带有 methodB 的 ejbB,它具有简单的选择查询,并且不应在事务中运行,因此我们将 trnasaction 属性设置为:NotSupported。我们从methodA调用methodB。
Oracle EE6 教程说:如果客户端在事务中运行并调用企业 bean 的方法,则容器在调用该方法之前暂停客户端的事务。该方法完成后,容器恢复客户端的事务。
据我们了解,methodB 应该暂停来自 methodA 的事务并且不应该锁定记录,但确实如此,这使我得出结论事务没有暂停。
您能否帮助我们解决和理解该行为。