`
bjlf1105
  • 浏览: 24772 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

初识EJB

    博客分类:
  • EJB
阅读更多

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)

    入门及教材 逐步讲解如何在myeclipse下搭建SessionBean 和 EntityBean 如何部署至jboss 如何测试 ejb为2.1规范

    实战EJB 实战EJB 实战EJB

    实战EJB 实战EJB 实战EJB 电子书 pdf

    EJB方面 ejb pdf

    EJB方面EJB方面EJB方面EJB方面EJB方面

    EJB集群EJB集群资料

    EJB集群资料EJB集群资料EJB集群资料EJB集群资料

    java反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJB

    java反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJB

    javax.ejb.jar下载

    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白皮书EJB白皮书

    ejb-3_0-fr-spec-ejbcore.pdf ejb-3_0-fr-spec-persistence.pdf ejb-3_0-fr-spec-simplified.pdf

    javax.ejb.rar

    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的三本好书第3本 Mastering EJB3 4ed

    EJB3的三本好书之三,也很不错的一本ejb3的书籍,是英文版,附带源代码,这本书的好处是与Mastering EJB 3ed有一定的继承性,可以对比来看. 3本书的地址 1. Beginning EJB3 Application Development From Novice to ...

    ejb+hibernate资料 ejb+hibernate资料

    ejb+hibernate资料 ejb+hibernate资料 ejb+hibernate资料 ejb+hibernate资料

    手动部署EJB 亲自体验EJB开发流程

    手动部署EJB 亲自体验EJB开发流程 手动部署EJB 亲自体验EJB开发流程

    EJB基础(学习EJB者必看)

    EJB基础学习EJB者必看里面详细记录了EJB技术等

    EJB3的三本好书第2本, EJB3 in Action 2007

    EJB3的三本好书第二本,最好的介绍ejb3的书,看过之后,其他的书都送人了,而且附带的源代码,几乎包括了所有的主流应用服务器的例子,glassfish, jboss, weblogic, oracleAS 3本书分别是: 1. Beginning EJB3 ...

    EJB3.0规范-EJB3.0 SPECIFICATION

    EJB3.0规范 EJB3.0 SPECIFICATION 官方规范英文版

    java的ejb.jar包

    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的区别

    ejb2.0 ejb3.0的区别,比较详细讲解两者的区别

    ejb3.0实例教程

    期待已久的 EJB3.0 最终规范已经发布了。虽然 EJB3.0 最终规范出来了一段时间,但对 EJB3.0 的应用还停留在介 绍之中,应用实例更是少之又少,所以作者拟写本书,以简单的实例展现 EJB3.0 的开发过程,希望对大家有所...

    JSP + EJB + Servlet 实例

    使用原始的servlet操作熟悉EJB的实体管理。 本实例主要功能:实现对员工、角色、账号、部门的关系管理。 本实例的实体设计:部门-员工:一对多。员工-账号:一对一。账号-角色:一对一。 主要采用EJB进行会话管理。...

    javax.ejb.jar

    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....

Global site tag (gtag.js) - Google Analytics