深入探讨事务管理:JTA与Spring应用实践
多事务资源的事务处理
在大型企业应用中,事务往往会跨越多个组件。若要确保应用的健壮性,不能仅依赖本地事务块,而需借助JTA(Java Transaction API)事务管理器来处理涉及数据库、消息队列等多个事务资源的操作。JTA是支持全局事务的唯一方式,这意味着运行具有全局事务的应用需要J2EE应用服务器。
为了演示如何在数据库和消息队列之间使用JTA事务,我们创建了一个简单的Web应用。该应用会向队列发送消息,消息由MDB(Message-Driven Bean)接收并通知调用。在大约50%的情况下, JTAAccountManager.insert() 方法会抛出 RuntimeException ,此异常会导致消息从队列中移除,数据库操作回滚,MDB也不会被调用。
这个示例应用需要JBoss应用服务器和支持XA协议的JDBC驱动,我们选用了Oracle 10g数据库及其JDBC驱动。应用被打包成EAR文件,包含一个包含消息驱动bean的EJB JAR文件和一个带有测试Web应用的Web模块。由于并非所有bean都在EJB层需要和可用,我们将Spring上下文文件拆分为多个文件:
- applicationContext.xml :保留DAO定义。
- applicationContext-as.xml :使用JNDI数据源定义 dataSource bean。
- applicationContext-jms.xml
超级会员免费看
订阅专栏 解锁全文
1112

被折叠的 条评论
为什么被折叠?



