首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

在Spring中应用JTA事务管理(二)

2012-07-02 
在Spring中使用JTA事务管理(二)?转载bean idjotmclassorg.springframework.transaction.jta.JotmFac

在Spring中使用JTA事务管理(二)

?

转载<bean id="jotm"class="org.springframework.transaction.jta.JotmFactoryBean"?/>①JOTM本地实例?在Spring中应用JTA事务管理(二)?②JTA事务管理器?在Spring中应用JTA事务管理(二)<bean id="txManager"class="org.springframework.transaction.jta.JtaTransactionManager">在Spring中应用JTA事务管理(二)<property name="userTransaction"?ref="jotm"?/>?②-1:指定userTransaction属性?在Spring中应用JTA事务管理(二)</bean>在Spring中应用JTA事务管理(二)③XAPool配置,内部包含了一个XA数据源,对应topicdb数据库?在Spring中应用JTA事务管理(二)<bean id="topicDS"class="org.enhydra.jdbc.pool.StandardXAPoolDataSource"在Spring中应用JTA事务管理(二)destroy-method="shutdown">在Spring中应用JTA事务管理(二)<property name="dataSource">在Spring中应用JTA事务管理(二)③-1:内部XA数据源?在Spring中应用JTA事务管理(二)<bean?class="org.enhydra.jdbc.standard.StandardXADataSource"在Spring中应用JTA事务管理(二)destroy-method="shutdown">在Spring中应用JTA事务管理(二)<property name="transactionManager"ref="jotm"?/>在Spring中应用JTA事务管理(二)<property name="driverName"value="com.MySQL.jdbc.Driver"?/>在Spring中应用JTA事务管理(二)<property name="url"value="jdbc:MySQL://localhost:3309/topicdb"?/>在Spring中应用JTA事务管理(二)</bean>在Spring中应用JTA事务管理(二)</property>在Spring中应用JTA事务管理(二)<property name="user"?value="root"?/>在Spring中应用JTA事务管理(二)<property name="password"value="1234"?/>在Spring中应用JTA事务管理(二)</bean>在Spring中应用JTA事务管理(二)④按照③相似的方式配置另一个XAPool,对应postdb数据库,?在Spring中应用JTA事务管理(二)<bean id="postDS"class="org.enhydra.jdbc.pool.StandardXAPoolDataSource"在Spring中应用JTA事务管理(二)destroy-method="shutdown">在Spring中应用JTA事务管理(二)<property name="dataSource">在Spring中应用JTA事务管理(二)<beanclass="org.enhydra.jdbc.standard.StandardXADataSource"在Spring中应用JTA事务管理(二)destroy-method="shutdown">在Spring中应用JTA事务管理(二)<property name="transactionManager"ref="jotm"?/>在Spring中应用JTA事务管理(二)<property name="driverName"value="com.mysql.jdbc.Driver"?/>在Spring中应用JTA事务管理(二)<property name="url"value="jdbc:mysql://localhost:3309/postdb"?/>在Spring中应用JTA事务管理(二)</bean>在Spring中应用JTA事务管理(二)</property>在Spring中应用JTA事务管理(二)<property name="user"?value="root"?/>在Spring中应用JTA事务管理(二)<property name="password"value="1234"?/>在Spring中应用JTA事务管理(二)</bean>在Spring中应用JTA事务管理(二)⑤配置访问topicDB数据源的Spring JDBC模板?在Spring中应用JTA事务管理(二)<bean id="topicTemplate"在Spring中应用JTA事务管理(二)class="org.springframework.jdbc.core.JdbcTemplate">在Spring中应用JTA事务管理(二)<property name="dataSource"?ref="topicDS"?/>在Spring中应用JTA事务管理(二)</bean>在Spring中应用JTA事务管理(二)⑥配置访问postDB数据源的Spring JDBC模板?在Spring中应用JTA事务管理(二)<bean id="postTemplate"在Spring中应用JTA事务管理(二)class="org.springframework.jdbc.core.JdbcTemplate">在Spring中应用JTA事务管理(二)<property name="dataSource"?ref="postDS"?/>在Spring中应用JTA事务管理(二)</bean>在Spring中应用JTA事务管理(二)⑦基于topicTemplate数据源的topicDao?在Spring中应用JTA事务管理(二)<bean id="topicDao"class="com.baobaotao.dao.jdbc.TopicJdbcDao">在Spring中应用JTA事务管理(二)<property name="jdbcTemplate"?ref="topicTemplate"?/>在Spring中应用JTA事务管理(二)</bean>在Spring中应用JTA事务管理(二)⑧基于postTemplate数据源的postDao?在Spring中应用JTA事务管理(二)<bean id="postDao"class="com.baobaotao.dao.jdbc.PostJdbcDao">在Spring中应用JTA事务管理(二)<property name="jdbcTemplate"?ref="postTemplate"?/>在Spring中应用JTA事务管理(二)</bean>在Spring中应用JTA事务管理(二)⑨进行跨数据库JTA事务的业务类?在Spring中应用JTA事务管理(二)<bean id="bbtForum"class="com.baobaotao.service.impl.BbtForumImpl">在Spring中应用JTA事务管理(二)<property name="topicDao"?ref="topicDao"?/>在Spring中应用JTA事务管理(二)<property name="postDao"ref="postDao"?/>在Spring中应用JTA事务管理(二)</bean>在Spring中应用JTA事务管理(二)⑩对BbtForumImpl业务类中的@Transaction注解进行驱动?在Spring中应用JTA事务管理(二)<tx:annotation-driven transaction-manager="txManager"?/>在Spring中应用JTA事务管理(二)
????首先,我们在①处通过Spring所提供的JotmFactoryBean创建一个本地JOTM实例,该实例同时实现了??javax.transaction.UserTransaction和javax.transaction.TransactionManager接口,它可以和ObjectWeb的XAPool一起工作。
JTA事务管理器通过userTransaction属性引用本地JOTM实例,Spring的JtaTransactionManager会自动探测到传入的javax.transaction.UserTransaction引用也实现了javax.transaction.TransactionManager,所以我们无需再配置JtaTransactionManager的transactionManager属性,如②所示。
?????在Spring中配置JOTM的另一个关键问题是配置XAPool,支持JTA事务的数据源必须封装成XAPool。首先,我们通过org.enhydra.jdbc.standard.StandardXADataSource 配置一个XA数据源,它指向topicdb数据库,如③-1所示。而后,通过org.enhydra.jdbc.pool.StandardXAPoolDataSource将其封装成一个XAPool,如③所示。按照相同的方式,配置指向postdb数据库的XAPool,如④所示。
?????接下来的配置就顺理成章了,分别使用Spring JDBC的模板类配置DAO类,然后再配置引用DAO类的业务类。关于Spring JDBC的详细内容,参见第10章的内容。
?????这里,我们使用@Transaction注解对业务类BbtForumImpl进行事务声明,所以通过<tx:annotation-driven/>对此进行驱动,BbtForumImpl的代码如下所示:
代码清单 2 BbtForumImpl
在Spring中应用JTA事务管理(二)package com.baobaotao.service.impl;?在Spring中应用JTA事务管理(二)import org.springframework.transaction.annotation.Transactional;?在Spring中应用JTA事务管理(二)import com.baobaotao.dao.PostDao;?在Spring中应用JTA事务管理(二)import com.baobaotao.dao.TopicDao;?在Spring中应用JTA事务管理(二)import com.baobaotao.domain.Forum;?在Spring中应用JTA事务管理(二)import com.baobaotao.domain.Topic;?在Spring中应用JTA事务管理(二)import com.baobaotao.service.BbtForum;?在Spring中应用JTA事务管理(二)@Transactional ①事务注解,以便Spring动态织入事务管理功能?在Spring中应用JTA事务管理(二)public?class?BbtForumImpl implements BbtForum?{?在Spring中应用JTA事务管理(二)private?TopicDao topicDao;?在Spring中应用JTA事务管理(二)private?PostDao postDao;?在Spring中应用JTA事务管理(二)public?voidaddTopic(Topic topic) throws Exception?{ ②将方法将被施加JTA事务的增强?在Spring中应用JTA事务管理(二)topicDao.addTopic(topic);?在Spring中应用JTA事务管理(二)postDao.addPost(topic.getPost());?在Spring中应用JTA事务管理(二)}在Spring中应用JTA事务管理(二)}
????BbtForumImpl将Dao类组织起来,PostDao和TopicDao分别访问不同数据库中表,通过Spring注解驱动事务切面的增强后,它们将工作于同一个JTA事务中。

?