使用数据库中的新数据更新应用程序的问题

时间:2011-01-23 20:50:51

标签: java database wicket toplink

我有一个Web应用程序,它从数据库中提取数据然后显示它。现在我遇到的问题是每小时我都要对数据库中的数据进行更新;这是由一个单独的应用程序完成的,一切正常。但是,一旦发生这种情况并且用户刷新其网页,则不会显示新数据。

我希望这是有道理的。

我会从应用中提供一些代码,以便您更好地了解它。

我的网络应用程序是使用java编写的netbeans,我有一个持久性单元,它将类映射到数据库中的表。我正在使用wicket将我的组件添加到我的HTML中。

// Java Wicket代码

ApplicationSettings apset = new ApplicationSettingsDAO().getApplicationSettings();    
this.add(new Label("lblGameTime", "" + apset.getGameTimeDays()));

// Wicket html代码

Date : day <span wicket:id="lblGameTime">generated date</span>

// DAO应用程序设置从db获取设置对象并将其返回到上面的 Java Wicket代码

public ApplicationSettings getApplicationSettings() {

    ApplicationSettings settings;

    try {
     Query q = manager.createQuery("select s from ApplicationSettings s where s.setting = :setting");
     q.setParameter("setting", "setting");
     settings = (ApplicationSettings) q.getSingleResult();
  } catch (NoResultException e) {
     ApplicationSettings newSetting = new ApplicationSettings();
     return newSetting;
  }
     return settings;

}

// ApplicationSettings只是一个类。

//每小时代码在另一个有效的应用程序中运行并更新db

Query query6 = manager.createQuery("select s from ApplicationSettings s where s.setting = :setting");
    query6.setParameter("setting", "setting");
    ApplicationSettings apset = (ApplicationSettings) query6.getSingleResult();
    apset.setGameTimeDays(apset.getGameTimeDays() + 1);
    save(apset);

现在,当用户再次加载页面时,我希望 gameTimeDays 是正确的,因为页面会再次从db获取数据,因为它会调用 java wicket代码以上。但价值不会改变。页面上显示的值是更新前的旧陈旧值。无论发生多少次更新,此值仍然是旧值。但是,如果我在tomcat服务器中重新部署或重新启动模块,则该值在该时刻是正确的。

我错过了什么,这是一个很小的问题,答案似乎暗指我。

该值似乎存储在内存中,直到重新部署服务器或其他东西。我不知道很多关于java的内部工作原理。

好的,我希望我提供足够的信息帮助我解决我的困境。

感谢您的帮助。

编辑:持久性库是TopLink Essentials

2 个答案:

答案 0 :(得分:1)

听起来您使用的持久性机制正在缓存您的数据(您不会透露详细信息)。这不是Java的特性,而是特定持久性框架的特征,例如,冬眠。

如果您让我们更多地了解您的持久性提供程序,我们可能会提供更具体的建议。

答案 1 :(得分:1)

您可以使用persistence.xml属性

在TopLink中禁用共享缓存

或者按实体禁用它,或使用刷新或缓存失效。

EclipseLink提供了更多缓存选项并实现了JPA 2.0缓存API。

http://wiki.eclipse.org/EclipseLink/FAQ/How_to_disable_the_shared_cache%3F