2010-08-09 4 views
0

J'ai un bean session ejb3 et une servlet. Le bean a accès à une base de données avec une grande table. Le servlet doit extraire le contenu de la table du bean et envoyer des données via ServletOutputStream. Comment puis-je transférer des données volumineuses entre le bean ejb3 et la servlet? Je ne peux pas renvoyer une liste avec toutes les lignes à la fois car elle ne rentre pas dans la mémoire.Comment renvoyer une liste très longue du bean session ejb3?

PS. Les données sont téléchargées en tant que fichier. Ils n'apparaissent pas sur une page.

Répondre

1

Vous pouvez transférer des fichiers volumineux à travers la limite EJB en utilisant l'interface Externalizable (une extension de Serializable). Voilà ce que je propose:

  1. Ecrire une classe par exemple ExternalFile qui enveloppe/contient un objet File
  2. faire cette classe implémente Externalizable
  3. mettre en œuvre le writeExternal pour écrire le fichier contenu dans le flux de sortie donné
  4. Implémentez le readExternal pour lire le flux d'entrée donné dans un nouveau fichier temporaire
  5. Envisagez d'ajouter des attributs de taille et de nom à votre classe ExternalFile pour aider le récepteur à décider quoi faire (et rem brai pour les écrire et les lire via les méthodes writeExternal et readExternal).

L'étape 3 est votre étape de sérialisation lorsque vous envoyez votre objet (fichier) depuis la couche EJB. L'étape 4 est votre étape de dé-sérialisation qui reçoit le fichier sous forme de flux de données et peut faire ce qu'il veut avec le flux. My 4 suggère de l'écrire dans un fichier temporaire, mais vous pouvez transmettre ce flux directement via votre servlet vers n'importe quelle autre destination.

Espérons que ça aide.

Questions connexes