组装的 EJB 模块中容器管理的持久性的序列分组
在组装包含容器管理的持久性 (CMP) Bean 的 Enterprise JavaBeans (EJB) 模块之后,您就可以避免在应用程序运行时期间发生特定类型的数据库相关的异常。使用序列分组,您可以指定实体 Bean 更新关系数据库表的顺序。
注: 实体 Bean 在 EJB 3.x 模块中不受支持。
除去引用完整性 (RI) 违例导致的异常
序列分组对于避免数据库引用完整性 (RI) 的违例特别有用。数据库 RI 策略规定了将数据写到数据库表以及从数据库表删除数据的规则,以维持关系的一致性。但是,管理 bean 持久性的运行时需求可能导致 EJB 应用程序违反 RI 规则,这可能会导致数据库异常。以下运行时需求规定:
- 实体 Bean 在方法调用之后立即创建并移除与数据库相关的操作。
- EJB 容器高速缓存实体 Bean 更改,直到调用 finder 方法或事务结束。
保证遵循数据库 RI 的持入性序列的唯一方式是指定该序列,您可以在组装工具的 EJB 部署描述符编辑器中完成这一操作。通过序列分组功能,您可以将 Bean 指定到 CMP 组。在每个组中指定持久性管理器将 Bean 数据插入数据库的顺序,以便在不违反 RI 的情况下完成更新。
请参阅为 CMP 序列组设置运行时主题以获取关于指定序列组的详细指示信息。咨询您的数据库管理员,以便了解需要用于同步的 RI 策略。
使乐观并发控制方案的异常风险最小化
序列分组还可以降低为乐观并发控制配置的实体 Bean 出现事务回滚异常的风险。在这些并行控制方案中,数据库锁定状态保持最短的时间,以便有最多数量的事务一直具有对数据的访问权。数据库的相对不受限的状态可能会由于以下两个常见原因而导致事务回滚异常:
- 当并行事务尝试锁定表中的同一行时,发生数据库死锁。
- 事务可能以违反应用程序逻辑的顺序发生。
使用序列分组功能给 Bean 持久性排序,以使这些情况发生的可能性减小。