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
5
A
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
- 1. Liste des types de données Delphi avec des opérations de lecture/écriture 'thread-safe'?
- 2. Opérations atomiques en C++ pour les structures sans verrou
- 3. Erreur de création objet analyseur dom xercesc
- 4. Recherché: DB pour les opérations de lecture rapide à accéder à partir rubis applications
- 5. Suggestions de lecture pour BITS/Octets et exemple de code pour effectuer des opérations, etc
- 6. Rendre l'élément DOM efficace en lecture seule
- 7. Modifier les opérations de journal dans .NET?
- 8. Objets CLR SQL pour les opérations lourdes
- 9. Création de bibliothèques Windows C++ sans runtime?
- 10. Spring-WS génère un WSDL sans opérations
- 11. C#, les opérations de type de données
- 12. Les GUID visibles constituent-ils un risque de sécurité?
- 13. Solution recommandée pour les opérations de script sur WebDAV?
- 14. Comment ignorer les espaces lors de la lecture d'un fichier XML DOM
- 15. Quels sont les meilleurs outils de reporting pour les opérations de taille moyenne (ouvertes et commerciales)
- 16. Récupère la valeur css sans l'élément DOM
- 17. Opérations sur les fichiers
- 18. Propriétés du système SSL - Risque de sécurité?
- 19. Risque d'utilisation d'Apache mod_proxy
- 20. Test GWT sans GWTTestCase et DOM
- 21. CIL: "L'opération risque de déstabiliser l'exécution"
- 22. Création d'élément XUL du navigateur Firefox à risque de l'extension donne (NS_ERROR_FAILURE) [nsIWebNavigation.sessionHistory]
- 23. Les opérations invoquées sur un objet via JMX s'exécutent-elles dans un thread séparé?
- 24. Traçage des opérations de registre en C#
- 25. Comment désactiver les événements de clic sur un objet DOM parent sans désactiver les événements de clic sur son objet DOM enfant?
- 26. Imprimer les modifications DOM
- 27. Opérations de service RESTful pour l'interrogation de données
- 28. Singleton getInstance dans les méthodes de travail de thread
- 29. Jquery: Faire des opérations sur les chaînes
- 30. Lecture d'un blob avec Spring JDBC sans jeu de résultats