最近有人问我一个问题,这让我思考......想了解社区对同一问题的看法。
我有一个 CustomerEJB,它有一个 createCustomer 方法。我的 EJB 作为 Web 服务公开,因此 createCustomer 是其操作之一。
当请求命中createCustomer时,需要执行2个操作
- 对数据库进行 INSERT SQL 查询,可能会将输入请求中传入的某些数据添加到数据库中
- 在文件系统中创建一个文本文件,例如 .txt。
现在的问题是我想将这两个任务耦合到一个事务中。如果任何一项任务失败,我也会回滚另一项任务。
在不提及任何热门技术(例如 Spring/Hibernate)的情况下,我可以遵循的事务管理方法是什么
我的想法: 1.我可以使用JTA,划定事务边界并相应地执行提交和回滚。 JDBC 可用于 SQL 任务 2.我可以使用DAO
诚邀您提出建议/意见
最佳答案
您需要将创建的文件包装在支持 XA 的 JCA 连接器中(不确定是否有现成的连接器,快速发现这个 fsconnector 尚不支持事务),并为数据库事务使用 XA 驱动程序(大多数数据库将能够处理此问题),然后将 EJB 包装在 XA 事务中(应该很简单)。
只要两个资源都可以处理 XA 事务,您就会获得两阶段提交的好处,这就是您所追求的。
关于java - EJB 中的事务管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12931808/