标签:
1.事务
是指访问并可能更新数据库中各种数据项的一个程序执行单元。事务管理是对一系列操作的管理,它最终只要两个结果,要么成功,要么失败。一旦失败,所有的操作将回滚到初始状态;成功才最终提交,最终持久化。
2.事务的特性ACID
原子性、一致性、隔离性、持久性
原子性(atomicity)。一个事务是一个不可分割的工作单位,要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即并发执行的各个事务之间不能互相干扰。
持久性(durability)。指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
3.JPA中的事务
JPA中的事务管理有两种方式,分别是JTA和RESOURCE_LOCAL。他的事务类型是通过persistence.xml文件中的“transaction-type”元素来配置的。
<persistence>
<persistence-unit name="demo"transaction-type="JTA">
//其他配置。。。。。。
</persistence-unit>
</persistence>
<persistence>
<persistence-unit name="demo"transaction-type="RESOURCE_LOCAL">
//其他配置。。。。。。
</persistence-unit>
</persistence>
1)JTA事务
JTA事务(Java TransactionAPI)是J2EE规范中有关事务的标准。它是容器级别的事务,只能运行在J2EE服务器中。它的最大优势是可以支持分布式的事务,如果系统采用的是分布式的数据库,那么只能选择JTA管理EntityManager事务。注意:
JTA事务只能运行在J2EE的环境中,即EJB容器中和Web容器中;而在J2SE环境中只能使用RESOURCE_LOCAL管理事务。
容器托管的EntityManager对象只能采用JTA的事务,而不能采用RESOURCE_LOCAL事务。
2)RESOURCE_LOCAL事务
RESOURCE_LOCAL事务是本地的事务。它是数据库级别的事务,只能针对一种数据库,不支持分布式的事务。对于中小型的应用,可以采用RESOURCE_LOCAL管理 EntityManager事务。注意:
在J2SE环境中,只能使用RESOURCE_LOCAL管理EntityManager事务,并且EntityManager对象是以应用托管方式获得的。
代码中使用RESOURCE_LOCAL管理事务时,要通过调用EntityManager的getTransac-tion()方法获得本地事务对象。
4.总结
如果要使用分布式事务就只能选择JTA,RESOURCE_LOCAL事务不支持分布式事务,且得自己手动管理事务,每次操作都得手动开启事务——getTransaction().begin()和关闭事务——getTransaction().commit()。
标签:
原文地址:http://blog.csdn.net/zuozuo1245/article/details/44281385