当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:12:00  来源:本站整理

EJB Extended 与Seam-managed Persistence Context[Java编程]

赞助商链接



  本文“EJB Extended 与Seam-managed Persistence Context[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

本文将简单谈谈我对 EJB 3.0 的两种 Persistence Context 和 Seam-managed Persistence Context 的差别点的理解、所要办理的问题和我自己所迷惑的问题.

EJB 3.0 (JPA) 的 Persistence Context

大家在利用 EJB 3.0 的时刻会注意到 EJB 3.0 中的容器管理 Persistence Context 有两种范例,一种是 Transaction,另一种是 Extended.这是一个较 Hibernate 的 Session 所没有的概念,Session 没有两种差别的范例,并且最重要的是 Session 不是容器管理的,这里的容器指的是 App server 容器.这里暂时不评论 Persistence Context 与 Session 之间的异同,主要谈谈两种 Persistence Context 之间的差别.学过 ORM 的同学都知道,当 Persistence Context 是翻开状况的时刻,Model 就处于被管理的状况中;当 Persistence Context 关闭之后,Model 就处于了 Detached 状况.

上面这些特点关于 Transaction 或 Extended 的 Persistence Context 都是一样的,差别的地方在于 Persistence Context 什么时刻被翻开关闭.由于绝大大都情形下 Persistence Context 是被容器管理的(假如你不嫌累也可以自己掌握 Persistence Context),所以在 EJB 3.0 利用中看不到翻开或关闭 Persistence Context 的代码(Spring + Hibernate 的利用也一样如此,Hibernate Session 的管理工作可以交给 Spring 来做).

其实,Transaction 和 Extended Persistence Context 的差别之处也就在于容器什么时刻翻开或关闭 Persistence Context.Transaction 范例的 Persistence Context 的翻开和关闭是和事件的翻开和关闭是同步的.也就是说在一个事件开始之后,Persistence Context 才会开始;在事件关闭的时刻,呼应的 Persistence Context 也会被关闭.

Extended 范例的 Persistence Context 的翻开和关闭是和 Stateful Session Bean 的生命周期同步的,是超越事件的.也就是说,从 SFSB 的初始化开始,直到销毁,Persistence Context 都是存在的.你可以在事件之外履行写操作,但是这是并不会履行真正的数据库操作,写操作只是放入了行列,直到下一个事件,写操作才会真正地被履行.二者的差别简单说来就是 Extended Persistence Context 存在的时间更长.那为什么要有两种差别的 Persistence Context 呢?

当一个 Web 恳求到来时,服务器会翻开一个线程,这个线程大概会调用一个事件办法,这是一个事件便开始了,当这个恳求完毕时,线程关闭,事件也随之完毕.由于 Transaction 范例的 Persistence Context 的生存周期是在事件范围之内的,所以一个 Web 恳求的完毕也意味着呼应的 Persistence Context 的关闭.由于大都 Web 利用在一次 Web 恳求内便可完成一个独立的操作,所以大部份情形下 Transaction 的 Persistence Context 是实用的.但是关于一些复杂的利用,一次操作需求超越多次恳求.这种情形下,假如仍旧利用 Transcation 的 Persistence Context,由于每次恳求完毕后,呼应的 Persistence Context 都被关闭,呼应的 Model 也就变成 Detached 状况.假如接下来的恳求仍旧需求这些已经变成 Detached 状况的 Model 就需求重新 load,利用 merge() 办法来长期化.稍有不适就会产生 LazyInitializationException 和 NonUniqueObjectException.同时,这也提高了操作的复杂程度.

假如利用 Extended Persistence Context 就可以办理这些问题.由于 Extended Persistence Context 的生命周期是与 SFSB 的生命周期同步的,所以只要多次恳求调用的都是同一个 SFSB 中的办法,有多少次的恳求,Persistence Context 老是同一个,此中的 Model 也始终是被管理的.很好地办理了 Persistence Context 在线程之间传送的问题,也不会有 LazyInitializationException 和 NonUniqueObjectException 问题的发生.


  以上是“EJB Extended 与Seam-managed Persistence Context[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • EJB3.0学习之运行环境配置
  • 发扬EJB、Spring思惟将组件化举行到底
  • JBoss下的EJB3开辟无情况会话Bean
  • EJBCA 3.0开源CA系统软件初探
  • <b>实战角度比较EJB2和EJB3的异同</b>
  • java ee5平台java长期化开辟(ejb3和jsf)
  • Grails+EJB Domain Models
  • 把WebLogic EJB程序迁移到JBoss上
  • EJB 3.0开辟指南之实体Bean的承当
  • EJB 3.0开辟指南之实体Bean
  • EJB 3.0开辟指南之多对多和一对一
  • EJB 3.0开辟指南之多表映射
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .