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注解事务传播特性,可以放在方法或类的前面。
分享到:
相关推荐
【Xdoclet生成SessionBean和EntityBean代码(初识ejb)】 Xdoclet是一个强大的文档生成工具,尤其在Java Enterprise Edition(JEE)环境中,它能够自动生成EJB(Enterprise JavaBeans)所需的代码和配置文件,从而...
#### 一、初识EJB EJB(Enterprise JavaBeans)是Java EE平台中用于开发企业级应用的重要组件模型。它为开发者提供了构建可伸缩、健壮的企业应用的框架。自1998年发布以来,EJB已经经历了多个版本的迭代,其中最...
《初识EJB 3应用开发:从新手到专家》是一部深入浅出的教程,旨在帮助读者全面理解和掌握企业级JavaBean(EJB)3的开发技术。此压缩包包含了书籍的各个章节样本代码,方便读者实践和学习。以下是根据章节标题解析出...
它提供了一套全面的API和服务,包括Web组件、Servlet、JSP、EJB(Enterprise JavaBeans)、JMS(Java Message Service)、JPA(Java Persistence API)等,用于构建分布式、可伸缩的企业系统。 2. **字节码文件(....
Spring框架是Java开发领域非常著名的开源框架,它的初识主要可以分为两个部分:框架的基本概念和Spring框架的设计理念。 首先,从框架的基本概念来看,它是由一系列类和接口组成的集合,这些类和接口协调工作以完成...
在本章"初识J2EE"中,我们将深入学习Java企业版(J2EE)的基础知识,包括如何搭建一个有效的开发和运行环境。J2EE是一个由Oracle公司提供的用于构建分布式、多层的企业级应用程序的平台,它包含了多种服务、API和...
【初识Java】 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(后被Oracle公司收购)于1995年发布。它的设计目标是具备“简单性、面向对象、健壮性、安全性、可移植性、高效性、多线程和动态性”等...
开发者可以了解JavaEE的基本开发环境和流程,为进一步学习JavaEE的其他高级特性,如JPA(Java Persistence API)、JSF(JavaServer Faces)、CDI(Contexts and Dependency Injection)以及EJB(Enterprise ...
Spring在表示层、业务逻辑层和持久层提供了全面的技术支持,可以与Struts、Hibernate、JdbcTemplate等框架无缝集成,降低了EJB的使用复杂度,提高了开发效率。 **Spring的体系结构**由20多个模块组成,包括数据访问...
《初识Java EE 5:从新手到专家》是一本专为Java EE 5入门者设计的书籍,它深入浅出地介绍了这个企业级开发平台的基础知识和高级特性。Java EE 5,全称为Java Platform, Enterprise Edition 5,是Java技术在企业应用...
《初识J2EE:构建企业级应用的基石》 J2EE,全称为Java 2 Platform, Enterprise Edition,是Java平台的一个版本,专为构建企业级分布式应用程序而设计。这个平台提供了丰富的服务和组件,使得开发人员可以高效地...
《初识Java EE 6平台与GlassFish》是一本针对Java企业级应用开发的入门教程,旨在帮助读者理解和掌握Java EE 6平台的核心概念和技术,同时结合GlassFish服务器的使用,提供实际操作的经验。这本书是Java J2EE(Java ...
2. **EJB(Enterprise JavaBeans)**:提供了面向组件的开发模式,包括会话Bean、实体Bean和消息驱动Bean,用于业务逻辑处理和数据持久化。 3. **JDBC(Java Database Connectivity)**:是Java连接数据库的标准API...
《初识JavaEE 5:从新手到专家》是一本专为Java EE 5初学者设计的优秀教程。这本书深入浅出地介绍了Java企业版5(Java EE 5)的各种核心技术,旨在帮助读者快速掌握这一强大的企业级开发平台。Java EE 5是Java应用...
《初识Java EE 6平台:使用GlassFish 3从新手到专业》是一本专为初学者准备的Java企业级应用开发指南。该书通过深入浅出的方式,引导读者掌握Java EE 6平台的核心概念和技术,同时利用GlassFish 3服务器进行实践。源...
《初识Java™ EE 6平台与GlassFish™ 3:从新手到专业》这本书是为那些想要深入了解Java企业级应用开发的初学者和进阶者准备的。它全面覆盖了Java EE 6平台的核心技术和GlassFish服务器的使用,帮助读者从零基础开始...
1 初识Applet和Servlet网络通信 11. 2. 2 Applet和Servlet之间传递对象 11. 3 Applet和Servlet之间实现远程方法调用 11. 3. 1 远程方法调用中的设计模式 11. 3. 2 设计应用程序子协议 11. 3. 3 远程方法调用的...
Java程序员的学习路径是一个不断进阶的过程,从初识编程到精通架构,每一步都需要扎实的理论基础和实践经验。以下是一份针对2021年Java程序员精心挑选的书籍推荐,旨在帮助程序员提升技能,增强竞争力。 ### 1. **...
王国维的三重境界在这里被巧妙地应用于Java的学习过程中,形象地描绘了从初识到精通的逐步升华。 第一境:“昨夜西风凋碧树,独上高楼,望尽天崖路”。在这个阶段,你需要明确自己为何学习Java,是因为工作需求、...
**会话管理 (Session Management)**:Shiro 可以在无Web或EJB容器的环境中管理用户会话。这意味着即使在这些简单环境中,Shiro 也能保持用户状态并存储会话相关的信息。 **加密 (Cryptography)**:为了保障数据安全...