glassfish_具有GlassFish和一致性的高性能JPA –第3部分

glassfish

在我的四部分系列的第三部分中,我将说明将Coherence与EclipseLink和GlassFish结合使用的第二种策略。 这就是通过EclipseLink使用Coherence作为二级缓存(L2)的全部内容。

一般的做法

这种方法将Coherence数据网格应用于依赖于数据库托管数据的JPA应用程序,这些数据无法完全预加载到Coherence缓存中。 它可能无法预加载的一些原因包括:超出Coherence筛选器功能集的极其复杂的查询,创建陈旧缓存的第三方数据库更新,依赖于本机SQL查询,存储过程或触发器等。 这不仅是本地L2高速缓存的选项,而且在不同节点上具有其他已配置的Coherence实例,您还将获得群集范围的JPA L2高速缓存。

细节

与许多缓存一样,这是一个只读的优化。 主键查询尝试首先从Coherence获取实体,如果不成功,将查询数据库,并用查询结果更新Coherence。 针对数据库执行非主键查询,并针对Coherence检查结果,以避免缓存实体的对象构建成本。 新查询的实体将放入Coherence。 写入操作将更新数据库,如果成功提交,则将更新后的实体放入Coherence。 这种方法在Coherence文档中称为“网格缓存”。

付诸实践

如果您还没有这样做,请从上一篇博客文章开始,并准备您的环境 。 只有一件事,您需要进行更改。 对于这种情况,请返回GlassFish 3.0.1 / EclipseLink 2.0.1,因为CacheKey.getKey()方法存在问题。 2.0.1返回一个Vector ,而2.2.0返回一个Object 。 看到新的Oracle GlassFish Server 3.1支持ActiveCache,我希望此问题将在3.7 Coherence版本中得到修复。 但是直到那之前,您必须坚持使用旧的GF或EclipseLink。

无论如何,让我们使用您喜欢的IDE(例如GridCacheExample)创建一个新的Web项目。 添加所需的库(coherence.jar,toplink-grid.jar和eclipselink.jar)。 现在,让我们创建我们的实体类,并向其添加额外的@CacheInterceptor批注:

...import oracle.eclipselink.coherence.integrated.cache.CoherenceInterceptor;
import org.eclipse.persistence.annotations.CacheInterceptor;...@Entity
@CacheInterceptor(value = CoherenceInterceptor.class)
public class Employee implements Serializable {...}

不要忘记添加@GeneratedValue(strategy = GenerationType.SEQUENCE),因为这与上一个示例相反。 完成此操作后,您必须将一致性配置添加到WEB-INF / classes文件夹。 您可以从教程开始( 示例2 )。 (请注意,其中有一个错字…重复的</ backing-map-scheme>标记)。 像配置普通的基于JPA的应用程序一样,配置persistence.xml。

<persistence-unit name="GridCacheExamplePU" transaction-type="JTA"><provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/coherence</jta-data-source><properties>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
<property name="eclipselink.logging.level" value="FINE" />
</properties></persistence-unit>

基本上就是这样。 现在,您可以测试新的L2缓存。 一个简单的servlet应该可以解决问题:

public class InsertServletPart3 extends HttpServlet {@PersistenceUnit(unitName = "GridCacheExamplePU")
EntityManagerFactory emf;@Resource
UserTransaction tx;...EntityManager em = emf.createEntityManager();tx.begin();// some loop magic
Employee employee = new Employee();employee.setFirstName("Markus");
employee.setLastName("Eisele");em.persist(employee);// some loop magic end
tx.commit();em.close();

如果您查看日志,则可以看到以下内容:

FEIN: INSERT INTO EMPLOYEE (LASTNAME, FIRSTNAME) VALUES (?, ?)bind => [Eisele, Markus]
...
FEIN: Coherence(Employee)::Put: 1 value: net.eisele.coherence.entities.Employee[ id=1 ]
...

基本上,这告诉您,实际的数据库插入是由您惯常的EclipseLink执行的。 之后,您会看到Employee对象以PK为键放置到名为Employee的Coherence Cache中。

如果现在对数据库发出查询

em.createQuery("select e from Employee e where e.lastName = :lastName").setParameter("lastName", "Eisele").getResultList();

您会看到以下内容:

FEIN: SELECT ID, LASTNAME, FIRSTNAME FROM EMPLOYEE WHERE (LASTNAME = ?)bind => [Eisele]
FEIN: Coherence(Employee)::Get: 1 result: net.eisele.coherence.entities.Employee[ id=1 ]
FEIN: Coherence(Employee)::Put: 1 value: net.eisele.coherence.entities.Employee[ id=1 ]
...

这告诉您,查询本身是针对数据库发出的,但结果针对Coherence进行了检查,以避免已经为缓存的实体构造对象。 新查询的实体将放入Coherence。 如果发出简单的PK查询:

em.find(Employee.class, 1);

输出更改为:

FEIN: Coherence(Employee)::Get: 1 result: net.eisele.coherence.entities.Employee[ id=1 ]

而且您根本看不到任何数据库查询。 就是这样:)您的缓存有效! 谢谢阅读。 敬请期待下一部分!

