当前位置:  开发笔记 > 编程语言 > 正文

具有多个服务器的JPA

如何解决《具有多个服务器的JPA》经验,为你挑选了1个好方法。

我目前正在开发一个使用JPA(Toplink,目前)持久化的项目.目前,我们正在运行单个应用程序服务器,但是,为了实现冗余,我们希望添加一个负载均衡器和另一个应用程序服务器(并且可能随着它的增长而增加).

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

除了这个具体的问题,我对那些已经实现了具有多个应用程序服务器的JPA解决方案的人以及在实现过程中出现的问题(以及您提出的任何建议)感兴趣.

非常感谢.



1> James..:

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

EclipseLink中还有其他选项可供选择,具体取决于您的数据和要求.

选项列表包括:

    禁用共享缓存

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

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

    启用乐观锁定,这将确保无法更新任何过时对象,当发生过时数据更新时,它将失败,EclipseLink将自动使缓存中的对象无效.

    调查EclipseLink和Oracle Coherence的Oracle TopLink集成,以提供分布式缓存.

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

没有完美的解决方案,通常使用的解决方案取决于数据/类,通常应用程序具有一组只读类,读取主要类和大多数类.我个人会在1天超时的情况下启用只读缓存,启用具有缓存协调的缓存(主要是读取),并且主要禁用写入缓存.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有