java - 具有多个服务器的 JPA

标签 java database jpa toplink

我目前正在开发一个项目,该项目使用 JPA(目前是 Toplink)来实现其持久性。目前,我们正在运行单个应用程序服务器,但是,为了冗余,我们想添加一个负载平衡器和另一个应用程序服务器(随着它的增长可能会更多)。

首先,我遇到了 JPA 缓存问题。由于两个进程将更新同一个数据库,因此 JPA 缓存返回缓存的值而不是转到数据库。我看到了如何关闭它,并且数据库本身实现了一定程度的缓存。完全关闭缓存是这里的方法吗?我看到了告诉 JPA 始终在查询级别从数据库获取信息的方法,但在多服务器环境中,您似乎总是希望这种情况发生。

除了这个特定的问题,我还想了解已经实现了具有多个应用程序服务器的 JPA 解决方案的任何人,以及实现过程中出现的问题(以及您的任何建议)。

非常感谢。

最佳答案

如您所见,您可以禁用共享缓存,请参阅 http://wiki.eclipse.org/EclipseLink/Examples/JPA/Cachinghttp://wiki.eclipse.org/EclipseLink/FAQ/How_to_disable_the_shared_cache%3F

根据您的数据和要求,EclipseLink 中还有其他可用选项。

选项列表包括:

  1. 禁用共享缓存

  2. 启用缓存协调(参见 http://www.eclipse.org/eclipselink/api/2.1/org/eclipse/persistence/config/PersistenceUnitProperties.html#COORDINATION_PROTOCOL)

  3. 设置缓存失效超时(参见 http://www.eclipse.org/eclipselink/api/2.1/org/eclipse/persistence/annotations/Cache.html#expiry%28%29)

  4. 启用乐观锁定,这将确保无法更新任何陈旧对象,当对陈旧数据进行更新时它将失败,并且 EclipseLink 会自动使缓存中的对象失效。

  5. 研究 EclipseLink 和 Oracle Coherence 的 Oracle TopLink 集成以提供分布式缓存。

另请参阅,http://en.wikibooks.org/wiki/Java_Persistence/Caching#Caching_in_a_Cluster

没有完美的解决方案,通常使用的解决方案取决于数据/类,通常一个应用程序有一组只读类、读为主类和写为主类。就我个人而言,我会为只读启用缓存 1 天超时,为主要读​​取启用缓存协调缓存,并为主要写入禁用缓存。

关于java - 具有多个服务器的 JPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3444449/

相关文章:

java - Apache flink 维基百科使用 Scala 编辑分析

java - 无法围绕 appengine 数据存储持久性

database - 我可以使用远程数据库服务器配置 ssl 吗?

java - 未找到使用 OpenJPA 和 RuntimeUnenhancedClasses 的类型的元数据

java - 注入(inject) Guice 的 DAO 应该是单例吗?

java - IntWritable.set(IntWritable) 抛出错误

java - 如何为 javax.xml.ws.Holder 设置一个值?

mysql - 如何检索两个日期之间的报告数字

mysql - EER 和 UML 之间的差异

java - 如何限制 CriteriaBuilder 查询中的记录数?