2010-08-09 3 views
25
  1. Я хотел бы знать, какие объекты могут быть повторно использованы (в том же или другом документе) при использовании Java API для XML обработки, JAXP:Java и XML (JAXP) - А как насчет кеширования и безопасности потоков?

    • DocumentBuilderFactory
    • DocumentBuilder
    • XPath
    • Node
    • ErrorHandler (EDIT: Я забыл, что это должно быть реализовано в моем собственном коде, извините)
  2. ли это рекомендуется кэша этих объектов или сделать реализации JAXP уже кэшировать их?

  3. ли (повторно) использовать этих объектов поточно-?

ответ

27

Многократное

В том же потоке, эти объекты могут и должны быть использованы повторно. Например, вы можете использовать DocumentBuilder для анализа нескольких документов.

Thread Safety

DocumentBuilderFactory используется для явной форме заявить, что не поточно, я считаю, что это все-таки правда:

Реализация класса DocumentBuilderFactory НЕ гарантированно поточно безопасно. Для использования DocumentBuilderFactory используется приложение .

От переполнения стека, DocumentBuilder не кажется, поточно либо. Однако в Java SE 5 метод сброса был добавлен, чтобы повторно использовать DocumentBuilders:

XPath, не поточно, от Javadoc

Объект XPath, не поточно-и не реентерабельным. Другими словами, это ответственность приложения к убедитесь, что один объект XPath не используется более чем один поток в любой данный момент времени, и в то время как оценка метод вызывается, приложения могут не рекурсивно вызвать оценку способ.

Узел не поточно, с веб-сайта Xerces

Является ли реализация Xerces DOM потокобезопасной? Нет. DOM не требует, чтобы реализации были потоком безопасным. Если вам нужно получить доступ к DOM из нескольких потоков, вы должны указать , чтобы добавить соответствующие код-замки в код вашего приложения.

ErrorHandler является интерфейсом, так что до вашей реализации этого интерфейса, чтобы обеспечить безопасность потоков. Для указателей на потокобезопасность вы могли бы начать здесь:

+0

Что о кешировании/повторное использование/потоковой безопасности объектов Node? – MRalwasser

+0

Узлы DOM не гарантируются потокобезопасностью. –

+0

Где это указано? – MRalwasser