看完了经乾的《TUXEDO系统经典》后,觉得tuxedo的事务处理功能是无比强大,当时心里就想如果能用JAVA来实现Tuxedo所有功能,那将是一个无比强大的分布式事务处理系统。当我看到atomikos时,我知我找到自己一心要寻找的事务处理工具。atomikos目前中文文档还很少,更没有完整的中文文档,本人读书甚少。没有能力能她的E文文档翻译成中文。今天是学习atomikos的第一天,终于把一个简单的例子做完,现在贴出来与大家共享,接下来俺要好好看她的E文文档了。applicationContext.xml配置
<!--Atomikos JTA 事务 begin-->
<bean id="dataSource1" class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close">
<property name="uniqueResourceName">
<value>mysql/main</value>
</property>
<property name="xaDataSourceClassName">
<!-- 使用Mysql XADataSource(mysql>=5.0, Connector/J>=5.0才可以支持XADatasource)-->
<value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value>
</property>
<property name="xaDataSourceProperties">
<value>URL=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8;user=root;password=123456</value>
</property>
<property name="exclusiveConnectionMode">
<value>true</value>
</property>
<property name="connectionPoolSize">
<value>3</value>
</property>
<property name="validatingQuery">
<value>SELECT 1</value>
</property>
</bean>
<bean id="dataSource2" class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close">
<property name="uniqueResourceName">
<value>mysql/secondary</value>
</property>
<property name="xaDataSourceClassName">
<!-- 使用Mysql XADataSource(mysql>=5.0, Connector/J>=5.0才可以支持XADatasource)-->
<value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value>
</property>
<property name="xaDataSourceProperties">
<value>URL=jdbc:mysql://localhost:3306/aotsf?useUnicode=true&characterEncoding=utf-8;user=root;password=123456</value>
</property>
<property name="exclusiveConnectionMode">
<value>true</value>
</property>
<property name="connectionPoolSize">
<value>3</value>
</property>
<property name="validatingQuery">
<value>SELECT 1</value>
</property>
</bean>
<bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">
<property name="forceShutdown"><value>true</value></property>
</bean>
<bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
<property name="transactionTimeout" value="300"/>
</bean>
<bean id="springTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager">
<ref bean="atomikosTransactionManager"/>
</property>
<property name="userTransaction">
<ref bean="atomikosUserTransaction"/>
</property>
</bean>
<bean id="atomikosTransactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager">
<ref bean="springTransactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean>
<bean id="jdbcBookDAO" class="dao.jdbc.BookDAO">
<property name="dataSource">
<ref bean="dataSource1"/>
</property>
</bean>
<bean id="jdbcTestDAO" class="dao.jdbc.TestDAO">
<property name="dataSource">
<ref bean="dataSource2"/>
</property>
</bean>
<bean id="atomikosJTAServiceDemo" parent="atomikosTransactionProxy">
<property name="target">
<bean class="service.AtomikosJTAServiceDemo">
<property name="jdbcBookDAO">
<ref bean="jdbcBookDAO"/>
</property>
<property name="jdbcTestDAO">
<ref bean="jdbcTestDAO"/>
</property>
</bean>
</property>
</bean>
<!--Atomikos JTA 事务 end -->
DAO层代码
package dao.jdbc;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import domain.Book;
public class BookDAO extends JdbcDaoSupport{
public void addBook(Book book){
try{
JdbcTemplate jt=getJdbcTemplate();
String str_sql="insert into Book(isbn,bookname,author,note)VALUES(?,?,?,?)";
String[] args={book.getIsbn(),book.getBookname(),book.getAuthor(),book.getNote()};
jt.update(str_sql, args);
}catch(RuntimeException e){
System.out.println("添加Book失败");
e.printStackTrace();
throw e;
}
}
}
package dao.jdbc;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
public class TestDAO extends JdbcDaoSupport{
public void addBook(Integer id, String email){
try{
JdbcTemplate jt=getJdbcTemplate();
String str_sql="insert into test(id,email)VALUES(?,?)";
Object[] args={id,email};
jt.update(str_sql, args);
}catch(RuntimeException e){
System.out.println("添加Test失败");
e.printStackTrace();
throw e;
}
}
}
事层代码
package service;
import dao.jdbc.BookDAO;
import dao.jdbc.TestDAO;
import domain.Book;
public class AtomikosJTAServiceDemo {
private BookDAO jdbcBookDAO;
private TestDAO jdbcTestDAO;
public String ok(){
System.out.println("开始.");
jdbcTestDAO.addBook(Integer.valueOf("2"), "pdw2009 tom.com");
Book book=new Book();
book.setIsbn("ccdada66");
book.setAuthor("小东");
book.setNote("JTA测试");
book.setBookname("Atomikos学习");
jdbcBookDAO.addBook(book);
System.out.println("结束.");
return "ok";
}
public BookDAO getJdbcBookDAO() {
return jdbcBookDAO;
}
public void setJdbcBookDAO(BookDAO jdbcBookDAO) {
this.jdbcBookDAO = jdbcBookDAO;
}
public TestDAO getJdbcTestDAO() {
return jdbcTestDAO;
}
public void setJdbcTestDAO(TestDAO jdbcTestDAO) {
this.jdbcTestDAO = jdbcTestDAO;
}
}
测试用例
package services;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import service.AtomikosJTAServiceDemo;
public class AtomikosJTAServiceDemoTest {
ApplicationContext acx=null;
AtomikosJTAServiceDemo atomikosJTAServiceDemo=null;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Before
public void setUp() throws Exception {
acx=new ClassPathXmlApplicationContext("applicationContext.xml");
atomikosJTAServiceDemo=(AtomikosJTAServiceDemo) acx.getBean("atomikosJTAServiceDemo");
}
@After
public void tearDown() throws Exception {
}
@Test
public void notnullTest()throws Exception{
assertNotNull(atomikosJTAServiceDemo);
}
@Test
public void okTest()throws Exception{
assertEquals(atomikosJTAServiceDemo.ok(),"ok");
}
}
posted on 2008-05-25 15:19
有猫相伴的日子 阅读(12710)
评论(4) 编辑 收藏 所属分类:
spring