diff --git a/分布式事务/atomikos/atomikos.md b/分布式事务/atomikos/atomikos.md index 8dc4d23..951947d 100644 --- a/分布式事务/atomikos/atomikos.md +++ b/分布式事务/atomikos/atomikos.md @@ -45,4 +45,68 @@ XA(eXtended Architecture)是一个标准,用于访问位于同一全局事务 #### XA的好处 因为XA是一种标准,故而作为全局事务的一部分,任何特定实现的数据库driver实现都可以和任一其他平台的事务管理器一起工作,XA基于两阶段提交提供了将不同平台的数据库driver和事务管理器整合到一起的能力。 -#### XA in Java +### TransactionsEssentials +#### 底层实现 +Atomikos通过模块化的方式进行设计,其存在一个叫做`icatch`的内核,内核提供了专有api。许多transactional service都基于icatch内核提供的api构建,例如JTA,基于icatch api实现了JTA api。 + +atomikos是嵌入式的transaction manager,其是嵌入java应用的,并不需要启动独立的transaction manager服务。 + +#### 通过Atomikos编码 +在编写代码时,通常仅使用JTA api,并不需要使用icatch api。 + +为了初始化transaction manager,需要创建`com.atomikos.icatch.jta.UserTransactionManager`实例,并且调用实例的`init`方法,并且在应用关闭时,需要调用事务管理器的`close`方法。 + +`com.atomikos.icatch.jta.UserTransactionManager`实现了`javax.transaction.TransactionManager`,可以通过`begin()`、`commit()`、`rollback()`来控制事务。 + +在初始化事务时,会读取classpath的根路径读取`jta.properties`文件。 + +#### 简单的jta示例 +```java +import com.atomikos.icatch.jta.UserTransactionManager; +import com.atomikos.jdbc.AtomikosDataSourceBean; + +import javax.jta.TransactionManager; +import javax.sql.DataSource; + +public class AtomikosExample { + + // Atomikos implementations + private static UserTransactionManager utm; + private static AtomikosDataSourceBean adsb; + + // Standard interfaces + private static TransactionManager tm; + private static DataSource ds; + + // initialize resources + private static void init() { + utm = new UserTransactionManager(); + utm.init(); + tm = utm; + + adsb = ...; // omitted for clarity + ds = adsb; + } + + // release resources + private static void shutdown() { + adsb.close(); + utm.close(); + } + + public static void main(String[] args) { + init(); + + tm.begin(); + + Connection c = ds.getConnection(); + // use connection to execute SQL + c.close(); + + tm.commit(); + + shutdown(); + } + +} +```