使用 WSJPA 访问意向
Java™ 持久性 API (JPA) 访问意向指定从数据源中读取数据时使用的隔离级别和锁定级别。访问意向控制 Java 数据库连接 (JDBC) 隔离级别以及检索数据时是需要读锁定、更新锁定还是互斥锁定。
关于此任务
注: JPA
访问意向是 OpenJPA 的 WebSphere (WSJPA) 扩展的 JPA。
限制:
- 访问意向可用于 Java EE 服务器环境中的应用程序
- 访问意向适用于非查询实体管理器接口方法。查询将使用查询提示接口来设置其隔离和读锁定值。
- 访问意向仅可用于 DB2® 数据库。
- 仅当使用悲观锁管理器时,访问意向才有效。请在持久性单元属性列表中添加以下内容。<property name="openjpa.LockManager" value="pessimistic"/>
WebSphere® EJB 2.x 实体 bean 访问意向 | JPA 访问意向 | 描述 |
---|---|---|
乐观 | 隔离:已落实的读 | 读取数据,但不挂起锁定。执行更新时,使用版本标识来确保数据完整性。其他事务可以读取和更新数据。 |
锁管理器:乐观 | ||
查询提示:ReadLockMode:READ | ||
悲观读 | 隔离:可重复读 | 使用共享锁定来读取数据。其他尝试更新数据的事务将被阻塞。 |
锁管理器:乐观 | ||
查询提示:ReadLockMode:READ | ||
悲观更新 | 隔离:可重复读 | 使用更新或互斥锁定来检索数据。其他写操作将被阻塞到落实为止。当存在多个写程序时,此访问意向可用于将数据更新访问序列化。 |
锁管理器:悲观 | ||
查询提示:ReadLockMode:WRITE | ||
悲观互斥 | 隔离:可序列化 | 使用更新或互斥锁定来检索数据。其他写操作将被阻塞到落实为止。当存在多个写程序时,此访问意向可用于将数据更新访问序列化。 |
锁管理器:悲观 | ||
查询提示:ReadLockMode:WRITE |
TaskName 由下列其中一项对事务上下文设置:
- 当一个事务开始使用 WebSphere 本地事务(EJB 未指定的事务)、容器管理的事务 (CMT) 中的 JTA 全局事务或者 bean 管理的事务 (BMT) 中用户启动的全局事务时,将在 EJB 容器中自动设置 TaskName。
- 在应用程序中,可以使用为 JPA 提供的 TaskNameAccessor API 来手动设置 TaskName。
使用任务名可支持对请求作用域指定访问意向,而不必在具有跨所有实体的应用程序作用域的 persistence.xml 文件中指定此意向。通常,查询包含在用于许多不同事务上下文的方法或组件中。其中的某些上下文可能需要可重复读和更新锁定意向,而其他上下文却并非如此。
可以对下列各项指定隔离级别和读锁定:
- 在 persistence.xml 文件中对应用程序作用域进行指定。这些隔离级别和读锁定类型是 persistence.xml 文件中指定的属性。它们将应用于持久性单元中定义的所有实体。
- 任务名称中的事务作用域。事务作用域提示将覆盖应用程序作用域值。
- 通过查询提示对查询实例进行指定。查询提示可用于覆盖特定查询实例的隔离和 ReadLockMode。查询提示将覆盖对应用程序或事务作用域指定的隔离级别和读锁定。
过程
- 使用 TaskNameAccessor API 设置 TaskName 此项任务说明了如何使用 TaskNameAccessor API 在运行时设置 JPA TaskName。
- 在 JPA 持久性单元中指定 TaskName 此项任务说明了如何在 JPA 持久性单元中指定 TaskName。