如何在共享同一数据库的两个不同应用程序之间同步持久性对象?

如何在共享同一数据库的两个不同应用程序之间同步持久性对象?

问题描述:

我有两个共享公用数据库的应用程序。第二个应用程序不存储任何数据,但使用第一个应用程序生成的数据。他们都使用启用缓存的JPA。问题是当我用我的第一个应用程序更新数据库时,第二个缓存不是。第一个更新数据库后,我希望第二个刷新。是否有内置的“消息传递”/“触发”机制来告诉第二个应用从缓存中驱逐一些实体,以便在这些实体的下一次调用中重新加载它们?如何在共享同一数据库的两个不同应用程序之间同步持久性对象?

我使用EclipseLink,但理想情况下会有一个标准的做法。

谢谢。

没有任何标准的过程。如果您有2个EntityManagerFactory对象,那么您必须通知他们其他地方发生了某些变化(并更新您的L2缓存)。如果您在其他地方有一些更新数据库内容的非JPA进程,也是如此。

看看你的RDBMS,看看是否有一些机制,当一些桌改变

+1

没错通知的侦听器进程。谢谢。对于EclipseLink,我找到了这个教程,尽管它看起来只适用于Oracle dbs ... http://wiki.eclipse.org/EclipseLink/Examples/JPA/DCN – Thomas 2014-10-06 12:07:49

+0

好吧,让它工作使用jdbc LISTEN和一些轮询java端+在需要缓存驱逐的表上创建一个触发器。 – Thomas 2014-10-06 19:52:13