EntityManagerFactory相当于Hibernate中的SessionFactory对象,它里面有一个PersistenUnit就代表着一个EntityManagerFactory以及所包含的映射元数据,代表着一个数据库,如果有两个数据库,就可以在persistence.xml的配置文件中配置两个persistence-unit。EntityManager由EntityManagerFactory所创建,相当于Hibernate中的session,persistenceContext相当于session的一级缓存!由persistenceContext跟数据库进行打交道。
容器管理的EntityManager和应用管理的EntityManager,主要讲的是EntityManager由谁来管理,默认是由容器管理,因为你不知道什么时候创建他,什么时候销毁它,当然也不负责close,一切交给容器管理,其实SSH也是相当于容器管理,Spring相当于容器,session的创建销毁都是由容器管理,创建注入的是EntityManager;应用管理就是有我们自己管理,有我们去创建、销毁、关闭等!其实他就是使用EntityManagerFactory的注入,创建新的。
EntityManager与session是不同的,Spring注入的不是session对象,而是sessionFactory对象,而这里注入的却是相当于session的对象;ssh中不能直接注入session对象,因为session是线程不安全的。SSH管理是在同一个事务中同一个session对象,通过ThreadLocal来传递session对象;由于EJB中的EntityManager可能是不同的进程之间的,不可能通过线程来传递他,他管理的是PersistenceContext,他不是跟EntityManager绑定的,他是跟事务绑定的;两个EntityManager是不一样的,但他们会对应同一个PersistenceContext,这是在同一个事务中的,随着事务的传播而传播;一个请求可能跨域多个线程或进程,但他们是在同一个事务中进行传播的,换句来讲,PersistenceContext随着事务的传播而传播,而不是随着线程的传播而传播!
容器管理的PersistenceContext,其生命周期由PersistenceContextType来配置。对于程序本身来说,他对PersistenceContext的创建销毁一无所知,完全自动和透明。PersistenceContext随着JTA事务而传播。可以被限定为单个事务或者是扩展他的生存期跨越多个事务取决于PersistenceContextType的配置。
1、 Transation Scoped:由容器创建,随着Transation而传播,随着Transaction的完成而销毁
2、 Extended Scoped:用于Stateful Session Bean,跨域多个Transaction,随着Stateful Session Bean的销毁而销毁。要使用他就是跟要使用Stateful Session Bean使用的时机是一样的
应用管理的PersistenceContext
事务:
原子性:所有的操作要么都成功,要么都失败
一致性:事务不能违反完整性约束(比如虽然事务还未提交,但仍需遵守各种约束规则,这些规则是在事务提交之前而非在事务提交以后才生效!)比如有一个User,username是不能为空的,但是你一保存,事务还没提交,你这个username也是不能为空的
隔离性:一个事务的效果,不影响正在同时执行的其他事务。
持久性:一但事务成功完成,数据必须保证已经正确的持久化!比如:即使这时候突然掉电了,这个数据也已经存起来。
隔离性:一个事务的效果,不影响正在同时执行的其他事务,那么,不影响的程度如何?
这个由隔离级别来定义,标准的隔离级别有以下四种:
未提交读、提交读、可重复读、序列化
通过一些现象看隔离级别的效果:
脏读:一个事务 读取了 另一个事务尚未提交的修改,产生脏读。
不可重复读:同一查询在同一次事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。
幻读:同一查询在同一次事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻象读。
JDBC事务与JTA事务
JDBC事务只能支持一个数据库(单数据源),一般由数据库本身来执行提交或回滚操作(单阶段提交)。
而JTA可以分布式的事务(多数据源),因为他要支持多个数据源,提高了一个“事务处理监视器”(TPM)来管理和协调这些数据源之间的事务操作,它必须执行两阶段提交(2PC)协议:
准备阶段:TPM向所有RM(资源管理器,即数据库)确认状态,是否可以提交或者回滚
提交阶段:TPM确认提交之后,向所有RM发出提交指令(或回滚)
TPM本身会维护事务日志,以保证持久性(灾难恢复等)
事务类型:JTA和RESOURCE_LOCAL
使用JTA来控制事务,利用容器提供的JTA事务管理器来管理事务
通过jndi lookup将TPM的UserTransaction操纵对象给拿过来,这个就是全局事务
使用RESOURCE_LOCAL来控制事务
脱离容器使用的事务
事务管理类型:CONTAINER和BEAN
容器管理事务:由容器自动创建、删除
TransactionManagermentType.Bean:由EJB本身来管理,自己保存、回滚
事务的传播特性:是有容器来管理的,一个EJB调用另一个EJB,要不要创建事务,是有容器所管理的,Not Support、Support、Required、Required New、Mandatory、Nerver等,使用TransactionAttribute注解事务传播特性,可以放在方法或类的前面。
分享到:
相关推荐
入门及教材 逐步讲解如何在myeclipse下搭建SessionBean 和 EntityBean 如何部署至jboss 如何测试 ejb为2.1规范
实战EJB 实战EJB 实战EJB 电子书 pdf
EJB方面EJB方面EJB方面EJB方面EJB方面
EJB集群资料EJB集群资料EJB集群资料EJB集群资料
java反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJB
Files contained in javax.ejb.jar: META-INF/MANIFEST.MF javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout.class javax.ejb.ActivationConfigProperty.class javax.ejb.AfterBegin.class javax....
ejb-3_0-fr-spec-ejbcore.pdf ejb-3_0-fr-spec-persistence.pdf ejb-3_0-fr-spec-simplified.pdf
META-INF / maven / org.glassfish.main.ejb / javax.ejb / pom.properties META-INF / maven / org.glassfish.main.ejb / javax.ejb / pom.xml javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout....
ejb3中文版
EJB3的三本好书之三,也很不错的一本ejb3的书籍,是英文版,附带源代码,这本书的好处是与Mastering EJB 3ed有一定的继承性,可以对比来看. 3本书的地址 1. Beginning EJB3 Application Development From Novice to ...
ejb+hibernate资料 ejb+hibernate资料 ejb+hibernate资料 ejb+hibernate资料
手动部署EJB 亲自体验EJB开发流程 手动部署EJB 亲自体验EJB开发流程
EJB基础学习EJB者必看里面详细记录了EJB技术等
EJB3的三本好书第二本,最好的介绍ejb3的书,看过之后,其他的书都送人了,而且附带的源代码,几乎包括了所有的主流应用服务器的例子,glassfish, jboss, weblogic, oracleAS 3本书分别是: 1. Beginning EJB3 ...
EJB3.0规范 EJB3.0 SPECIFICATION 官方规范英文版
javax.ejb.AccessLocalException.class javax.ejb.CreateException.class javax.ejb.DuplicateKeyException.class javax.ejb.EJBContext.class javax.ejb.EJBException.class javax.ejb.EJBHome.class javax.ejb....
ejb2.0 ejb3.0的区别,比较详细讲解两者的区别
期待已久的 EJB3.0 最终规范已经发布了。虽然 EJB3.0 最终规范出来了一段时间,但对 EJB3.0 的应用还停留在介 绍之中,应用实例更是少之又少,所以作者拟写本书,以简单的实例展现 EJB3.0 的开发过程,希望对大家有所...
使用原始的servlet操作熟悉EJB的实体管理。 本实例主要功能:实现对员工、角色、账号、部门的关系管理。 本实例的实体设计:部门-员工:一对多。员工-账号:一对一。账号-角色:一对一。 主要采用EJB进行会话管理。...
Files contained in javax.ejb.jar: META-INF/MANIFEST.MF javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout.class javax.ejb.ActivationConfigProperty.class javax.ejb.AfterBegin.class javax....