Ошибки кэша демаршаллера Jaxb и ошибки проверки, общие для потоковJAVA

Программисты JAVA общаются здесь
Anonymous
Ошибки кэша демаршаллера Jaxb и ошибки проверки, общие для потоков

Сообщение Anonymous »

У меня возникли некоторые проблемы с эффективностью, и я хотел ускорить свое приложение, поэтому я кэшировал Unmarshallers:
Кэшированная карта Unmarshallers:

Код: Выделить всё

 private Map cachedUnmarshallers = new HashMap();
Нанесение на карту Unmarshallers:

Код: Выделить всё

            cachedUnmarshallers.put(AKey, createUnmarshaller(AKey));
cachedUnmarshallers.put(BKey, createUnmarshaller(BKey));
cachedUnmarshallers.put(CKey, createUnmarshaller(CKey));
cachedUnmarshallers.put(DKey, createUnmarshaller(DKey));

Функция создания Unmarshaller:

Код: Выделить всё

    private Unmarshaller createUnmarshaller(String key) throws JAXBException {

JAXBContext jaxbContext =
JAXBContext.newInstance(keyToClassMap.get(key));
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
MessageValidationEventHandler validationEventHandler = new MessageValidationEventHandler();
unmarshaller.setEventHandler(validationEventHandler);

return unmarshaller;
}
И проблема с приведенным выше кодом заключается в том, что validationEventHandler используется несколькими потоками, и иногда я получаю ошибку из другого потока при обработке правильных данных. Удаление ошибок из validationEventHandler до или после обработки XML не помогло Не могу это исправить, потому что когда два потока запускаются одновременно: один с правильным XML, второй с неправильным, оба могут видеть одни и те же ошибки в validationEventHandler.
Если бы я удалил свою карту, которая кэшируется С Unmarshallers все снова станет медленным, создание Unmarshallers занимает полсекунды, а в zip-архиве есть сотни файлов, для проверки которых требуется много времени. Итак, вы знаете, как это решить?

Подробнее здесь: https://stackoverflow.com/questions/790 ... by-threads

Вернуться в «JAVA»