2009-10-01 16 views
5

Moja aplikacja komponuje model strony z wielu źródeł xml. Te źródła są przetwarzane do pamięci jako obiekty DOM za pomocą normalnego analizatora Xerces. Niestety, obiekty Xerces DOM są nie wątek bezpieczny dla operacji tylko do odczytu. Chciałbym móc ponownie wykorzystać sparsowany DOM do odczytu. Czy ktoś wie o innym parserze lub prostym zabezpieczeniu wątków do odczytu implementacji DOM, którego używam?Tworzenie DOM, który jest bezpieczny dla wątków dla operacji odczytu

Odpowiedz

0

Nie znam żadnego idealnego i prostego rozwiązania.

Pomysł może być odtworzyć Dom pomocą obiektów wątku bezpieczny.

W tym przypadku najlepiej byłoby niezmienny, ponieważ jesteś tylko do odczytu. Będąc niezmiennym, otwierają się również możliwości dalszych ulepszeń (np. Udostępnianie instancji, które prowadzi do mniejszego śladu pamięci).

Chciałabym zaproponować biblioteki, który robi to, ponieważ jest sporo kodowania ...

4

Saxon zapewnia owijarki DOM do jego wewnętrznej i niezmiennej struktury danych.

// create Saxon IdentityTransformer 
final Transformer transformer = new TransformerFactoryImpl().newTransformer(); 

// set up holder for the output 
final TinyBuilder outputTarget = new TinyBuilder(
    new PipelineConfiguration(new Configuration())); 

// transform into Saxon's immutable TinyTree 
transformer.transform(xml, outputTarget); 

// extract the whole XML as TinyNode 
final TinyNodeImpl tinyNode = outputTarget.getTree().getNode(0); 

// wrap TinyNode as DOM 
final NodeOverNodeInfo nodeOverNodeInfo = DocumentOverNodeInfo.wrap(tinyNode); 

// cast to DOM 
final Document doc = (Document) nodeOverNodeInfo; 

(testowane z sasko-on 9.5.1)

Powiązane problemy