2011-10-07 2 views
0

J'essaie d'utiliser XStream pour diffuser des objets entre deux processus (qui sont essentiellement des machines virtuelles Java). J'ai trouvé qu'une question similaire était posée sur ce forum auparavant (veuillez vous référer au lien suivant).Utilisation de XStream pour diffuser un nombre inconnu (potentiellement très grand) d'objets Java

Best approach to serialize XML to stream with Java?

La différence fondamentale entre mon exigence et la solution dans la question ci-dessus est que les tous les objets transmis en ligne ne sont pas disponibles au début de l'opération en continu. Je veux que le processus d'envoi attende de nouveaux objets et les transmette au fur et à mesure qu'ils arrivent. Cette opération peut donc prendre beaucoup de temps (avec beaucoup de temps d'inactivité entre le streaming de deux objets).

D'autre part dans la solution donnée ci-dessus fonctionne très bien si nous connaissons tous les éléments de collection au début.

S'il vous plaît laissez-moi savoir si quelqu'un a rencontré une telle exigence avant et capable de le résoudre.

Répondre

0

Briser le problème en deux parties:

  1. Communication/connectivité entre les processus
  2. Sérialisation chaque objet sur la connexion

Pour la partie 1, il est difficile de dire si vous voulez pour garder une connexion en vie ou ouvrir une nouvelle connexion chaque fois qu'il y a plus de données. Ouvrir une nouvelle connexion plusieurs fois peut coûter cher, alors utilisez une connexion si vous trouvez que ce coût est trop élevé.

Pour la partie 2, il semble plus simple de placer un objet dans son propre document, plutôt que d'essayer de tout assembler en un seul. Cela devrait être facile à implémenter avec XStream. Si vous avez besoin d'une notion de «fait» similaire à l'envoi de la dernière balise de fermeture d'un document le plus externe, envoyez un message personnalisé «terminé» lorsque le moment est venu.

+0

Merci pour votre réponse. Ce problème est maintenant résolu. J'ai utilisé le pilote StAX pour XStream du côté client et je me suis assuré que le serveur envoie le prologue du document XML immédiatement (et n'attend pas que les événements réels se produisent). – hsg

+0

Si vous utilisez toujours une connexion longue durée, assurez-vous simplement que vous savez ce qui se passera s'il y a un hiccup réseau/connexion et que les données de streaming sont interrompues. Je suspecte que le conducteur de StAX ne sera pas heureux. – jtoberon

+0

Oh oui. Je cache le dernier identifiant d'objet vu du côté client. Donc, en cas d'échec réseau/connexion, il se reconnecte simplement au serveur et envoie le dernier identifiant d'objet vu. Le serveur répondrait alors en transmettant les objets restants après celui vu par le client. – hsg

Questions connexes