我有一个 Java Web 应用程序,我正在通过 JPA2 (EclipseLink) 访问一个 Oracle 11g 数据库
现在必须对存储的数据进行一些更改,但我的应用程序仍在缓存旧值。
问题:如何强制我的应用程序删除整个缓存并从数据库重新加载数据(在应用程序运行时)?
我尝试了以下方法,但似乎没有效果:
@ManagedBean
@SessionScoped
public class CacheEvictall implements Serializable {
// (...)
public void evictDatabaseCache() {
// clear persistence cache
EntityManager em = emf.createEntityManager();
if (em != null) {
LOGGER.info("Evicting database cache!");
try {
utx.begin();
emf.getCache().evict(FooClass.class);
emf.getCache().evict(BarClass.class);
// or: emf.getCache().evictAll();
em.flush();
utx.commit();
} catch (Exception e) {
e.printStackTrace();
}
} else {
LOGGER.log(Level.WARNING, "No EntityManager! Cannot evict cache!");
}
}
}
我什至重新启动了应用程序服务器(Glassfish v3.1.2)并重新部署了应用程序本身,但效果相同:没有任何反应。
提前谢谢你