Ошибки кэша демаршаллера 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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