IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Eclipse Java Discussion :

Plantage Eclipse et java


Sujet :

Eclipse Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut Plantage Eclipse et java
    Bonjour
    J'ai une class qui édite un document PDF affiché dans uns popup. Si j'édite 3 fois de suite le même document, à la 3° j'ai une fenêtre vide puis Java ou Eclipse plante.
    Si je déploie mon projet sur tomcat je n'ai pas ce pb.
    Donc mon pb est soit j'ai un pb de config Eclipse java ou c'est mon appli qui a un pb ?

    Merci

    Ci-joint le msg affiche par le JRE:
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut
    Pas très précis tout ça mais ta config mémoire semble être celle par défaut... Voit si en augmentant la valeur xmx dans ton fichier eclipse.ini, ça change quelque chose.
    C'est quelle version d'Eclipse que tu as ?
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    Avec un peu de retard je reviens sur la scène
    Eclipse 3.2
    Tomcat 5.5
    JRE 1.5
    J'ai tout passé au profiler RAS
    J'ai passé le code sur FindBugs, il me reproche de mettre en var de session du ByteArrayOutputStream (peut-être objet du délis car le pdf y passe)
    A part cela ras
    J'ai augmenté la mémoire idem.
    Le plantage a lieu quand il a lieu entre 2 et 10 appels et quelque fois jamais.
    Le PDF émis ne fait que 3Ko

  4. #4
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut
    Je pense que FindBugs doit avoir raison car il n'y a pas de raison a priori de mettre un pdf en variable de session. Il faut économiser l'espace pris par les objets session sinon paf!
    Si ça fonctionne en dehors d'Eclipse c'est bien mais potentiellement il y a des chances que ça pose le même problème un jour ou l'autre....
    Donc si tu mets ton pdf en session, j'imagine que c'est parce qu'il est généré et que tu ne veux pas le regénérer à chaque fois mais le mieux est de le faire persister au moins temporairement sur le filesystem.

    Bon je fais beaucoup de suppositions mais ça manque toujours d'info ton histoire...
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    pour aller plus loin:
    j'ai une servlet unique qui suivant un menu appelle une class d'index qui redirige sur une class de génération d'un flux PDF puis retour à la page d'index puis servlet et affichage en popup.
    Donc mon flux je le mets en session, l'envoie puis supprime la session. Il y a sans doute des solutions plus judicieuses et je suis preneur pour tester mais la condition est que: interdit d'enregistrer le fichier PDF sur le serveur.

    Merci

  6. #6
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut
    Bon j'ai du mal à capter le cheminement exact tellement tu es précis mais moi j'essaierais de me débrouiller à mettre le flux PDF en request, ce serait déjà ça...
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    J'avais construis comme ça pour simplfier le systeme. Réponse gérée par la servlet uniquement.
    Donc j'ai modifié la class incriminée comme cité ci dessus mais même pb:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    try{document.close();
    	writer.close();
    }catch(final NullPointerException e){}
     
    response.setHeader("Expires", "0");
    response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
    response.setHeader("Pragma", "public");
    response.setContentType("application/pdf");
    response.setContentLength(baos.size());
    try{
         ServletOutputStream ouputStream = response.getOutputStream();
         baos.writeTo(ouputStream);
         ouputStream.flush();
         ouputStream.close();
    }catch(final IOException e){e.printStackTrace();}

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    Après de nombreux tests, il s'avère que si j'affiche en popup j'ai le plantage d'Eclipse mais si j'affiche dans la fenêtre normale pas de pb.
    Donc apparement le code n'est pas à incriminer mais le navigateur d'Eclipse ou le code js semble ne pas aimer dans une certaine configuration.

  9. #9
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut
    Ah... et tu n'as pas eu l'idée de tester sur un navigateur externe pour confirmer cela ?
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  10. #10
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Heu... C'est quoi ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    }catch(final NullPointerException e){}
    Tu ignores une NullPointerException


    Sinon je te conseille fortement d'utiliser des try/finally pour les fermetures de flux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ServletOutputStream ouputStream = response.getOutputStream();
    try {
         baos.writeTo(ouputStream);
         ouputStream.flush();
    } finally {
         ouputStream.close();
    }
    Cela te permet de fermer proprement tes flux mêmes en cas d'erreur !
    C'est super important sur une application serveur ( Comment libérer proprement les ressources ?).




    Deuxième remarque : d'où vient ton baos ? Tu le lis depuis un fichier ?
    Dans ce cas pourquoi passer par un ByteArrayOutputStream ?
    Autant copier directement du fichier dans le ServletOutputStream...



    Enfin, un peu plus haut tu parles de session mais je ne vois rien de tel dans le code que tu donnes...


    a++

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    Attendez déjà pour arriver à cette conclusion, ça fait un moment que je cherche car ce n'est que sur un item du menu que j'ai ce pb, toutes les autres éditions ne me provoquent pas ce pb.
    et "ça" c'est un bout de code posé à l'emporte pièce pour tester la remarque d'Adobex.
    Donc pour en revenir au point de départ voici le code de base:
    La class de génération du PDF met le flux en session (pas de fichier enregistré sur le serveur même en temporaire):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ....
    try{writer = PdfWriter.getInstance(document, baos);}catch(final Exception e_pdf){e_pdf.printStackTrace();}
    ....//génération du pdf qui fait environ 2,6Ko
    session.setAttribute("baos", baos);
    ....
    dans ma servlet je récupère le fux et l'envoie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    //PDF
    {if(";2000;2303;2901;2902;5302;".indexOf(ch)>-1 || ch.equals("54001"))
    	{//récupération du flux
    	ByteArrayOutputStream baos = new ByteArrayOutputStream();
    	if(a.getParameter("baos")!=null)
    	//récupération du flux de l'état sélectionné
    		{baos =(ByteArrayOutputStream)session.getAttribute(a.getParameter("baos"));}
    	else
    	//récupération du flux du carnet
    		{baos = (ByteArrayOutputStream)session.getAttribute("baos");}
    	// Envoi response
    	response.setHeader("Expires", "0");
    	response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
    	response.setHeader("Pragma", "public");
    	response.setContentType("application/pdf");
    	response.setContentLength(baos.size());
    	ServletOutputStream ouputStream = response.getOutputStream();
    	try {
    		baos.writeTo(ouputStream);
    		ouputStream.flush();
    	} finally {ouputStream.close();}
    	}
    Le plantage se produit quand la popup s'ouvre.
    Mais bon j'ai cherché une erreur dans le code java ou dans la génération du pdf et c'est peut-être le menu en DHTML qui met le bazard. Le pb c'est que le plantage est aléatoire.
    Merci pour vos réponses.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    C'est bien l'appel par le menu en dhtml qui provoque le plantage car un appel via un lien ou une icone pas de pb

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/08/2005, 08h58
  2. [Info]eclipse et java 1.5
    Par zemickeyman dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 29/03/2005, 19h05
  3. Plantage Eclipse
    Par mr.t dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 08/02/2005, 12h10
  4. eclipse et java 1.5
    Par bidules dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 29/09/2004, 20h58
  5. [Plugin][sysdeo]eclipse tomcat5 java 1.4 demmarage
    Par Canou dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 19/04/2004, 13h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo