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

glassfish

在我的四部分系列的第二部分中,我将解释将Coherence与EclipseLink和GlassFish结合使用的第一个策略。它描述了配置带有Coherence的JPA支持的Cache所必须采取的步骤,以及如何在GlassFish中使用它。高性能数据存储。

一般的做法

您可以将Coherence API与通过JPA映射的数据库支持的缓存一起使用。 网格通过JPA CacheLoader和CacheStore实现访问关系数据。 在这种“传统”一致性方法中,TopLink Grid提供了针对EclipseLink JPA优化的CacheLoader和CacheStore实现。 (EclipseLinkJPACacheLoader和EclipseLinkJPACacheStore)都包含在toplink-grid.jar文件中。 这样,您将使用标准的JPA运行时配置文件persistence.xml和JPA映射文件orm.xml。 必须指定Coherence缓存配置文件coherence-cache-config.xml来覆盖默认的Coherence设置并定义CacheStore缓存方案。

细节

CacheLoader实现通过EclipseLink将所有读取操作/查询直接重定向到数据库。 CacheStore负责使用EclipseLink对数据库执行的所有写入操作(插入,更新,删除)。 该解决方案基本上独立于GlassFish及其JPA提供程序。 您只需将Coherence与它的本机API一起使用,并且Coherence负责持久化实体。 该方法在文档中称为“传统相干配置”。

制备

为了使该示例和以下每个示例都能正常工作,我们需要做一些准备。 首先是获得所有必需的软件。 获得Java SE开发套件6u23 , GlassFish 3.1(NetBeans的一部分) , MySQL Community Server(5.5.9) , TopLink(11.1.1.4.0)和Coherence( 3.6.1.0)的副本 。 任何IDE都可以。 我将所有示例都基于NetBeans 7.0 Beta2 。 您应该首先安装零碎的零件。 使用MySQL创建一个空的“一致性”数据库。 我们将在所有示例中使用此示例。 我不会指导您完成此操作。 我将从相关的一致性部分开始。 这也是您需要遵循本系列其他部分的配置。 所以你最好保留它;)

将您的Coherence下载文件解压缩到合适的位置(例如x:\ Oracle \ coherence \),然后通过设置并运行示例缓存服务器应用程序来检查安装。 转到\ bin文件夹,然后执行cache-server.cmd / sh。 在此之前,请确保JAVA_HOME变量指向有效的JDK安装。 如果一切顺利,您将收到消息:“ Started DefaultCacheServer…”。 一个简单的旁注:一致性是群集感知的。 这意味着,它将自动尝试发现子网中其他正在运行的Coherence节点。 如果您看到除“ ActualMemberSet = MemberSet(Size = 1)”以外的其他输出,则应在此处停止并将Coherence配置为仅在计算机上运行 。太好了,所有设置。让我们执行示例客户端。启动coherence.cmd / sh并等待输出“ Map(?):”。如果您使用服务器控制台进行检查,将看到以下内容:

(thread=Cluster, member=1): Member 2 joined Service Management with senior member 1

试一试,然后尝试以下命令,每个命令都以返回确认:帮助,缓存myCache,输入消息“ hello”,获取消息,大小,列表,再见。 要获得更多帮助,请查阅教程 。

付诸实践

使用NetBeans启动一个新的Java / Java类库项目。 将其命名为“ GridEntityExample”(选中专用的lib文件夹框)。 将coherence.jar,toplink-grid.jar和mysql-connector-java-5.1.13-bin.jar添加到lib文件夹,并将它们添加到项目依赖项中。

添加两个新的程序包实体和服务器(例如net.eisele.coherence.entities,net.eisele.coherence.server)和

