关于事务设计模式的学习记录(一)

Java中有三种可以的事务模式

1、本地事务模型


事实上不是编程框架本身来管理事务,事务是交给本地资源管
理器(local resource manager)来管理的    


2、编程式事务模型


利用了 Java 事务 API(Java Transaction API, JTA)及其底层事务服务实现的
能量以提供事务支持,突破了本地事务模型的种种限制。通过编程式事务模型,开发人员
的编码对象是“事务”,而非连接。


3、申明式事务模式


在声明式事务模型的环境下,软件框架
或“容器”管理了事务的开始和结束(或者提交,或者回滚)。开发人员仅仅需要告诉软件框6
架,碰到应用异常时“去回滚事务”即可,对事务的配置都是通过 EJB 中的 XML 部署描述文件
(例如 ejb-jar.xml)或 Spring 中的 bean 定义文件(例如 ApplicationContext.xml)来完成的。

事务的特性: 原子性 一致性 独立性 持久性 (ACID)

JTA  java 事务Api


UserTransaction接口仅仅用于编程式事务模型,而且主要在 EJB 中使用
常用方法
begin() 
在编程式事务模型中,begin()方法用于开启一个新的事务,并且将此事务与当前线程相关联。
如果某个事务已经与当前线程建立过关联,并且底层事务服务不支持嵌套事务,该方法会抛
出一个 NotSupportedException 异常
commit()
在编程式事务模型中,commit()方法用于提交和当前线程关联的事务,并且终止该事务。这
个方法同时将此事务与当前线程解关联。在 Java 中,仅仅有一个事务能够与当前线程建立
关联。在 XA 环境下,这个方法可能抛出 HeuristicMixedException 或 HeuristicRollbackException,
表示资源管理器做出了独立于事务管理器的决定,在两阶段提交过程中回滚或者部分提交了
该事务。
rollback() 
在编程式事务模型中,rollback()
方法用于回滚和当前线程关联的事务,并终止该事务。 这个
方法同时将此事务与当前线程解关联。
getStatus()
在编程式事务模型中,getStatus()方法返回一个整型数值,用以表示当前事务的状态。这个
整型返回值初看是没有什么意义的,不过我们可以使用 javax.transaction.Status 接口来确定
getStatus()方法返回的值是什么含义。

TransactionManager接口 主要用于声明式事务模型
suspend()暂停
resume() 继续
 
EJBContext 接口
setRollbackOnly() 通知容器

Status接口  我们能够通过 javax.transaction.Status 接口枚举值获取到事务的状态
包括的一些枚举值

  • STATUS_ACTIVE 是否有事务存在
  • STATUS_COMMITTED 
  • STATUS_COMMITTING 
  • STATUS_MARKED_ROLLBACK 是否被标记回滚
  • STATUS_NO_TRANSACTION  确定是否真的没有事务上下文的唯一途径
  • STATUS_PREPARED
  • STATUS_PREPARING
  • STATUS_ROLLEDBACK
  • STATUS_ROLLING_BACK
  • STATUS_UNKNOWN

本地事务模型
    事务被底层数据库(DBMS)或在 JMS 中被底层
消息服务提供者所管理。从开发人员的角度来看,在本地事务模型中,我们所管理的并非“事
务”,而是“连接”。

编程式事务模型
    编程式事务模型和本地事务模型两者最大区别之一是,开发人员使用编程式模型,管理的是
事务(transaction),而不是连接(connection)。编程式事务模型也可用在 servlet 容器之中,能应用于 POJO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值