Spring JTA应用之Atomikos配置

Atomikos,是一个基于Java的开源事务管理器,提供了事务管理和连接池,不需要应用服务器支持,支持JDBC和JMS事务,能提供对Spring,Hibernate的集成,有兴趣多了解的可以直接参考说明文当,有详细的介绍和使用说明。

Atomikos可以到http://www.atomikos.com/products.html#ate下载,最新版本是3.2.0

首先,仍然是一个相关的配置文件,用来设置相关的环境,打开解压缩后Atomikos根目录,拷贝jta.properties到classpath中,并修改为如下内容
jta.properties

Java代码
  1. com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory   
  2. com.atomikos.icatch.console_file_name = tm.out   
  3. com.atomikos.icatch.log_base_name = tmlog   
  4. com.atomikos.icatch.tm_unique_name = com.atomikos.spring.jdbc.tm   
  5. com.atomikos.icatch.console_log_level = INFO   
com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory com.atomikos.icatch.console_file_name = tm.out com.atomikos.icatch.log_base_name = tmlog com.atomikos.icatch.tm_unique_name = com.atomikos.spring.jdbc.tm com.atomikos.icatch.console_log_level = INFO



随后,是Spring上下文配置,建立一个名为ApplicationContext-atomikos.xml的Spring上下文

ApplicationContext-atomikos.xml

Java代码
  1. "1.0" encoding="UTF-8"?>   
  2. "http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">   
  5.        
  6.     "datasource1" class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close">      
  7.         "uniqueResourceName">      
  8.             mysql/main      
  9.               
  10.         "xaDataSourceClassName">      
  11.             com.mysql.jdbc.jdbc2.optional.MysqlXADataSource      
  12.               
  13.         "xaDataSourceProperties">      
  14.             URL=jdbc:mysql://localhost:3306/test;user=root;password=admin      
  15.               
  16.         "exclusiveConnectionMode">      
  17.             true      
  18.               
  19.         "connectionPoolSize">      
  20.             3      
  21.               
  22.         "validatingQuery">      
  23.             SELECT 1      
  24.               
  25.        
  26.        
  27.     "datasource2" class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close">      
  28.         "uniqueResourceName">      
  29.             mysql/news   
  30.               
  31.         "xaDataSourceClassName">      
  32.             com.mysql.jdbc.jdbc2.optional.MysqlXADataSource      
  33.            
  34.         "xaDataSourceProperties">      
  35.             URL=jdbc:mysql://localhost:3306/test2;user=root;password=admin      
  36.               
  37.         "exclusiveConnectionMode">      
  38.             true      
  39.               
  40.         "connectionPoolSize">      
  41.             3      
  42.               
  43.         "validatingQuery">      
  44.             SELECT 1      
  45.               
  46.        
  47.        
  48.     "template1" class="org.springframework.jdbc.core.JdbcTemplate">   
  49.         "dataSource" ref="datasource1" />   
  50.        
  51.        
  52.     "template2" class="org.springframework.jdbc.core.JdbcTemplate">   
  53.         "dataSource" ref="datasource2" />   
  54.        
  55.            
  56.     "atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">   
  57.         "forceShutdown">true   
  58.        
  59.        
  60.     "atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">   
  61.         "transactionTimeout" value="300"/>    
  62.        
  63.   
  64.     "springTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">   
  65.         "transactionManager">"atomikosTransactionManager"  />   
  66.         "userTransaction">"atomikosUserTransaction"  />   
  67.        
  68.        
  69.     "dao1" class="com.xa.dao.UserDao1">   
  70.         "jdbcTemplate">   
  71.             "template1">   
  72.            
  73.        
  74.        
  75.     "dao2" class="com.xa.dao.UserDao2">   
  76.         "jdbcTemplate">   
  77.             "template2">   
  78.            
  79.        
  80.        
  81.     "userServiceTarget" class="com.xa.service.UserServiceImpl">   
  82.         "dao1" ref="dao1"/>   
  83.         "dao2" ref="dao2"/>   
  84.        
  85.        
  86.     "userTest" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">       
  87.         "transactionManager">   
  88.             "springTransactionManager"/>   
  89.                
  90.         "target">   
  91.             "userServiceTarget"/>   
  92.            
  93.         "transactionAttributes">           
  94.                
  95.                 "insert*">PROPAGATION_REQUIRED,-Exception               
  96.                
  97.            
  98.        
  99.   
看上下文中的代码,很大部分和JOTM的相似,atomikos使用com.atomikos.jdbc.SimpleDataSourceBean类来创建datasource bean,这里需要特别注意
Java代码
  1. "uniqueResourceName">      
  2.     mysql/main      
  3.     
 mysql/main 

 

Java代码
  1. "uniqueResourceName">      
  2.     mysql/news   
  3.   
 mysql/news 


上面的代码为每个Datasource配置了一个唯一的名称,名称不允许相同,否则将会使用同一个datasource,而不会出现异常。

另外在配置文件中定义了Atomikos的事务管理器,并在Spring的JtaTransactionManager中引用

Java代码
  1. "atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">   
  2.         "forceShutdown">true   
  3.        
  4.        
  5.     "atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">   
  6.         "transactionTimeout" value="300"/>    
  7.        
  8.   
  9.     "springTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">   
  10.         "transactionManager">"atomikosTransactionManager"  />   
  11.         "userTransaction">"atomikosUserTransaction"  />   
  12.       


其它的代码没什么特别,和JOTM配置基本相同,JdbcTemplate,DAO,Service,事务代理等等....

仍然使用TestXa.java,修改成引用ApplicationContext-atomikos.xml的上下文配置

Java代码
  1. protected String[] getConfigLocations() {   
  2.     //return new String[] { "classpath:ApplicationContext-jotm.xml" };   
  3.     return new String[] { "classpath:ApplicationContext-atomikos.xml" };   
  4. }  
protected String[] getConfigLocations() { //return new String[] { "classpath:ApplicationContext-jotm.xml" }; return new String[] { "classpath:ApplicationContext-atomikos.xml" }; }



运行test,然后查看数据库状态,
然后修改方法参数使其不违反数据库约束,再运行Test观察数据库。

你可能感兴趣的:(MVC+ORM)