servlet, pdf, internet explorer - Java - Programmation
Marsh Posté le 22-11-2004 à 23:21:35
il n'y a pas de streaming possible avec le pdf (enfin à ma connaissance...), donc la deuxième solution est très bien... quoique le mieux serait de ne pas limiter en mémoire la jvm dans le serveur d'app et de booster les machines de prod en ram
au fait, bon anniversaire
Marsh Posté le 22-11-2004 à 23:37:22
le -Xmx de cette jvm est à 256M, alors que le pdf produit doit peser +/-2 mo ...
(avec un pdf de 200k ça passe mais c'est lent )
Marsh Posté le 22-11-2004 à 23:39:47
the real moins moins a écrit : le -Xmx de cette jvm est à 256M, alors que le pdf produit doit peser +/-2 mo ... |
faut faire péter plus de mémoire, s'il y a 200 requetes de génération de pdf de 2Mo en même temps, ça rentre pas dans 256Mo
Marsh Posté le 22-11-2004 à 23:51:19
meme avec une 1 seule requete ça rentre pas, là
(et euh, les 200 requetes, elles attendront dans le dispatcher du thread pool nan? )
Marsh Posté le 22-11-2004 à 23:55:52
the real moins moins a écrit : meme avec une 1 seule requete ça rentre pas, là |
the real moins moins a écrit : (et euh, les 200 requetes, elles attendront dans le dispatcher du thread pool nan? ) |
ouais sur un serveur configuré petit joueur
Marsh Posté le 22-11-2004 à 23:58:36
bon annif mwin mwin
Marsh Posté le 23-11-2004 à 00:11:05
the real moins moins a écrit : Il semblerait que ce cher IE ait un problème pour ouvrir les pdf si on ne spécifie pas de content-length |
ca me parait suspect ...
t'es sûr de toi ?
Marsh Posté le 23-11-2004 à 00:12:35
chrisbk a écrit : pourquoi il est tout moche ce petrus ? |
j'ai du chier l'export en gif ... mais bon, spa très grave pour un petrus
Marsh Posté le 23-11-2004 à 00:23:37
benou a écrit : ca me parait suspect ... |
oui.
http://www.lowagie.com/iText/faq.html#msie
(il semblerait qu'il y ait d'autres "solutions", mais aucune n'est réellement explicable)
Marsh Posté le 23-11-2004 à 00:25:35
chrisbk a écrit : un petrus, c'est bleu, merde |
un petrus, c'est laid, merde
Marsh Posté le 23-11-2004 à 00:29:42
Marsh Posté le 23-11-2004 à 00:31:47
Marsh Posté le 23-11-2004 à 00:32:59
vous etes lourds
Marsh Posté le 23-11-2004 à 00:34:08
\o/
Marsh Posté le 23-11-2004 à 00:35:26
Enfin quelqu'un qui y pense
Marsh Posté le 23-11-2004 à 08:14:24
j'avais le meme pb que toi avec IE mais j'ai opté pour la 1ere solution qui me parrait plus "clean".
Code :
|
Marsh Posté le 23-11-2004 à 08:48:49
de toute façon y a pas trop le choix ... faut bien le générer pour onnaître sa taille finale, et vu qu'il faut envoyer la taille avant le contenu lui-même, faut forcément le générer entièrement pour connaître sa taille.
Y a une 2e alternative si tu es vraiment à l ramasse côté mémoire, c'est de générer 2 fois le fichier : la première fois dans un Stream qui ne fait que de compter la taille, la deuxième fois en balançant ca dans stream de la réponse.
Si tu fais ca, vérifit quand même que ton moteur de servlet ne bufferise pas le tout par derrière ...
Marsh Posté le 23-11-2004 à 10:32:19
laser > ben c'est ce qu'on fait pour l'instant, et un byte[] de 2mo ou +, ça semble pas etre une super idée.
benou > bah euh ouais c'est ma 2e solution, sauf que je compte pas surcharger le serveur inutilement en generant le pdf une 2e fois...
Marsh Posté le 23-11-2004 à 15:21:43
et hop, un petit coup de balais et le pdf fais 15% de la taille qu'il faisait ce matin avec les meme données \o/
Marsh Posté le 23-11-2004 à 16:11:37
oki
c'est clair que 2 mo c'est un peu gros.
ceux que je génére habituellement tournent autour de 500ko (10 pages environ dont une sur deux avec images etc...)
sinon la 2eme soluce me parrait un peu galere car tu devra certaiement identifier de maniere unique les pdf que tu crées etc...
sinon autre solution, tu interdit l'utilisation d'IE
Marsh Posté le 23-11-2004 à 16:14:58
euh, identifier de maniere unique: pas compliqué de generer une GUID, pas compliqué de s'assurer que le fichier n'existe pas au moment de le créer, pas compliqué de le virer apres, bref, pas compliqué
Marsh Posté le 23-11-2004 à 16:17:35
mais c'est un peu dommage quand meme
ps : je suis un partisant de la "loi du moindre effort"
Marsh Posté le 23-11-2004 à 20:22:45
the real moins moins a écrit : pas compliqué de s'assurer que le fichier n'existe pas au moment de le créer |
je sors ma pelle à clous ?
Marsh Posté le 23-11-2004 à 20:36:51
the real moins moins a écrit : Il semblerait que ce cher IE ait un problème pour ouvrir les pdf si on ne spécifie pas de content-length dans les entetes http. |
Faudra que je vérifie sur la servlet toute conne que j'ai faite le mois passé mais je ne me souviens pas avoir foutu un header quelconque
Marsh Posté le 23-11-2004 à 20:43:09
nraynaud a écrit : je sors ma pelle à clous ? |
fais pas chier, je fous un guid dans le nom de mon fichier
Marsh Posté le 23-11-2004 à 20:45:06
darklord a écrit : Faudra que je vérifie sur la servlet toute conne que j'ai faite le mois passé mais je ne me souviens pas avoir foutu un header quelconque |
ben faudra que t'essaies avec plusieurs versions d'ie, avec du pdf generé à la volée et ouvert *dans* ie, et tu verras que ça ira pas
Marsh Posté le 23-11-2004 à 20:49:08
the real moins moins a écrit : ben faudra que t'essaies avec plusieurs versions d'ie, avec du pdf generé à la volée et ouvert *dans* ie, et tu verras que ça ira pas |
Oui ok, au temps pour moi. Le fichier est effectivement sur disque avant d'etre renvoyé.
Il est ouvert dans IE et j'ai essayé avec IE 5, 5.5 et 6
Marsh Posté le 23-11-2004 à 20:52:33
euh bah étant sur disque, ça change peut etre rien, mais a priori tu dois qd meme setter le content-length
j'ai pas testé, mais steve m'a reporté ce probleme, et on a trouvé la soluce dans la faq d'itext, donc bon
Marsh Posté le 23-11-2004 à 23:14:31
the real moins moins a écrit : fais pas chier, je fous un guid dans le nom de mon fichier |
C'est quoi un guid ?
Marsh Posté le 24-11-2004 à 08:43:17
patachou a écrit : C'est quoi un guid ? |
un Gui Delage, ca permet de s'y retrouver au milieu d'un océan de données
Marsh Posté le 24-11-2004 à 11:10:24
Oui d'accord je connaissais pas alors je me renseignais, j'ai regardé un peu sur le net pour savoir un peu plus.
Merci de l'info
Marsh Posté le 24-11-2004 à 11:15:18
Marsh Posté le 24-11-2004 à 11:44:52
ReplyMarsh Posté le 24-11-2004 à 18:36:51
patachou a écrit : Merci pour le lien, y a des implémentations en java ? |
oui, Xdoclet a une implémentation (pour les PK d'un EJB si mes souvenirs sont bon)
Marsh Posté le 25-11-2004 à 22:31:55
Code :
|
Marsh Posté le 22-11-2004 à 23:11:02
Salut,
Il semblerait que ce cher IE ait un problème pour ouvrir les pdf si on ne spécifie pas de content-length dans les entetes http. Or, si ce pdf est généré à la volée, on ne le connait pas d'avance. Je vois deux possibilités:
- bufferer tout le bordel generé en mémoire, et rebalancer tout le byte[] une fois qu'on en connait la longueur, avec le content-length bien setté.
Mon collègue à choisi cet approche, et jme demande si c'est pas (entre autres joyeusetés made in lui) grace à ça qu'on mange des OutOfMemory a tout bout de champ
- balancer le stream de mon pdf generé sur le file system, puis une fois ce fichier generé (dans un repertoire temporaire), je peux aussi, forcément, en connaitre la longueur, et donc setter le content-length correctement: je pense essayer cet approche; même si je suis pas fan, c'est la seule que je vois pour l'instant pour contrer ce cher IE.
Si qqun à des suggestions, une meilleure idée, ou voit un problème avec cette deuxième approche, je suis preneur