由于我们已经有了高速缓存服务器示例,因此很容易对其进行修改以满足我们的需求。 将新的实体类(员工)添加到实体包中。 将主键类型更改为“ int”,然后单击下一步。 从下拉框中选择EclipseLink JPA 2.0。 由于向导将不允许您完成操作,因此请创建一个新的数据库连接(jdbc:mysql:// localhost:3306 / coherence),然后单击完成。 将两个私有字符串(firstName,lastName)及其获取器和设置器添加到实体。 从id属性中删除@GeneratedValue(稍后会详细介绍)。 persistence.xml中的一些调整完成了配置。 添加以下内容:

<property name="eclipselink.ddl-generation" value="create-tables" />
<property name="eclipselink.ddl-generation.output-mode"
value="database" />            
<property name="eclipselink.jdbc.read-connections.min" value="1" />
<property name="eclipselink.jdbc.write-connections.min" value="1" />
<property name="eclipselink.jdbc.batch-writing" value="JDBC" />
<property name="eclipselink.logging.level" value="FINE" />
<property name="eclipselink.logging.thread" value="false" />
<property name="eclipselink.logging.session" value="false" />
<property name="eclipselink.logging.exceptions" value="false" />
<property name="eclipselink.logging.timestamp" value="false"/>

现在,我们需要一个简单的StartCacheServer类,该类应抵抗服务器软件包。 给它一个简单的主要方法:

public static void main(String[] args) throws UnknownHostException {
// Restrict Coherence to localhost
System.setProperty("tangosol.coherence.wka", InetAddress.getLocalHost().getHostAddress());// Start CacheServer
DefaultCacheServer.main(new String[0]);
}

现在我们必须配置一致性。 这是通过coherence-cache-config.xml文件完成的。 完整的文件可以在教程中找到 。 成功的关键是class方案的第二个init参数。 您必须从那里的persistence.xml引用持久性单元:

<init-param>
<param-type>java.lang.String</param-type>
<param-value>GridEntityExamplePU</param-value>
</init-param>

右键单击StartCacheServer并运行它。 您应该看到已经知道的消息:“ Started DefaultCacheServer…”。

好。 现在,我们将第一位员工插入数据库。 创建一个简单的InsertExample类:

public static void main(String[] args) throws UnknownHostException {
// Restrict Coherence to localhost
System.setProperty("tangosol.coherence.wka", InetAddress.getLocalHost().getHostAddress());// Disable local storage--need to start independent CacheServer
System.setProperty("tangosol.coherence.distributed.localstorage", "false");// Get the configured Cache 
NamedCache cache = CacheFactory.getCache("Employee");//Create a new Employee
Employee emp = new Employee();
emp.setFirstName("Markus");
emp.setLastName("Eisele"); 
emp.setId(1);//Put the Employee into the cache
cache.put(1, emp);
}

运行它并检查您的数据库,是否有新创建的Employee。 它应该是 :)

做完了 就这样。 好的,GlassFish部分到底在哪里?

在GlassFish中使用此方法

这很简单。 创建一个新的域(我们称其为一致性),并创建一个新的WebApplication(将其称为GridEntityWeb)。 添加GridEntityExample项目和coherence.jar作为依赖项。 现在,您必须配置缓存。 再次通过coherence-cache-config.xml完成​​。 在WEB-INF / classes中创建一个,并使其引用EclipseLinkJPA服务名称。

<cache-config><caching-scheme-mapping>
<cache-mapping>
<cache-name>*</cache-name>
<scheme-name>distributed-eclipselink</scheme-name>
</cache-mapping>
</caching-scheme-mapping><caching-schemes>
<distributed-scheme>
<scheme-name>distributed-eclipselink</scheme-name>
<service-name>EclipseLinkJPA</service-name>
</distributed-scheme>
</caching-schemes></cache-config>

就这样。 确保StartCacheServer正在运行,并启动GlassFish域和应用程序。 如果仅从InsertExample中复制几行,则可以快速测试一切是否正常。 现在剩下要做的就是找到一种干净的方法将其集成到您的应用程序中。 也许您可以提出一个通用的Coherence Crud服务(可能基于Adam的建议 )。

缺点和想法

使用这种方法时,必须配置持久性单元,以确保在插入或更新实体时不对实体进行任何更改。 JPA提供程序对实体所做的任何更改都不会反映在Coherence缓存中。 这意味着高速缓存中的实体将与数据库内容不匹配。 特别是,实体不应使用ID生成(例如@GeneratedValue)来获取ID。 这意味着,为了将对象插入Coherence缓存中,您还需要提供其身份作为键。

ID通常是实体存储在Coherence中的密钥。 不应使用乐观锁定(例如,@ Version),因为它可能导致数据库事务提交失败。

因此,总的来说,这并不是一种真正通用的方法,它仅适用于一些要处理大量数据的特殊情况。

但是这里到底是什么交易。 让我们看看:如果您循环运行配置的示例并插入12.635 Employee对象,则在我的计算机上大约需要13分钟。 如果在同步模式下运行Coherence,则会发生这种情况。 但是您可以利用称为“后写”的功能通过异步执行数据库更新来缩短应用程序响应时间。 如果将一行添加到CacheServer的coherence-cache-config.xml:

