私は 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!");
}
}
}
Application Server (Glassfish v3.1.2) を再起動し、アプリケーション自体を再デプロイしましたが、結果は同じで、何も起こりません。
よろしくお願いします