https://blog.csdn.net/liangkun0124/article/details/51306886
https://blog.csdn.net/majian_1987/article/details/42001797
一、基本概念:
1、java体系:
Java分为三个体系,分别为Java SE(J2SE,Java2Platform Standard Edition,标准版),JavaEE(J2EE,Java 2Platform, Enterprise Edition,企业版),Java ME(J2ME,Java 2Platform Micro Edition,微型版)。
2、JSR:
JSR是JavaSpecification Requests的缩写,意思是“Java 规范提案”。是指向JCP(JavaCommunity Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。简单的就是jsr是java开发者以及授权者指定的标准,而java开发者以及授权者形成一个jcp国际组织。职能是指定java标准。
3、JCP
JCP由SUN于1995年创造Java的非正式过程,演进到如今有数百名来自世界各地Java代表成员一同监督Java发展的正式程序 。(出自百度)
Jcp官方网站是:https://www.jcp.org/en/home/index
二、核心内容:
1、JSR由来:
JCP维护的规范包括J2ME、J2SE、J2EE,XML,OSS,JAIN等。组织成员可以提交JSR(Java Specification Requests),通过特定程序以后主要包括(Java技术规范、参考实现(RI)、技术兼容包(TCK)),进入到下一版本的规范里面。
所有声称符合J2EE规范的J2EE类产品(应用服务器、应用软件、开发工具等),必须通过该组织提供的TCK兼容性测试(需要购买测试包),通过该测试后,需要缴纳J2EE商标使用费。两项完成,即是通过J2EE认证(Authorized Java Licensees of J2EE)。
JSRs是指定的一些标准,在JCP官网上提供了相应标准的下载(https://www.jcp.org/en/home/index)。下面列出了基于java三个平台的一系列标准JSR(标准)链接:
Java EE (54 JSRs) (https://www.jcp.org/en/jsr/platform?listBy=3&listByType=platform)
Java SE (57 JSRs) (https://www.jcp.org/en/jsr/platform?listBy=2&listByType=platform)
Java ME (85 JSRs) (https://www.jcp.org/en/jsr/platform?listBy=1&listByType=platform)
现在我们进入到一个(Java EE (54 JSRs))标准的JSR下载页面(JSR-000907 JTA)的API标准:
其中有下载链接有两个文档,从字面意思明白一个是这些规则及标准的评估,一个是这些规则的实施,打开实施规则的文档可以看出,这些标准提供了一些接口文档和协议。里面提供了一些面对开发人员的接口以及面对具体实现接口的各个软件公司,也就是这些接口的具体的实现包,由各个软件厂商实现。
发人员使用开发人员接口(UserTransaction),实现应用程序对全局事务的支持;各提供商依据提供商接口(Transaction)实现事务资源管理功能;事务管理器(TransactionManager )将开发人员对事务的使用映射到实际的事务资源并在事务资源间进行协调与控制。 下面,本文将对包括UserTransaction、Transaction和 TransactionManager 在内的三个主要接口以及其定义的方法进行介绍。
UserTransaction:
面向开发人员的接口为 UserTransaction,开发人员通常只使用此接口实现 JTA 事务管理,其定义了如下的方法:
begin()- 开始一个分布式事务
commit()- 提交事务
rollback()- 回滚事务
getStatus()- 返回关联到当前线程的分布式事务的状态
setRollbackOnly()- 标识关联到当前线程的分布式事务将被回滚
TransactionManager:
面向提供商的实现接口主要涉及到 TransactionManager 和 Transaction 两个对象
Transaction 代表了一个物理意义(具体实现)上的事务,在开发人员调用 UserTransaction.begin() 方法时 TransactionManager 会创建一个 Transaction 事务对象(标志着事务的开始)并把此对象通过 ThreadLocale 关联到当前线程。UserTransaction 接口中 的 commit()、rollback(),getStatus() 等方法都将最终委托给 Transaction 类的对应方法执行。
Transaction 接口定义了如下的方法:
commit()- 协调不同的事务资源共同完成事务的提交
rollback()- 协调不同的事务资源共同完成事务的回滚
setRollbackOnly()- 标识关联到当前线程的分布式事务将被回滚
getStatus()- 返回关联到当前线程的分布式事务的状态
enListResource(XAResource xaRes, int flag)- 将事务资源加入到当前的事务中
delistResourc(XAResource xaRes, int flag)- 将事务资源从当前事务中删除
registerSynchronization(Synchronization sync)- 回调接口,Hibernate 等 ORM 工具都有自己的事务控制机制来保证事务,但同时 它们还需要一种回调机制以便在事务完成时得到通知从而触发一些处理工作,如清除缓存等。当事务成功提交后,回调程序将被激活。
TransactionManager 本身并不承担实际的事务处理功能,它更多的是充当用户接口和实现接口之间的桥梁。
TransactionManager 中定义的方法:(大部分事务方法与 UserTransaction 和 Transaction 相同)
begin()- 开始事务
commit()- 提交事务
rollback()- 回滚事务
getStatus()- 返回当前事务状态
setRollbackOnly()
getTransaction()- 返回关联到当前线程的事务
setTransactionTimeout(int seconds)- 设置事务超时时间
resume(Transaction tobj)- 继续当前线程关联的事务
suspend()- 挂起当前线程关联的事务
在系统开发过程中会遇到需要将事务资源暂时排除的操作,此时就需要调用 suspend() 方法将当前的事务挂起:在此方法后面所做的任何操作将不会被包括在事务中,在非事务性操作完成后调用 resume()以继续事务(注:要进行此操作需要获得 TransactionManager 对象,其获得方式在不同的 J2EE 应用服务器上是不一样的)。
至此,你也可以自己实现JSRs标准的JTA事务管理了(具体实现在以后的章节中实现)这篇博文知识让各位看官理解java的一些标准的相关定义。以后的博文大多是基于javaEE来进行的。