gpt4 book ai didi

java - 即使更新后,对象仍具有旧值

转载 作者:行者123 更新时间:2023-12-01 05:48:03 25 4
gpt4 key购买 nike

我在应用程序启动时对对象进行缓存,该对象是解析 xml 文件的结果并将其内容存储在 ArrayList 中。

现在我更新了xml文件中的数据,但是缓存中的对象仍然具有旧值,这是我称之为缓存对象的代码:

  ObjectsCaching objCache = ObjectsCaching.getObjectsCaching();
Cache cache = objCache.getMemoryCache();
List<FormPorperties> formList = null; //to obtain form properties from xml file whether form cashed object or through parsing xml file
if (cache.get("formValidators") == null) {//if object is not cashed in memory
try {
InputStream fis = this.getClass().getResourceAsStream("FormFieldsNames.xml");
// list of FormPropereties, each formProperties object contain form name
// and HashMap of field with its validation
formList = XMLFormParsing.getFormsProperties(fis); //singelton class
cache.put("formProperties", formList); //cash object
} catch (IOException ex) {
Logger.getLogger(ContextListener.class.getName()).log(Level.SEVERE, "Error in parsing FormFieldsNames file ", ex);
} catch (XMLStreamException ex) {
Logger.getLogger(ContextListener.class.getName()).log(Level.SEVERE, "Error in parsing FormFieldsNames file ", ex);
}

} else {
formList = (List<FormPorperties>) cache.get("formProperties");
}

我尝试删除检查代码

 if (cache.get("formValidators") == null)

强制应用程序解析文件,但它仍然读取旧内容

xml文件的内容是表单名称和各个表单字段,我使用这种方式在服务器端对表单字段进行验证。

这是内容

 <form name="groupAdditoinEditionForm">
<fieldName > groupEname </fieldName>
<fieldName > groupAname </fieldName>
</form>

<form name="userAdditionFrom">
<fieldName > userName </fieldName>
<fieldName > country </fieldName>
<fieldName > faxNo </fieldName>
<fieldName > email </fieldName>
<fieldName > confirmEmail </fieldName>
<fieldName > accessControl </fieldName>
<fieldName > lang </fieldName>
<fieldName > group </fieldName>
</form>

我将第一个标签添加到 xml 文件,但解析器仍然读取旧值!!

最佳答案

这可能是问题的一部分:

// Uses key "formValidators"
if (cache.get("formValidators") == null))
...
// Uses key "formProperties"
formList = (List<FormPorperties>) cache.get("formProperties");

您确实应该两次使用相同的 key 吗?或者(理想情况下)仅获取一次,然后仅在 formList 仍为 null 时才执行重新填充部分...如下所示:

// Adjust "key" to whatever cache key you *really* want to use
List<FormPorperties> formList = (List<FormPorperties>) cache.get("key");
if (formList == null) {
// Populate and cache
}

现在至于为什么这些值没有被更新......您是否正在采取任何措施使缓存失效?如果没有,您期望什么让它更新值?您的系统的任何部分是否会监视 XML 文件以便从缓存中删除过时的条目?

关于java - 即使更新后,对象仍具有旧值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5429865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com