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

Servlets/JSP Java Discussion :

Appui sur Bouton conduit à un OutofMemoryerror


Sujet :

Servlets/JSP Java

  1. #1
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut Appui sur Bouton conduit à un OutofMemoryerror
    Salut a tous,
    j´ai un probleme, depuis quelques, il s´est averé sur notre application que lorsque un utilisateur appuie plusieurs fois sur le bouton a exporter plus de 10000 données sous forme de Excel,
    il ya un outOfMemory et le serveur Websphere plante. il faut ensuite redemarrer le serveur,
    est ce que quelqu´un parmis vous a deja eu ce probleme et si oui comment a-t-il fait pour le regler.
    Car un elargissement de la memoire RAM ne resoudrait pas le probleme, mais plutot reporterais le Probleme.

    J´utilise :
    JSP pour afficher
    Websphere 6 comme Serveur
    Oracle comme base de données

    Merci d´avance
    Eric

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    revoir le processus pour ne pas nécessiter de garder toutes ces données en mémoire, il n'y a pas de raison.
    interdire l'exécution multiple du processus
    mettre en place une queue d'attente. Genre le bouton stocke l'instruction dans la BD ou quelque par en mémoire, un thread en parallète traite une demande à la fois et le résultat est stocké sur le disque pour être livré à l'utilisateur à la demande.

  3. #3
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    Merci tchize_
    Le Probleme du stockage c'est que les donnees ne sont pas statique, et la pluspart du temps l'utilisateur change les donnees de plusieurs tableaux et veux les exporter.
    On a Pensé a une synchronisation, mais ce n'est pas une bonne idee.

    Eric

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    J'ai peut-être mal compris ton problème mais il me semble qu'il est lié à l'envoi multiple du formulaire.
    Tu peux prévenir ceci avec un peu de javascript.
    A l'initialisation de la page, tu mets un indicateur "submited" à false.
    Quand l'utilisateur soumet le formulaire (évenement onsubmit), tu testes la valeur de ce flag, s'il est à true, la fonction renvoie false (ce qui interrompt l'envoi), sinon, tu positionnes le flag à true et tu renvoie true.
    Bref, voici un exemple
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <!DOCTYPE HTML>
    <html>
    <head>
    <script>
    var submitted = false;
    var count = 0;
     
    function checkSubmitted()
    {
        if (submitted)
        {
            return false;
        }
        submitted = true;
        document.getElementById("count").innerHTML = ++count;
        return true;
    }
     
    </script>
     
    </head>
     
    <body>    
    <form action="http://www.ibm.com" onsubmit="return checkSubmitted()">    
     
        Entrer une valeur <input type="text" value="une valeur"/>
     
        <input type="submit" value="Envoyer"/>
     
        <div id="count"></div>
    </form>
     
    </body>
    </html>

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par jeffray03 Voir le message
    Merci tchize_
    Le Probleme du stockage c'est que les donnees ne sont pas statique, et la pluspart du temps l'utilisateur change les donnees de plusieurs tableaux et veux les exporter.
    On a Pensé a une synchronisation, mais ce n'est pas une bonne idee.

    Eric
    J'ai du mal à imaginer que l'utilisateur soi physiquement capable de modifier plusieurs M de données d'un coup, donc ça ne devrais pas jouer. Et même si l'utilisateur modifier plusieurs 100 aines de milliers de rows d'un coup, je ne vois pas ce qui t'empêche de stocker ça en base de données ou dans un fichier pour ne pas encombrer la mémoire avec.

  6. #6
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    On a reflechie sur une Methode comme celle ci, je vais essayer cela demain , merci d'avance

  7. #7
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Bonjour,
    Pour moi le problème peut être à 2 niveaux :

    -Soit plusieurs utilisateurs sur des navigateurs différents peuvent parallèlement solliciter le même traitement gourmand, ce qui peut faire tomber le serveur, à ce moment il faut peut être synchroniser la méthode principale
    -Soit un seul client peut cliquer plusieurs fois, parcequ'il en a marre d'attendre en croyant que le serveur n'a pas pris en compte sa demande initiale, nous avons rencontré plusieurs fois ce cas, la solution apportée était d'activer un spinner ou sablier qui s'affiche et désactive tout clic jusqu'à réponse finale du serveur. L'implémentation de cette solution dépend de la technologie d'affichage des données du projet, si vous utilisez des interfaces riches (RIA) style primefaces ou richfaces (si bien sur il y'a du jsf derriere) alors il y'a juste un composant à paramétrer, sinon l'idée est quand même là, charge à vous de l'adapter.
    Bon courage

  8. #8
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    Merci @DevServlet
    Merci @tchize_
    excusez moi pour le retard.
    en effet @DevServlet vient exactement de decrire ce qui se passe, nous tournons avec struts et jsp. Nous sommes en train de mettre en place ce que vous avez decrit comme solution, cad desactiver les bottons jusqu´a l´execution totale de la requete tout en donnant la possibilite de a l´utilisateur de stopper le lancement de la requete s´il voit que le temps impartie a cela est tres long.

    La methode consistant a synchroniser la methode d´entrée a ete ecarté car un utilisateur pourrait bloquer les resources a lui seule s´il clique maintes fois sur le meme boutton.
    Je vous tient au courant, de la suite.

    Eric

  9. #9
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Bonjour,
    Si vous utilisez struts 2 et que vous adoptez la solution de désactiver le bouton jusqu'à la fin du traitement, je pourrais vous fournir un bout de code que nous avions implémentée, seulement une fois l'action lancée nous ne donnons plus la main à l'utilisateur de stopper le traitement.

  10. #10
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    Merci
    je suis preneur @DevServlet


    Eric

  11. #11
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Citation Envoyé par jeffray03 Voir le message
    Merci
    je suis preneur @DevServlet


    Eric
    Je suis en congés jusquà mardi, je te l'enverrai une fois retourné au bureau

  12. #12
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    Merci

Discussions similaires

  1. changer de panel quand appuie sur bouton
    Par claire13 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 17/04/2008, 13h53
  2. Réponses: 9
    Dernier message: 23/07/2007, 15h24
  3. sauvegarde liant des données par appui sur bouton
    Par Flavien44 dans le forum IHM
    Réponses: 2
    Dernier message: 11/06/2007, 18h20
  4. Réponses: 13
    Dernier message: 18/07/2006, 15h07
  5. Réponses: 1
    Dernier message: 05/07/2006, 08h34

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