JOTM介绍

JOTM介绍

JOTM (Java Open Transaction Manager)是由ObjectWeb协会开发的功能完整的且开源的事务管理器。

JOTM 提供了以下功能,有助于增强 WEB 应用程序:
1.完全分布式事务支持。

如果数据层、业务层、表示层运行在不同的 JVM 上,则有可能有一个全程的事务跨度这些JVM,事务的内容在RMI/JRMPRMI/IIOP 上传播。
2.整合 JDBC。

使用的 XAPool就是一个 XA-兼容的 JDBC 连接池,可以与数据库相互操作。XAPool 类似于 Jakarta DBCP,只是增加了XA-兼容的特征,如果要结合 JDBC 使用 JTA 事务就必须遵从这个特征。
3.整合 JMS。

JOTM 可以结合 JORAM,JORAM是由ObjectWeb 协会开发的“JMS 提供者”,提供了事务的 JMS 消息。你可以得到出现在 servlet中同一事务的 JMS 消息发送件和更新的数据库
4.WEB 服务(web  service)事务。

JOTM 提供了BTP(Business Transaction Protocol)、JOTM-BTP接口,它们用于在 WEB 服务中增加事务行为。

JOTM简单示例

1.启动JOTM

在jotm发布包根目录下的bin文件下有个jotm脚本文件,执行命令:sh jotm

2.启动数据库

如果是MySQL,请先查看:http://blog.csdn.net/conquer0715/article/details/48215155

3.java示例程序

  1. import org.enhydra.jdbc.standard.StandardXADataSource;  
  2. import org.objectweb.jotm.Jotm;  
  3.   
  4. import javax.naming.Context;  
  5. import javax.sql.XAConnection;  
  6. import javax.transaction.Status;  
  7. import javax.transaction.TransactionManager;  
  8. import javax.transaction.UserTransaction;  
  9. import java.lang.reflect.Field;  
  10. import java.sql.Connection;  
  11. import java.sql.SQLException;  
  12. import java.sql.Statement;  
  13.   
  14. public class JOTMTest {  
  15.   
  16.     public static String getStatusName(int status) {  
  17.         String statusName = null;  
  18.         try {  
  19.             Field[] flds = Status.class.getDeclaredFields();  
  20.             for (int i = 0; i < flds.length; i++) {  
  21.                 if (flds[i].getInt(null) == status) {  
  22.                     statusName = flds[i].getName();  
  23.                     break;  
  24.                 }  
  25.             }  
  26.         } catch (Exception e) {  
  27.             statusName = "invalid status value!";  
  28.         }  
  29.         return statusName;  
  30.     }  
  31.     public static Connection getConnection(TransactionManager tm, String u, String p) throws SQLException {  
  32.         StandardXADataSource standardXADataSource = new StandardXADataSource();  
  33.         standardXADataSource.setDriverName("com.mysql.jdbc.Driver");  
  34.         standardXADataSource.setUrl("jdbc:mysql://127.0.0.1/wangpl");  
  35.         standardXADataSource.setTransactionManager(tm);  
  36.         XAConnection xaconn = standardXADataSource.getXAConnection(u, p);  
  37.         return xaconn.getConnection();  
  38.     }  
  39.   
  40.     public static void main(String[] a) throws Exception {  
  41.         System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.ow2.carol.jndi.spi.MultiOrbInitialContextFactory");  
  42.         System.setProperty(Context.PROVIDER_URL, "rmi://localhost:1099");  
  43.   
  44.         Jotm jotm = new Jotm(false, false);  
  45.         UserTransaction utx = jotm.getUserTransaction();  
  46.   
  47.         System.out.println(getStatusName(utx.getStatus()));  
  48.         utx.begin();  
  49.         System.out.println(getStatusName(utx.getStatus()));  
  50.         try {  
  51.             Connection conn = getConnection(jotm.getTransactionManager(), "root", "pwssword");  
  52.             Statement statement = conn.createStatement();  
  53.             statement.execute("insert into user values('a')");  
  54.         } catch (Exception e) {  
  55.             e.printStackTrace();  
  56.         }  
  57.         try {  
  58.             Connection conn2 = getConnection(jotm.getTransactionManager(), "wangpl", "wangpl");  
  59.             Statement statement = conn2.createStatement();  
  60.             statement.execute("insert into user values('b')");  
  61.         } catch (Exception e) {  
  62.             e.printStackTrace();  
  63.         }  
  64.   
  65. //        utx.commit();  
  66.         utx.rollback();  
  67.         System.out.println(getStatusName(utx.getStatus()));  
  68.   
  69.         jotm.stop();  
  70.     }  
  71. }  

JTA的实现框架有:
GeronimoTM/Jencks  官方文档比较少,不适合学习和维护。
SimpleJTA 没有实现JTS (Java Transaction Service)而且不是活跃的。
Atomikos  是一个另人钦佩的产品。有丰富的文档,而且有很好的支持。
JBossTS  是一个应用在JBOSS服务器上的,肯定是一个成熟的产品,也有好的支持,详细信息可以看这里:http://www.theserverside.com/news  /thread.tss?thread_id=37941

最常见的二个如下:
JOTM
    JOTM(Java Open Transaction Manager)是ObjectWeb的一个开源JTA实现,它本身也是开源应用程序服务器JOnAS(Java Open Application Server)的一部分,为其提供JTA分布式事务的功能。
    存在的问题:使用中不能自动rollback,无论什么情况都commit。注:spring3开始已经不再支持jotm


Atomikos
    大家推荐最多的。和JOTM相比Atomikos Transactions Essentials更加稳定,它原来是商业项目,现在开源了。象mysql一样卖服务支持的。而且论坛页比较活跃,有问题很快可以解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值