2012-12-11 39 views
0

我有一個Java Web應用程序,我通過JPA2訪問Oracle 11g數據庫(EclipseLink)如何將我的web應用程序同步到我的數據庫?

現在不得不對存儲的數據進行一些更改,但我的應用程序仍在緩存舊值。

問題:如何強制我的應用程序刪除整個緩存並從數據庫重新加載數據(應用程序正在運行時)?

我曾嘗試以下,但似乎沒有影響:

@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),並重新部署應用程序本身,但同樣的效果:沒有任何反應。

預先感謝您 範特

回答

1

逐出將緩存失效並確保下一個查詢從數據庫中返回的數據。

如果您重新啓動應用程序服務器,並且仍然沒有看到更改,那麼我的猜測是您沒有更改數據。檢查您是否提交了該事務,並檢查您是否正在更新正確的數據庫。同時確保您在啓動時不丟棄和重新創建表格。

相關問題