实体管理器可以由两个servlet共享吗?

时间:2013-01-16 14:01:40

标签: servlets deployment jpa-2.0

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

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

1 个答案:

答案 0 :(得分:0)

这与使用同一数据库的2个不同JPA应用程序类似。在这种情况下,每个使用自己的L2缓存的应用程序都会加剧这个问题。您可以让应用程序同步其注释中提到的L2缓存。或者,您可以评估EntityManager的使用情况,并确保它们不会长时间保留,或者偶尔会被清除。仅在需要时获取EM,并在完成此过程时关闭或清除EM。如果不使用L2缓存,这将确保根据需要更多地根据事务操作从数据库中读取数据。

即使在单个应用程序使用中也可能发生过时数据,因此强烈建议使用乐观锁定以避免使用过时数据进行覆盖。