【问题标题】:How to synchronize my webapplication to my database?如何将我的 Web 应用程序同步到我的数据库?
【发布时间】:2012-11-28 20:41:15
【问题描述】:

我有一个 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) 并重新部署了应用程序本身,但效果相同:没有任何反应。

提前谢谢你 范儿

【问题讨论】:

    标签: java database jakarta-ee jpa jpa-2.0


    【解决方案1】:

    evict 将使缓存失效并确保下一个查询从数据库返回数据。

    如果您重新启动应用程序服务器,但仍然看不到更改,那么我的猜测是您没有更改数据。检查您是否提交了事务,并检查您是否正在更新正确的数据库。还要确保您没有在启动时删除并重新创建表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-16
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2019-02-02
      • 1970-01-01
      • 2012-09-11
      相关资源
      最近更新 更多