2009-10-01 6 views
5

Mon application compose un modèle de page Web à partir d'un certain nombre de sources XML. Ces sources sont analysées dans la mémoire en tant qu'objets DOM avec l'analyseur Xerces normal. Malheureusement, les objets DOM Xerces sont et non thread sûr pour les opérations en lecture seule. Je voudrais être en mesure de réutiliser le DOM analysé pour lire. Est-ce que quelqu'un sait d'un autre analyseur ou d'un thread simple sûr pour l'implémentation de DOM de lecture que j'utilise?Création d'un DOM sans risque de thread pour les opérations de lecture

Répondre

0

Je ne connais pas de solution parfaite et simple.

Une idée pourrait être de de recréer le Dom en utilisant des objets thread-safe.

Dans ce cas, ils sont de préférence immuable, en lecture seule. Etre immuable ouvre également des possibilités d'améliorations supplémentaires (partage d'instance par exemple, ce qui conduirait à une plus faible empreinte mémoire).

Je voudrais pouvoir vous propose une bibliothèque qui fait cela, car il est une bonne quantité de codage ...

4

fournit Saxon emballages DOM à sa structure de données interne et immuable.

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

(testé avec-il Saxonne 9.5.1)

Questions connexes