我们在 IBM Websphere 8 中使用具有容器管理持久性的 EJB 2.1,并且存在以下问题:即使数据库中只有一个元素用于此搜索条件,单个对象查找器有时也会返回 2 个元素。这只发生在许多线程访问同一个数据库条目时。
我们使用 wsOptimisticUpdate 作为访问意图。在事务内部,首先使用业务键搜索元素(这是单个对象查找器,有时会找到 2 个元素,因此会引发异常),然后进行更新。如果许多线程正在为同一个业务密钥执行此操作,则会发生此错误。
对该异常使用断点并检查数据库上未提交的读取,可以看出数据库中只有一个元素。所以看起来 CMP 实现并不是真正的线程安全。有没有人遇到过这样的问题?
Caused by: javax.ejb.FinderException: Single object finder returned 2 objects.
at
com.ibm.ws.ejbpersistence.beanextensions.ConcreteBeanStatefulInstanceExtensionImpl.executeFind(ConcreteBeanStatefulInstanceExtensionImpl.java:1579)
at