2013-01-16 29 views
0

我已经将我的公共类(域对象,实用程序和JPA2 - 持久性服务)打包到一个jar中。我将这个jar包装到我的libs中,用于其他两个应用程序,并为每个应用程序独立配置持久性单元和实体管理器。这两个应用程序都在同一个tomcat上作为servlet进行部署。但是,如果一个应用程序操纵MySQL-DB的数据,另一个应用程序不会使用更新的数据。实体管理器可以由两个servlet共享吗?

如何使用集中式持久性服务并允许所有应用程序访问最新数据?我必须使用JNDI还是将所有东西都打包成EAR而不是单个WAR?

+0

您需要为JPA共享L2缓存。这个问题与servlet无关。 – BalusC

+0

提到servlet只是为了描述一个特定的用例。 – Franatique

+0

好的。仅仅指出这不能/不应该使用Servlet API工具来解决。 – BalusC

回答

0

这与使用2个不同的JPA应用程序碰到相同的数据库类似。在这种情况下,每个应用程序使用自己的二级高速缓存将加剧该问题。如评论中所述,您可以让应用程序同步他们的L2缓存。或者您可以评估EntityManager的使用情况,并确保它们不会持续很长时间,或者偶尔会被清除。只有在需要时才能获得EM,并在完成此过程时关闭或清除它。如果不使用L2缓存,这将确保根据需要更多地根据事务操作从数据库读入数据。

即使在单个应用程序使用情况下也会出现过时的数据,因此强烈建议使用乐观锁定以避免用陈旧数据覆盖。

相关问题