0

私は 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) を再起動し、アプリケーション自体を再デプロイしましたが、結果は同じで、何も起こりません。

よろしくお願いします

4

1 に答える 1

1

evict はキャッシュを無効にし、次のクエリがデータベースからデータを返すようにします。

アプリケーション サーバーを再起動しても変更が反映されない場合は、データが変更されていないと考えられます。トランザクションをコミットしたかどうかを確認し、正しいデータベースを更新していることを確認してください。また、起動時にテーブルを削除して再作成していないことを確認してください。

于 2012-12-11T15:48:57.147 に答える