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

Flex Discussion :

une issue BlazeDs ou bien Hibernate ou ?


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Par défaut une issue BlazeDs ou bien Hibernate ou ?
    framework et technologies utilisés :
    MYSQL 6 > Lucene > Hibernate > Spring > BlazeDS > Flex
    Serveur Web : Apache Tomcat 6
    Taille d'un enregistrement A : < 2ko
    Schéma des données : A 1---* B
    Tailles des index Lucene: 500 Mo
    Nombre d'enregistrements dans la table cible: 1,2 Million
    Problème:
    Je suis en train de récupérer les enregistrements de la bases par dix. La navigation dans les résultats se fait avec un ToggleButtonBar. Au bout de quelques requête une première erreur se déclenche:
    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
    [BlazeDS]Java heap space
    java.lang.OutOfMemoryError: Java heap space
    	at com.mysql.jdbc.Buffer.getBytes(Buffer.java:198)
    	at com.mysql.jdbc.Buffer.readLenByteArray(Buffer.java:318)
    	at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1375)
    	at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:2369)
    	at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:451)
    	at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:2076)
    	at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1451)
    	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1787)
    	at com.mysql.jdbc.Connection.execSQL(Connection.java:3283)
    	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1332)
    	at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1467)
    	at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
    ....
    et l'application se plante, ensuite une deuxième erreur se déclenche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [BlazeDS]null
    java.lang.StackOverflowError
    	at org.apache.log4j.Category.callAppenders(Category.java:215)
    	at org.apache.log4j.Category.forcedLog(Category.java:391)
    	at org.apache.log4j.Category.log(Category.java:856)
    	at org.slf4j.impl.Log4jLoggerAdapter.debug(Log4jLoggerAdapter.java:173)
    	at org.hibernate.jdbc.AbstractBatcher.logOpenPreparedStatement(AbstractBatcher.java:410)
    	at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:160)
    	at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1573)
    	at org.hibernate.loader.Loader.doQuery(Loader.java:696)
    	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
    	at org.hibernate.loader.Loader.loadCollection(Loader.java:2015)
    J'ai fait analysé l'application avec la console d'administration de BlazeDS et voici ce que j'obtient:
    http://img268.imageshack.us/img268/9...oughoutput.png
    ensuite
    http://img3.imageshack.us/img3/4137/throughoutput2.png
    les deux courbe décrivent l'AMFThroughoutput.

    Sachant que si je fais les mm requêtes au dessous de BlazeDs en utilisant JUnit tests tout marche bien avec un temps de reponse de 0.26s !

    Merci de bien vouloir m'indiquer par ou aller ^^' !

  2. #2
    Membre émérite
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Par défaut
    Quand tu testes avec Junit Test tu réussis récupérer les 1,2 Million d'enregistrements ?
    Visiblement la capacité de mémoire est largement explosée

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Par défaut
    C'est toi qui gère la pagination ou bien c'est l'un de tes frameworks () ?

    Visiblement les résultats des requêtes s'empilent en mémoire et ne sont jamais libérés. Tu finis par atteindre la limite de la JVM.

    En ce qui me concerne, difficile d'en dire plus avec les informations fournies.

  4. #4
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Par défaut
    Merci pour vos très rapide reponse
    Lors des tests JUnits j'essaie de retracer les requêtes que j'ai fait à partir de Flex, l'application déclenche l'erreur après quelques requêtes , donc je fait un appel explicites des ces instructions pour voir si j'ai le même comportement! hélas, tous se passe bien avec JUnit. Je ne récupère pas les 1,2M mais je fait 20 requêtes par exemple qui récupère 10 enregistrements chacune

    Voici ma façon de faire la pagination avec lucene:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //numPage: le numero de la page de résultat
    list = fullTextQuery.setFirstResult(numPage * 10).setMaxResults(10)
    					.setFetchSize(10).list();
    pour appeler ça depuis flex je fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonRemoteObject.getResultPage(numeroDeLaPage, ObjetARetrouver)
    Dites moi si je peux vous donnez d'autres détails, c seulement parceque le projets est assez grand que je ne sait pas par ou commencer!!!

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Par défaut
    Tu as vérifié que le numéro de page était correct ?

  6. #6
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Par défaut
    Je teste avec un critère spécifique, je suis sure qu'il retourne plus que 10000 résultats en total, ce qui fait 1000 pages. ça me suffit pour les tests!
    En fait, je continue à tester et je crois que ça dépends étroitement des index!
    Lorsque je lance l'indexation des entités B, un java heap space se déclenche!
    Je vous mets à jours si j'ai du nouveau

Discussions similaires

  1. Comment savoir si une requete c'est bien passé
    Par choubak dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/07/2007, 15h26
  2. Réponses: 1
    Dernier message: 12/04/2007, 10h41
  3. Réponses: 4
    Dernier message: 08/08/2006, 15h41
  4. Réponses: 8
    Dernier message: 21/06/2006, 14h43
  5. Comment savoir si une impression s'est bien déroulé?
    Par Cyrilh7 dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/11/2003, 20h49

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