进一步阅读

参考: 具有GlassFish和一致性的高性能JPA –我们的JCG合作伙伴 Markus Eisele在“使用Java进行企业软件开发”博客上的 第3部分

相关文章 :
  • 具有GlassFish和一致性的高性能JPA –第1部分
  • 具有GlassFish和一致性的高性能JPA –第2部分
  • 在云中开发和测试
  • Java EE中的配置管理
  • 泄漏:Oracle WebLogic Server 12g
  • Java EE6装饰器:在注入时装饰类
  • Java教程和Android教程列表

翻译自: https://www.javacodegeeks.com/2011/11/in-this-third-part-of-my-four-part.html

glassfish

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

应广大粉丝的要求,推荐几本前端书籍

这些书籍平时会直接发送在主页的QQ技术群,有兴趣的可以加一下。 不想去培训机构,不想花大笔钱的学习,那就自学吧!接招

初中学习计算机基础,初中生计算机基础学习心得

导语&#xff1a;为了提高自身的计算机管理业务素质&#xff0c;促进信息技术教学工作的顺利开展&#xff0c;我于2017年3月份在中小学继续教育网上选学了《计算机应用基础》的课程学习。以下是小编为您收集整理提供到的范文&#xff0c;欢迎阅读参考&#xff0c;希望对你有所帮…

java的数据结构

本文转自互联网 1、二叉树&#xff1a;非线性数据结构&#xff0c;常被用于实现二叉查找树和二叉堆 二叉树的第i层至多有2的 i -1次方个结点&#xff1b;深度为k的二叉树至多有2^(k) -1个结点&#xff1b;对任何一棵二叉树T。 满二叉树 完全二叉树 平衡二叉树 2、 二叉树的遍历…

AssertJ的SoftAssertions –我们需要它们吗?

编写好的单元测试的规则之一是&#xff0c;它应该出于某种原因而失败&#xff0c;因此&#xff0c;单元测试应该测试一种逻辑概念。 有时很难在每个测试中拥有一个断言。 为了遵循规则&#xff0c;我们可能在一个测试中每个对象具有多个断言。 但是&#xff0c;在单个测试中存…

早上起来CSDN的PC端主页积分变成了0

没有违法&#xff0c;没有乱纪&#xff0c;这是什么鬼&#xff1f;我刚才百度了一下&#xff0c;很多大牛都有类似的经历&#xff0c;心里舒服多了 平台BUG还是挺多的&#xff0c;说不准哪天就轮到你啦&#xff0c;哈哈&#xff01;&#xff01;

Fofa搜索技巧

Fofa搜索技巧&#xff08;理论加实践的整理&#xff09; 题记 最近在整理以前的知识&#xff0c;不过最近出现职业病了&#xff0c;打开fofa看站点就停不下来。我把常用的fofa查询语句记录下来&#xff0c;方便查阅。钟馗之眼和他有区别也异曲同工。 https://fofa.so/ http://…

魔兽世界阿拉索人数最多服务器,魔兽世界8.3哪个区人多_wow8.3服务器人数统计介绍_3DM网游...

魔兽世界8.3人口最多大区是很多玩家都非常关心的一件事情&#xff0c;很多玩家都想在这个新版本去最多的服务器&#xff0c;很多玩家都想知道服务器人口&#xff0c;来看看魔兽世界8.3哪个区人多&#xff0c;wow8.3服务器人数统计介绍。8.3人口最多大区介绍魔兽世界8.3安苏大区…

如何系统的学习javaScript?赶紧看看吧

