Java EE 7之前版本替代JPA 2.1的非同步持久性上下文
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
Java EE 7之前版本替代JPA 2.1的非同步持久性上下文相关推荐
- 1.0jpa 2.0_Java EE 7之前版本替代JPA 2.1非同步持久性上下文
1.0jpa 2.0 Java EE 7中的非同步持久性上下文 JPA 2.1引入了非同步持久性上下文的概念,该概念允许对JPA实体管理器的刷新进行细粒度控制,即通过显式调用EntityManager ...
- 为什么我会在2012年的新企业Java项目中使用Java EE而不是Spring
这个问题经常出现. 我的新项目也在2011年11月发布. 在这个新的Enterprise Java项目中,我将使用Java EE(JEE)代替Spring框架. 我知道:关于此主题的文章,博客和论坛讨 ...
- java ee 值范围_一篇文章带你读懂: Java EE
原标题:一篇文章带你读懂: Java EE 点击上图,查看教学大纲 何为 Java EE Java EE是一个标准中间件体系结构 不要被名称"Java PlatformEnterprise ...
- 【转】JAVA EE 6 规范综述
目录 1.JAVA EE规范综述 2.JAVA EE整体架构 3.JAVA EE规范的角色划分图 4.JAVA EE平台依赖的J2SE API 5.JAVA EE平台的版本变迁 6.JAVA EE平台 ...
- Java EE开发三剑客现状及发展浅析
JSF 2.0 尽管 Java 在展示层框架上竞争的非常激烈,但 JSF 仍然固守着自己的领地.虽然有很多关于 JSF 的易用性和健壮性的质疑声,但 JSF2.0 就是为正面解决这些问题而提出来的,它 ...
- 从Java EE到Jakarta EE,企业版Java的发展历程
眼看他起高楼,眼看他宴宾客,眼看他楼塌了. 本文已被https://yourbatman.cn收录:程序员专用网盘https://wangpan.yourbatman.cn:公号后台回复"专 ...
- 从Java EE到Jakarta EE的发展历程
目录 ✍前言 JDK发展简史 什么是Java EE? Java EE发展史 补充:什么是Eclipse基金会 有Java EE SDK吗? 什么是Jakarta EE Jakarta EE发展史 一站 ...
- Java EE之RMI
开始学Java EE,为什么不从Servlet,JSP学起,而偏要选择一个在如今企业级开发中基本上不会直接用到的RMI,是因为大名鼎鼎而又臭名昭著但又不得不学的EJB建立在RMI基础之上.怀揣着李约瑟 ...
- java ee 7 新_Java EE 7:新功能???
java ee 7 新 我有点"晚点",可以这么说--就Java EE 7的 "博客"而言. 自2013年6月发布以来,已经差不多10个月了 ,但是它仍然相对较 ...
最新文章
- Poj2480欧拉函数
- git 32位_编译64位的BorderlessGaming
- Orleans入门例子
- spark StandAlone模式下的作业提交流程
- list 如何判空以及为什么
- CAN FD:测量和重编程
- 新cBSS敏捷发布实践
- 计算机专业普通的期刊,计算机类的普通期刊
- 纳韦斯托克斯方程的推导_纳维-斯托克斯方程(N-S方程)详细推导.ppt
- 前端骨架屏方案与实践
- console接口跟Telnet命令初步调试交换机
- 华为od机考真题-统计射击比赛成绩
- Codeforces Gym 100015C City Driving 离线LCA
- 1.ROS编程学习:helloworld的c++与python实现
- 【英雄九日集训】(七月第一轮)第一天——数组
- SrpingCloud系统学习 - 熔断机制
- html 一键复制 ios,h5实现一键复制到粘贴板-兼容ios
- SDWebImage如何避免复用
- 改变别人的思想的艺术
- 合肥工业大学 慕课 梦溪笔谈 习题答案