<write-delay>10s</write-delay>

从应用程序角度出发,插入插件所需的时间减少到9秒! 当然,运行中的服务器仍然需要时间异步处理更新,但是对于客户端而言,这是最佳行为。

现在足够了。 我将尝试通过示例逐步解释更多概念。 正如您可能已经猜到的,是否使用缓存有很多要知道的地方。 下一部分将介绍Coherence作为带有GlassFish的EclipseLink的L2缓存。 谢谢阅读。 敬请关注。

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

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

翻译自: https://www.javacodegeeks.com/2011/11/high-performance-jpa-with-glassfish-and_03.html

glassfish

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

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

相关文章

java开发一个连连看小游戏

导读:连连看是一种消除类益智游戏,核心要求是在规定的时间内,消除游戏界面中选中的两张相同的图案,直至完全消除所有图案。这款游戏操作简单(只需单击鼠标左键操作)、面向人群广泛,在限时操作的游戏要求下,吸引玩家自发地锻炼观察能力、判断能力和反应能力,故从推出至今…

java枚举的特点_Java中有些好的特性(二):枚举

前言我在写上一篇时&#xff0c;开始选了一个很土的名字“Java超过C#的地方”&#xff0c;然后引起了某些同学的不满&#xff0c;后来修改了个名。我在这里再次申明一下&#xff0c;我没有贬低任何语言之意&#xff0c;纯粹是从一个.NET程序员的角度去看Java&#xff0c;看看是…

java开发一款推箱子游戏

导读:社会在进步,人们生活质量也在日益提高。高强度的压力也接踵而来。社会中急需出现新的有效方式来缓解人们的压力。此次设计符合了社会需求,Java推箱子游戏可以让人们在闲暇之余,体验游戏的乐趣。具有操作简单,易于上手的特点。 推箱子游戏的玩法十分简单——控制人物绕…

java ee技术_Java EE 6与Spring Framework:技术决策过程

java ee技术在过去的几个月中&#xff0c;我们经历了这个决策过程&#xff1a;为Java平台上的企业开发选择哪种技术堆栈&#xff1f; 有多种选择。 但是&#xff0c;我们深入讨论的是&#xff1a;纯Java EE 6堆栈与带有Java EE的Spring。 以下博客文章总结了当您考虑这些技术堆…

java开发一款坦克大战游戏

导读:随着人们对生活质量的要求一天比一天高,为了让人们更好地开掘自身的智慧,游戏就此进入了大众的视野,在人们的生活中有着重要的位置,已然变得必不可少。游戏产业推动高新技术不断升级,极大地促进了经济的增长,推动了“第四产业”的经济腾飞。坦克大战游戏是童年时期…

java大转盘抽奖概率算法_幸运大转盘抽奖 抽奖算法 程序实现逻辑

近期碰到的一个需求&#xff0c;实现一个类似大转盘抽奖的功能&#xff0c;需自定义奖项&#xff0c;各奖项中奖概率&#xff0c;当日抽奖最大次数&#xff0c;抽奖成本等。分享一个简单的java代码的实现的思路&#xff0c;有不足之处感谢各位指正。初步方法首先要定义几个奖品…

java开发银行柜员业务绩效考核系统

导读:当今社会己进入信息社会时代,信息己经受到社会的广泛关注,被看作社会和科学技术发展的三大支柱(材料、能源、信息)之一。信息是管理的基础,是进行决策的的基本依据。在一个组织里,信息己作为人力、物力、财力之外的第四种能源,占有重要的地位。然而,信息是一种非…

一文教你使用java开发一款坦克大战游戏

导读&#xff1a;随着人们对生活质量的要求一天比一天高&#xff0c;为了让人们更好地开掘自身的智慧&#xff0c;游戏就此进入了大众的视野&#xff0c;在人们的生活中有着重要的位置&#xff0c;已然变得必不可少。游戏产业推动高新技术不断升级&#xff0c;极大地促进了经济…

Java 8流中的常见SQL子句及其等效项

功能编程允许使用通用语言进行准声明性编程 。 通过使用功能强大的流畅API&#xff08;例如Java 8的Stream API &#xff09;或jOOλ的顺序Stream扩展Seq或更复杂的库&#xff08;例如javaslang或functionaljava&#xff09; &#xff0c;我们可以以一种非常简洁的方式来表示数…

混合使用Azure LB和ILB访问相同web服务(3)

