1.0jpa 2.0

Java EE 7中的非同步持久性上下文

JPA 2.1引入了非同步持久性上下文的概念,该概念允许对JPA实体管理器的刷新进行细粒度控制,即通过显式调用EntityManager#joinTransaction 。 以前,这默认情况下是JTA事务的结束,例如在典型的Stateless EJB中,实体管理器会在方法结束时(默认情况下开始和结束事务)将其状态刷新到DB。 您可以在此处和此处阅读有关此内容的更多信息。

在Java EE 7之前的时代(EE 5和EE 6)也有可能

可以对Java EE 5和6进行调整,以实现与Java EE 7中非同步持久性上下文所获得的结果相同的结果。

想象一下一个用例,其中按顺序(使用流程之类的向导)编辑客户详细信息,例如屏幕1中的地址信息,屏幕2中的联系信息等。您希望在客户输入是但不希望将整个状态推送到数据库,直到该过程完成,即用户输入了所有类别的信息

package com.abhirockzz.conversationalee;import com.abhirockzz.conversationalee.entity.Customer;
import java.util.Date;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Remove;
import javax.ejb.Stateful;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;@Stateful
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class CustomerEditorFacade{@PersistenceContext(type = PersistenceContextType.EXTENDED)EntityManager em;@Inject //this won't work in Java EE 5Principal authenticatedUser;private Customer customer;@PostConstructpublic void init(){System.out.println("CustomerEditorFacade created at " + new Date().toString());   }@PreDestroypublic void destroy(){System.out.println("CustomerEditorFacade destroyed at " + new Date().toString());   }//step 1public void updateCity(String custID, String city){String custID = authenticatedUser.getName(); //assume we have an authenticated principal which is the same as the customer ID in the DatabaseCustomer customerFromDB = em.find(Customer.class, Integer.valueOf(custID)); //obtain a 'managed' entitycustomerFromDB.setCity(city); //no need to call em.persistcustomer = customerFromDB; //just switch references//Customer state will NOT be pushed to DB}//step 2public void updateEmail(String email){customer.setEmail(email); //not pushed to DB yet}@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)public void save(){//dummy method to trigger transaction and flush EM state to DB}@Removepublic void finish(){//optional method to provide a way to evict this bean once used//not required if this is session scoped}}

代码注释是自我解释(希望如此)

干杯!

翻译自: https://www.javacodegeeks.com/2015/12/pre-java-ee-7-alternative-jpa-2-1-unsynchronized-persistence-context.html

1.0jpa 2.0

1.0jpa 2.0_Java EE 7之前版本替代JPA 2.1非同步持久性上下文相关推荐

  1. Java EE 7之前版本替代JPA 2.1的非同步持久性上下文

    Java EE 7中的非同步持久性上下文 JPA 2.1引入了非同步持久性上下文的概念,该概念允许对JPA实体管理器的刷新进行细粒度控制,即通过显式调用EntityManager#joinTransa ...

  2. 1.0jpa 2.0_JPA 2.1:不同步的持久性上下文

    1.0jpa 2.0 JPA 2.1版带来了一种新的方式来处理持久性上下文与当前JTA事务以及资源管理器之间的同步. 术语资源管理器来自Java事务处理API ,它表示操纵一个资源的组件(例如,使用其 ...

  3. Jakarta EE 9 企业版本合规性

    Eclipse 基金会的 Jakarta EE 工作组在 JakartaOne Livestream 虚拟会议上宣布推出了 Jakarta EE 9 平台.Web Profile 规范和相关 TCK ...

  4. ejb 2.0 3.0_Java EE 6测试第I部分– EJB 3.1可嵌入API

    ejb 2.0 3.0 我们从Enterprise JavaBeans开发人员那里听到的最常见的请求之一就是需要改进的单元/集成测试支持. EJB 3.1规范引入了EJB 3.1可嵌入API,用于在J ...

  5. 安装.net5.0后怎么在vs里选择_Visual Stdio 2019(或其它版本)怎样全部安装到非系统盘的实现方法(小白版)...

    众所周知,vs以其庞大的体积出名(划掉).vs作为一个强大的IDE,它的安装成为一个比较麻烦的事情,因为即使我们在安装目录里选择了非系统盘,但仔细看右下角,我们会发现仍会在系统盘里占用相当的空间. 之 ...

  6. PHP - 版本选择 - 线程安全与非线程安全 - 学习/实践

    1.应用场景 主要用于弄清楚为什么会有线程安全与非线程安全的不同语言版本,以及这种情况是不是一直存在, 是否有解决统一的办法吗- 2.学习/操作 1.文档阅读 PHP For Windows: Bin ...

  7. 今日的深圳早报新闻消息事件有几个版本?都在哪些地方同步更新?

    深圳早报分享今日深圳最新重大新闻消息事件十二条!每天30秒尽知深圳事! 问:为什么要在这么多平台同步更新呢? 答: 1)新闻事件属于相关部门监管的,不比吃喝玩乐的信息,部分新闻事件可能会触及敏感问题, ...

  8. linux版本kettle 中文乱码,kettle工具同步数据乱码-Linux下乱码问题二

    json校验 直接百度:json在线解析  或  json.cnhttp://json.cn/ json格式校验的.这个更加简洁些. SQL语句构建器类 问题 Java程序员面对的最痛苦的事情之一就是 ...

  9. java持久性与安全性_Java持久性锁定初学者指南

    java持久性与安全性 隐式锁定 在并发理论中,锁定用于保护可变共享数据免受危险数据完整性异常的影响. 因为锁管理是一个非常复杂的问题,所以大多数应用程序都依赖于其数据提供程序隐式锁技术. 将整个锁定 ...

最新文章

  1. SSL/TLSV1.0 programe in linux
  2. WCF创建到使用到发布
  3. Pandas实用技能,数据筛选query函数详细介绍
  4. 编写你的第一个 Django 应用,第 7 部分
  5. c语言绝对循环,c语言之循环
  6. java heapsort_排序算法笔记:堆排序 HeapSort in java
  7. [原创]2014年上半年测试书籍推荐
  8. 使用apache FileUtils下载文件
  9. fortran基础知识1----循环
  10. JMS-activeMq点对点模式
  11. swagger 上传文件 参数_如何使用Swagger上传文件
  12. 常大宿舍路由器安装教程
  13. 基于PaddleX实现电梯电瓶车检测
  14. win7用友u8安装教程_win7系统安装用友u8的方法 win7用友u8安装教程
  15. sql server创建数据库代码模板
  16. OpenCV论道:为什么我的伽马校正函数只有一行?
  17. RabbitMQ详解及其特性
  18. 四川一度智信:拼多多活动报名规则解读
  19. css清除浮动的几种方式
  20. 支付中心-重复支付问题解决

热门文章

  1. YBTOJ:运动积分(trie树)
  2. CF39C-Moon Craters【dp】
  3. Loj#114-k大异或和【线性基】
  4. 2018/7/9-纪中某B组题【jzoj1503,jzoj1158,jzoj1161】
  5. AtCoder Beginner Contest 176总结
  6. 纪中B组模拟赛总结(2020.2.1)
  7. JavaFX如何将WritableImage转换为Image
  8. JavaFX UI控件教程(二十)之HTML Editor
  9. Oracle入门(十四.7)之良好的编程习惯
  10. laravel关闭crsf