Flex解决方案中的事务:可能性一:JTA

-------------------以下引用一个网友对主题的回复

JTA只是编程接口的标准, 需要底层有Transaction Manager才能工作,Sun有个Java Transaction Service(JTS)的标准,来规范Transaction Manager,JOTM是个开源的对JTS的实现。

JTA/JTS是分布式事务处理(跨越多个数据库),如果只对一个数据库读写,完全没有必要用JTA/JTS,这些操作的代价是很高的,JDBC Connection的commit, rollback足已。

要在业务逻辑里,不用自己编程进行事务处理,据我知只有两种方法,1,EJB, 2, Spring. 要不你自己用AspectJ编个类似的来,够累啊。

以为要用JTA编程,就不用把Connection传来传去么,除了Connection要传,还要传个JTA的UserTransaction.

Java代码
import javax.transaction.*;  
import javax.naming.*;  
// ...  
InitialContext ctx = new InitialContext();  
Object txObj =   
  ctx.lookup("java:comp/UserTransaction");  
UserTransaction utx = (UserTransaction) txObj;  
 
utx.begin();  
// ...  
DataSource ds = obtainXADataSource();  
Connection conn = ds.getConnection();  
pstmt = conn.prepareStatement("UPDATE MOVIES ...");  
pstmt.setString(1, "Spinal Tap");  
pstmt.executeUpdate();  
// ...  
utx.commit();  
// ... 

import javax.transaction.*;
import javax.naming.*;
// ...
InitialContext ctx = new InitialContext();
Object txObj =
  ctx.lookup("java:comp/UserTransaction");
UserTransaction utx = (UserTransaction) txObj;

utx.begin();
// ...
DataSource ds = obtainXADataSource();
Connection conn = ds.getConnection();
pstmt = conn.prepareStatement("UPDATE MOVIES ...");
pstmt.setString(1, "Spinal Tap");
pstmt.executeUpdate();
// ...
utx.commit();
// ...



还是用Spring吧,要不就把Connection传来传去。

你可能感兴趣的:(java,spring,编程,Flex,ejb)