2009-10-01 13 views
5

Meine Anwendung erstellt ein Webseitenmodell aus einer Anzahl von XML-Quellen. Diese Quellen werden als DOM-Objekte mit dem normalen Xerces-Parser in den Speicher geparst. Leider sind Xerces-DOM-Objekte nicht Thread-sicher für schreibgeschützte Operationen. Ich möchte das geparste DOM zum Lesen wiederverwenden können. Kennt jemand einen anderen Parser oder einen einfachen thread sicheren Thread für die gelesene DOM Implementierung, die ich verwende?Erstellen eines Thread-sicheren DOM für Lesevorgänge

Antwort

0

Ich kenne keine perfekte und einfache Lösung.

Eine Idee könnte zu die Dom mit thread-safe Objekte erstellen. In diesem Fall wären sie vorzugsweise unveränderlich, wie Sie nur lesen. Die Unveränderlichkeit eröffnet auch Möglichkeiten für weitere Verbesserungen (zum Beispiel die gemeinsame Nutzung von Instanzen, die zu einem geringeren Speicherbedarf führen würde).

Ich wünschte, ich könnte eine Bibliothek vorschlagen, dass dies der Fall ist, da es eine angemessene Menge an Codierung ist ...

4

Saxon bietet DOM-Wrapper seine internen und unveränderliche Datenstruktur.

// 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; 

(getestet mit sächsisch-er 9.5.1)

Verwandte Themen