访问意向异常
以下是对访问意向策略的应用进行响应时出现的异常。
- com.ibm.ws.ejbpersistence.utilpm.OptimisticUpdateFailedException
- 如果由于在装入和存储请求之间的另一个事务中更改了字段而导致乐观并发下的更新失败,那么将产生 OptimisticUpdateFailedException 且落实也会失败。
- com.ibm.ws.ejbpersistence.utilpm.PersistenceManagerException
- 如果驱动 ejbLoad() 方法的方法配置为只读,但在已装入 bean 的状态的事务中做了更新,那么将在调用
ejbStore() 方法期间抛出异常并回滚事务。同样地,ejbRemove() 方法无法在设置为只读的事务中成功完成。
如果在具有 bean 管理的持久性的实体 bean 的方法中应用了更新提示,那么会有相同的行为和异常结果。转发的异常对象包含消息字符串 PMGR1103E: update instance level read only bean beanName
当应用的访问意向策略无法执行时也将抛出此异常,因为 finder 方法、ejbSelect 或容器管理的关系 (CMR) accessor 方法返回一个固定只读结果。转发的异常对象包含消息字符串 PMGR1001: No such DataAccessSpec - methodName
此错误最普遍发生在使用应用的访问意向 wsPessimisticUpdate 或 wsPessimisticUpdate-Exclusive 调用包含只读 EJB 查询语言 (EJB QL) 语句的定制 finder 方法时。这些策略需要使用在要执行 SQL SELECT 语句上的 USE AND KEEP UPDATE LOCKS 子句,但只读查询不能支持 USE AND KEEP UPDATE LOCKS. 其他只读查询的示例包含 joins; 使用 ORDER BY、GROUP BY 和 DISTINCT 关键字。
要消除异常,编辑 EJB 查询以使它不返回固定的只读结果或更改正在应用的访问意向策略。- 如果更新访问是必需的,那么将应用的访问意向设置更改为 wsPessimisticUpdate-WeakestLockAtLoad 或 wsOptimisticUpdate。
- 如果不是确实需要更新访问,那么使用 wsPessimisticRead 或 wsOptimisticRead。
- 如果共享所需实体 bean 之前的连接,那么使用 wsPessimisticUpdate-WeakestLockAtLoad 或 wsPessimisticRead。
- com.ibm.websphere.ejb.container.CollectionCannotBeFurtherAccessed
- 如果迟钝集合在它不再在作用域内并属于已本地缓冲的内容之后驱动,那么将抛出 CollectionCannotBeFurtherAccessed 异常。
- com.ibm.ws.exception.RuntimeWarning
- 如果未正确配置应用程序,那么将在应用程序启动时抛出运行时警告异常;启动结束。可以通过选择验证功能来验证应用程序的配置。一些错误配置的示例包含:
- 使用两个不同的访问意向策略配置的方法
- 使用未定义的访问意向策略配置的方法