2009-10-01 4 views
5

Mi aplicación compone un modelo de página web a partir de una cantidad de fuentes xml. Estas fuentes se analizan en la memoria como objetos DOM con el analizador Xerces normal. Desafortunadamente, los objetos Xerces DOM son no hilo seguro para operaciones de solo lectura. Me gustaría poder reutilizar el DOM analizado para leer. ¿Alguien sabe de otro analizador sintáctico o de un hilo seguro para leer la implementación de DOM que uso?Crear un DOM que sea seguro para las operaciones de lectura

Respuesta

0

No conozco ninguna solución perfecta y simple.

Una idea podría ser recrear el Dom utilizando objetos seguros para subprocesos.

En este caso, serían preferiblemente inmutables, ya que está leyendo solamente. Ser inmutable también abre la posibilidad de otras mejoras (por ejemplo, el intercambio de instancias, que reduciría la huella de memoria).

deseo que podría sugerir una biblioteca que hace esto, ya que es una buena cantidad de codificación ...

4

Saxon ofrece envolturas DOM a su estructura interna de datos e inmutable.

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

(probado con Saxon-él 9.5.1)

Cuestiones relacionadas