接下来我们来配置Azure Load balancer&#xff0c;就是面向公网的负载均衡器&#xff1a; 1.在该测试中&#xff0c;为了保持内网访问和外网访问一样的体验&#xff0c;本地端口和public端口和ILB一样&#xff0c;同样是80&#xff1a; PS C:\> Get-AzureVM -ServiceName …

mysql日活统计函数_如何通过简化日活模型,预估一个产品的日活(DAU)?

本文笔者通过简化日活模型&#xff0c;粗略地估算出未来一段时间的产品日活规模。进而通过日活的规模&#xff0c;再去估算一些潜在收益&#xff0c;以及运营成本等等数据。这段时间&#xff0c;经常有人问到以下的问题&#xff1a;按照现在的推广和留存&#xff0c;我们在未来…

罐中研讨会:设置JBoss BPM Suite全天研讨会

是否在寻找一种简单的方法来宣传&#xff0c;展示或演示JBoss业务流程管理套件&#xff08;BPM Suite&#xff09;产品的入门难度&#xff1f; 别无所求&#xff0c;因为我们召集了这个研讨会&#xff0c;因此您可以围绕JBoss BPM Suite构建一个晚上&#xff0c;半天或全天的…

java实现影视创作论坛

导读:随着时代的发展,互联网的出现,给传统影视行业带来的最大便利就是,方便了影视从业人员以及爱好者的交流和互动,而为用户提供一个书写影评,阅读影评以及回复影评的平台,以影评为载体来使用户感受影评、解读影评的是互联网在传统影视行业下应运而生的产物。 所谓的影视…

一文教你使用java开发一款推箱子游戏

导读&#xff1a;社会在进步&#xff0c;人们生活质量也在日益提高。高强度的压力也接踵而来。社会中急需出现新的有效方式来缓解人们的压力。此次设计符合了社会需求&#xff0c;Java推箱子游戏可以让人们在闲暇之余&#xff0c;体验游戏的乐趣。具有操作简单,易于上手的特点。…

uiautomator的坑和AAPT命令方式启动一个应用程序

最近在使用UIautomator完成公司的一个主流程的自动化&#xff0c;因为不适用H5和IOS所以会放弃这个工具的使用&#xff0c;现在记录在使用uiautomator的一些问题&#xff1a; 案列1&#xff1a;使用命令去启动要运用的apk包 使用命令方式启动&#xff0c;可以使用SDK中自带的aa…

一文教你用java实现即时通讯软件的设计(附下载源码)

导读&#xff1a;即时通讯软件即所谓的聊天工具&#xff0c;其主要用途是用于文字信息的传递与文件传输。使用eclipse作为即时通讯软件的开发工具&#xff0c;使用Socket建立通讯渠道&#xff0c;多线程实现多台计算机同时进行信息的传递&#xff0c;swing技术等进行实际开发相…

Divide and conquer:Drying(POJ 3104)

烘干衣服 题目大意&#xff1a;主人公有一个烘干机&#xff0c;但是一次只能烘干一件衣服&#xff0c;每分钟失水k个单位的水量&#xff0c;自然烘干每分钟失水1个单位的水量&#xff08;在烘干机不算自然烘干的那一个单位的水量&#xff09;&#xff0c;问你最少需要多长时间烘…

java 的 AccessController.doPrivileged使用

AccessController.doPrivileged意思是这个是特别的,不用做权限检查. 在什么地方会用到呢:加入1.jar中有类可以读取一个文件,现在我们要使用1.jar去做这个事情.但是我们的类本生是没有权限去读取那个文件的,一般情况下就是眼睁睁的看着了. 但是jiava提供了doPrivileged.在1.ja…

cordova 实现网页缓存_如何解决ionic,cordova混合开发的app缓存大的问题

如何解决ionic&#xff0c;cordova混合开发的app缓存大的问题关注:143 答案:2 mip版解决时间 2021-02-05 06:24提问者旧梦已过期2021-02-04 16:54如何解决ionic&#xff0c;cordova混合开发的app缓存大的问题最佳答案二级知识专家臸釪樶初2021-02-04 17:10可以试试sd卡挂在&a…

当年课设期末大作业,班主任让我们做一个新闻发布管理系统

导读:基于web的新闻发布及管理系统的设计与实现,是动态网页和数据库结合,通过事件来处理新闻。我们对最新信息的更新和发布需要比较及时,而动态交互网页能实现这些功能,新闻发布及管理系统就是一个能够在网上实现新闻的发布及管理,让人们更好的获取更新的新闻资讯。 随着电…