Atomikos实现分布式事务开发小结

阅读更多

由于项目中用到了操作多个数据库,并且要在通过Service方法里面完成,为了保证事务同步,引用了Atomikos,可参考http://www.atomikos.com/Documentation/。

 

1、加入Atomikos的相关类库,Maven项目中配置如下:  

 


	com.atomikos
	transactions-jdbc
	3.7.0

 

2、配置数据源,使用atomikos自带的datasource实现类,如AtomikosNonXADataSourceBean,AtomikosDataSourceBean等,经测试AtomikosDataSourceBean这类对数据库的要求挺多的,特别是Oracle,于是采用AtomikosNonXADataSourceBean。我配置了一个MySQL数据源,一个Oracle数据源如下:

 


		
		
		
		
		
		
	
	
	
		
		
		
		
		
		
	

 

3、配置SessionFacotry ,不同的数据源对应不同的SessionFacotry.

	

		
		
			
				com.lyl.**.entity
			
		
		
			
		
		
			
				${mysql.dialect}
				${mysql.hbm2ddl.auto}
				50
				20
				org.hibernate.hql.ast.ASTQueryTranslatorFactory
				
				false
				true
				false
				true
				true
				
					org.hibernate.cache.EhCacheProvider
				
			
		
	

	

		
		
			
				com.lyl.**.entity
			
		
		
			
		
		
			
				${oracle.dialect}
				${oracle.hbm2ddl.auto}
				50
				20
				org.hibernate.hql.ast.ASTQueryTranslatorFactory
				
				false
				true
				false
				true
				true
				false
				
					org.hibernate.cache.EhCacheProvider
				
			
		
	

 

4、配置事务管理。

根据需要配置了两个数据库事务,一个管理单个数据库操作,另一个管理多个数据库操作,配置不同的切面,针对不同的类,采取不同的事务方式。

 

	
		
	
	
	
	
		
			
			
			
			
			
		
	

	
		
	

 

  


		
	

	
		
	

	
	
		
		
	

	
	
		
			
			
			
			
			
		
	

	
		
	

 

  5、配置两个操作不同数据库DAO类。

 

 

 


		
			
		
	

	
		
			
		
	

	
		
	

	
		
	

 

 

6、需要执行分布式事务的Service类。

 

@Service
public class AccountBiz {
	
	@Resource
	private BaseDao mySqlBaseDao;
	
	@Resource
	private BaseDao oracleBaseDao;

	public void transer(Double amount) {
		Account_A a=new  Account_A();
		a.setAid(1L);
		Account_A aa=(Account_A)mySqlBaseDao.findById(a);
		Account_B b=new  Account_B();
		b.setBid(1L);
		Account_B bb=(Account_B)oracleBaseDao.findById(b);
		//bb.setIdNo("88888888");
		Date date=new Date();
		aa.setOpDate(date);
		aa.setAmount(aa.getAmount()+amount);
		bb.setOpDate(date);
		bb.setAmount(bb.getAmount()-amount);
		
		mySqlBaseDao.update(aa);
		oracleBaseDao.update(bb);
	}
	
	
}

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(分布式事务,atomikos)