我目前正在开发一个使用JPA(当前为Toplink)进行持久化的项目。当前,我们正在运行单个应用程序服务器,但是为了实现冗余,我们想添加一个负载平衡器和另一个服务器(可能随着服务器的增长而增加)。
首先,我遇到了JPA缓存问题。由于两个进程将更新同一数据库,因此JPA缓存将返回缓存的值,而不是返回数据库。我看到了如何关闭它,数据库本身实现了一定程度的缓存。是否完全关闭缓存才能进入此处?我看到了告诉JPA始终在查询级别从数据库获取数据的方法,但是在多服务器环境中,您似乎总是希望这种情况发生。
除了这个特定的问题,我对那些使用多个应用程序服务器实施JPA解决方案的人以及实施过程中出现了哪些问题(以及您的任何建议)感兴趣。
非常感谢。
如您所知,您可以禁用共享缓存,请参阅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/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天的超时时间,为具有只读缓存的缓存启用协调,而对于大多数只读缓存的缓存则启用协调。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句