WSDL web服务从数据库返回旧数据,即使我已经更新了数据库


WSDL web service returns old data from database even if I have updated the database

我有一个正在运行的web服务,它根据存储在数据库中的数据生成WSDL文件。

当我用新数据更新数据库中的一些列,然后重新加载WSDL时,旧值仍然从web服务返回。

我是否必须在EntityManager(在java代码中)上启用something?

首先,您的意思真的是WSDL吗?我很难想象一个系统会在数据库发生更改时更改WSDL(web服务契约,换句话说就是接口描述)(当然这是可能的)。

话虽如此,我认为是web服务响应发生了变化。看起来您正在使用JPA。大多数JPA提供商都添加了一些缓存层。例如,在Hibernate中有L1缓存、L2缓存和查询缓存。如果您手动修改数据库,JPA对这些更改一无所知,仍然提供旧数据。

请指定您使用的JPA提供程序,通常有一种手动刷新缓存的方法(在提供程序或缓存库中)。

更新:原来你使用的是EclipseLink。请尝试使用以下代码清除缓存:

org.eclipse.persistence.jpa.JpaHelper.
  getEntityManager(entityManager).
  getEntityManagerFactory().
  getCache().
  evictAll();

现在棘手的部分-什么时候叫它最好的解决方案是每次直接修改数据库时都执行此功能。您提到的是直接修改数据库的PHP脚本。从PHP调用Java可以实现,例如使用JMX和Jolokia,或者您可以公开另一个SOAP web服务。

另一种解决方案是,如果您可以在一段时间内使用过时的数据,则定期清除缓存。另一方面,在每次更新时清除缓存可能是性能杀手。

还可以通过在persistence.xml中添加以下行来禁用EclipseLink的缓存行为:

<property name="eclipselink.cache.type.default" value="NONE" />