hibernate_SessionFactory_getCurrentSession_JTA简介
JTA:java transaction api
java里所规定的一种管理事务的API
在另一篇播客我写到了,SessionFactory需要关注两个方法,
即: openSession 和 getCurrentSession
i. openSession 每次都是新的,需要close
ii. getCurrentSession 从上下文找,如果有,用旧的,如果没有,建新的
1,用途,界定事务边界
2,事务提交自动close
3,跟current_session_context_class (JTA、thread) 有关系
a)thread 使用 connection
下面就说说什么是上下文?
什么是上下文,是在配置文件hibernate.cfg.xml里指定的:
current_session_context_class:当前的session运行的环境的上下文。
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
查hibernate的文档:
取值有四种:
1,jta *(重点说这个)
2,thread ***最常用
从当前线程里找,看有没有一个对象是 session,如果有,就用已经存在的,如果没有,就创建新的。
3,managed 极少用,可以忘了。
在J2ee里,EJB 的 Application Server 应用服务器,用来手工管理事务用managed,用的极少,可以忘了。
4,customer.class 没必要,可以忘了
自定义的class来管理currentSession。
先说结论:
事务有两种:
1,依赖于数据库本身的,简称Connection事务,只针对一个数据库。
2,JTA事务:分布式
我们这里指定的东西主要和事务有关系,如果指定的是thread,这时使用Connection(数据库连接)来帮你管理事务。connection.setAutoCommit(false),执行一系列操作,当catch到异常,connection.rollback(),没有异常,commit。但是有一种事务使用一个Connection是管理不了的,例:
处理订单:
DB1是产品数据库,DB2是财务的数据库。这两个数据库假设一个是mysql,一个是oracle,一个在北京,一个在上海。
要求客户端请求处理一个订单,往DB1里添加订单 (操作一),同时,向财务数据库DB2里记录财务信息(操作二),这两个操作必须在同一个事务里。
这时如果只有一个Connection,这两个操作就不能在一个事务里,目前的事务依赖于数据库本身的能力,还不能保证操作二出问题时,操作一也得回滚,保证不了。此时只有一个Connection是不行的。
这时需要一个专门的事务管理器,因为这种情况只依赖于数据库本身的Connection来管理事务是不行的
办法:
有一个Transaction Manager管理分布式事务(分布在多台不同的数据库server上)。
此时,先让Transaction Manager记录好操作一,操作二,,,做完操作,然后让Transaction Manager提交。Transaction Manager帮你管理着你的各个操作,假如第二个操作出了错,就要求第一个数据库的操作也回滚,这种能力的实现需要具体的数据库的驱动来实现,这时的驱动和我们在同一台服务器上做操作用的驱动不一样,是另外一种驱动,XA驱动 (J2ee要求的)。
Transaction Manager由Application Server(应用服务器)中间件来提供。tomcat本身目前不具备这个能力。(借助Spring可以实现)
Jboss支持,weblogic支持。这种事务就是JTA事务。
所以,只要你用getCurrentSession来得到session,必须要设定session运行的上下文。
如果在我们一般项目的配置里把上下文配置改为jta,或者不写
<property name="current_session_context_class">jta</property>
都会报错。因为Transaction Manager是由中间件,由application server应用服务器来提供,tomcat本身不具备这能力。如果你不设,就是被设置session运行的上下文,他就不知道去哪里找。
hibernate_SessionFactory_getCurrentSession_JTA简介的更多相关文章
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- REST简介
一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...
- Microservice架构模式简介
在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
- HTTPS简介
一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- Cesium简介以及离线部署运行
Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...
随机推荐
- oracle 11g 创建普通用户
CREATE USER xiaoming IDENTIFIED by xm123123 GRANT CREATE SESSION TO xiaoming; GRANT RESOURCE TO xiao ...
- Exception in thread "main" java.lang.Error: Unresolved compilation problem
初学java,使用eclipse编译时,可能会遇到如下图所示的编译错误(Exception in thread "main" java.lang.Error: Unresolved ...
- HRBUST1310 火影忍者之~鸣人 2017-03-06 16:01 104人阅读 评论(0) 收藏
火影忍者之-鸣人 火影忍者的男主角漩涡鸣人,因为身上封印着邪恶的九尾妖狐,无父无母的他受尽了村人的冷眼与歧视,他下定决心要成为第六代火影,让所有人都认同他的存在,火影是动漫火影忍者中主人公鸣人所在的国 ...
- Elasticsearch 安装的时候,Unsupported major.minor version 51.0问题的解决
Elasticsearch安装的时候报错 bootstrap/Elasticsearch : Unsupported major.minor version 51.0 网上一般说的方法是,升级或者降级 ...
- 介绍 ASP.NET Identity - ASP.NET 应用程序的成员身份认证系统
ASP.NET Identity 是构建 ASP.NET web 应用程序的一种新的身份认证系统.ASP.NET Identity 可以让您的应用程序拥有登录功能,并可以轻松地自定义登录用户的相关数据 ...
- python 中为什么不需要重载
函数重载主要是为了解决两个问题. (1)可变参数类型. (2) 可变参数个数. 另外,一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两 ...
- 如何在CentOS 7中禁用IPv6
最近,我的一位朋友问我该如何禁用IPv6.在搜索了一番之后,我找到了下面的方案.下面就是在我的CentOS 7 迷你服务器关闭IPv6的方法. 你可以用两个方法做到这个. 方法 1 编辑文件/etc/ ...
- 三.jenkins 在windows上配置master 和 agent(slave)
参考链接: https://wiki.jenkins-ci.org/display/JENKINS/Step+by+step+guide+to+set+up+master+and+slave+mach ...
- asp.net——正则表达式
在平时的开发中常常用到替换法: 普通的字符串替换可以使用string.replace(string,string),但是比较难解决HTML文本的替换. 经我几番查找,终也找出解决办法:正则匹配替换. ...
- sharepoint database 操作
select *from [dbo].[AllLists] where tp_Title='Pages' and tp_WebId='90511126-E1FE-4E4C-8DDF-74DFC89E8 ...