当今如果要开发现代网站或web应用(包括互联网创业),都要学会JavaScript。而面对泛滥的JavaScript在线学习资源,却是很难找到一份高效而实用的方法去学习这个“web时代的语言”。有一点需要注意,几年前我们需要知道一个真正的服务器端语言(比如PHP,Rails,Java,Python 或…

Shiro-550反序列化漏洞复现

0x01 漏洞简介Apache Shiro是一款开源安全框架&#xff0c;提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用&#xff0c;同时也能提供健壮的安全性。 Apache Shiro 1.2.4及以前版本中&#xff0c;加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可…

css 样式面板,关于 CSS 样式面板

使用“CSS 样式”面板可以跟踪影响当前所选页面元素的 CSS 规则和属性(“当前”模式)&#xff0c;也可以跟踪文档可用的所有规则和属性(“所有”模式)。使用面板顶部的切换按钮可以在两种模式之间切换。使用“CSS 样式”面板还可以在“所有”和“当前”模式下修改 CSS 属性。有…

Fragment 横竖屏切换问题

在默认情况下当发生横竖屏切换时&#xff0c;当前Activity中的fragment都会通过Fragment.instantiate重新生成&#xff0c;该方法将使用默认的构造函数来生成相应的Fragment&#xff0c;所以如果没有默认构造函数的话将会报错&#xff0c;例如&#xff1a;class MyFragment { p…

IIS-ShortName-Scanner使用

000 漏洞简介 Microsoft IIS在实现上存在文件枚举漏洞&#xff0c;攻击者可利用此漏洞枚举网络服务器根目录中的文件。 危害&#xff1a;攻击者可以利用“~”字符猜解或遍历服务器中的文件名&#xff0c;或对IIS服务器中的.Net Framework进行拒绝服务攻击。 001 工具简介 J…

配置java ee_Java EE中的配置管理

配置java ee当我尝试配置管理与云计算有很多相关性时&#xff0c; 争论 较早。 实际上&#xff0c;我大胆地宣称配置管理是任何认真尝试从软件中节省几美元的基石。 那么什么是配置管理及其主要目标&#xff1f; 在不使事情变得过于复杂的情况下&#xff0c;我认为接下来的两个…

我的世界中国版服务器地图文件在哪,我的世界中国版手机版联机的地图保存在哪 | 手游网游页游攻略大全...

发布时间&#xff1a;2017-05-12我的世界战舰设计图 手机版战舰怎么做.那下面给大家分享的是玩家自己在手机版中手撸的一个战舰建筑哦~那感兴趣的玩家不妨进来看看他是怎么建造战舰的哦~希望大家喜欢. 游戏园我的世界官方群:325049520 二群:25607 ...标签&#xff1a;我的世界 …

kali NETCAT NC的使用

文章目录 nc的常用选项NC具有的常用功能telnet / 获取banner信息传输文本信息传输文件/目录加密传文件端口扫描远程克隆硬盘远程控制NCAT TCPDUMP简单用法 nc的常用选项 -l 开启监听模式&#xff0c;用于入站链接 -p 开放本地端口 -n 远程连接&#xff0c;后面要跟上端口 -v …

如何循序渐进的学习javaScript呢,请听我慢慢道来!

大家可以参考知乎上的这篇文章&#xff0c;我觉得还不错&#xff0c;分享给你们 https://www.zhihu.com/question/19713563

记录链接:与杜克一起玩

最近&#xff0c;我在记录链接方面变得非常有趣&#xff0c;并遇到了Duke项目&#xff0c;该项目提供了一些工具来帮助解决此问题。 我以为可以尝试一下。 进行记录链接时的典型问题是&#xff0c;我们有两个来自不同数据集的记录&#xff0c;它们代表同一实体&#xff0c;但是…

win10修改服务器地址,win10 修改服务器地址

win10 修改服务器地址 内容精选换一换通过华为云创建的ECS服务器默认使用华为云提供的内网DNS进行解析。内网DNS不影响ECS服务器对公网域名的访问。同时&#xff0c;还可以不经Internet&#xff0c;直接通过内网DNS访问其他云上服务内部地址&#xff0c;如OBS、SMN等&#xff0…

enmo_day_06

RAC Data Guard (DG) EMC NAS SAN 双活 数据完整性 约束 &#xff1a; 主键 &#xff1a; 非空 且 唯一 非空 &#xff1a; 唯一 &#xff1a; 外键 &#xff1a; 检查 &#xff1a; DISABLE, ENABLE VALIDATE, NOVALIDATE 约束条件检查 执行语句时 &#xff08;对于非延迟约束…

centos8如何安装yum源(详细步骤)

进入目录 cd /etc/yum.repos.d //进入/etc/yum.repos.d目录查看并删除/etc/yum.repos.d目录下所有的配置文件 ll //查看当前目录的所有文件 rm -rf ./* //删除当前的所有文件下载centos8的镜像源 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors…