Объект имеет свои старые значения даже после обновления - PullRequest
1 голос
/ 25 марта 2011

Я делаю кеширование для объектов в начале моего приложения, этот объект является результатом синтаксического анализа 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-файл, но парсер все еще читает старые значения !!

1 Ответ

0 голосов
/ 25 марта 2011

Ну, это может быть частью проблемы:

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

Конечно, вы должны использовать один и тот же ключ оба раза? Или (в идеале) просто извлекать один раз, а затем только проходить часть повторного заселения, если formList все еще равно нулю ... что-то вроде этого:

// 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 для удаления устаревших записей из кэша?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...