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

Spring Java Discussion :

[AOP] Logger les temps d'exécution des requêtes


Sujet :

Spring Java

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Points : 100
    Points
    100
    Par défaut [AOP] Logger les temps d'exécution des requêtes
    Bonjour,

    Afin de tracer les éventuelles point de blocage de traitement relativement lourd, je souhaiterai tracer les requêtes envoyé à la base et leur temps d'exécution.
    Après quelques recherches sur la toile, j'ai trouvé le hibernate.generate_statistics à true avec un logger sur org.hibernate.stat en niveau log ou trace mais sans succès...
    Du coup, me suis dit pas grave je le tente en AOP avec un pointcut sur org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean ou encore org.hibernate.ejb.QueryImpl mais sans succès pour le moment.
    D'avance merci de vos lumières.

    HadanMarv

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 141
    Points : 178
    Points
    178
    Par défaut
    Bonjour,
    Si ton AOP se fait via Spring+AspectJ
    Il faut que les instances de org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean et org.hibernate.ejb.QueryImp soient des bean Spring, sinon tes pointcut ne marcherons pas. Je suppose que tu as une instance de org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean comme bean mais à quel moment tu l'utilises? Je ne pense pas cette instance soit utilisée directement, elle est plutôt utilisée pour fabriquer une instance de EntityManagerFactory qui à son tour va fabriquer des instances de EntityManager qui eux sont utilisées pour exécuter les requêtes SQL. Donc mettre une coupe sur ces objets est une perte de temps. Si la coupe était directement sur l'EntityManager, cela pouvait fonctionner mais dans ce cas il faut que ton EntityManager soit un bean Spring, ce qui n'est pas à faire.
    Par contre tu peux essayer hibernate.show_sql= true pour voir tes requêtes SQL et déterminer la classe qui les traces dans les logs...
    Ou tout simplement mettre ta coupe sur l'interface qui te sert de DAO mais tu ne verras pas l'exécution des requêtes...
    Ou encore au lieu de faire de l'AspectJ, je te conseillerai plutôt de faire du CGLIB, qui à mon goût est beaucoup plus complet. Dans ce cas il faut contrôler la création des EntityManager.(Facile à dire qu'à faire je peux te rassurer).

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Points : 100
    Points
    100
    Par défaut
    Bonjour,

    Effectivement mon aop est gérer avec Spring et AspectJ.
    LocalContainerEntityManagerFactoryBean est bien un bean définit dans mon fichier de config spring mais pas QueryImpl en effet.
    J'ai un bean principale qui s'appelle MonAppliDAO et qui reçoit une instance d'EntityManager via l'annotation @PersistenceContext. Donc l'entityManager n'est pas un bean spring déclaré mais instancié par Spring.
    J'avais pensé à juste le faire show sql mais l'on me demande de prouver que mon appli qui vient en plus d'une application vieillissante ne ralenti pas la première.
    Donc ma problématique n'est pas si simple.
    Bon je vais continuer de creuser sur les différents pointcut.
    Merci de tes pistes de recherche en tous les cas.

    HadanMarv

Discussions similaires

  1. [2014] Consulter les erreurs d'exécution des requêtes
    Par StringBuilder dans le forum Administration
    Réponses: 7
    Dernier message: 29/07/2014, 11h59
  2. Réponses: 6
    Dernier message: 27/07/2010, 15h28
  3. [WD15] Temps d'exécution des requêtes
    Par thierrybatlle dans le forum WinDev
    Réponses: 7
    Dernier message: 18/02/2010, 16h21
  4. Erreur OEM 10gR2 - Temps d'exécution des requêtes
    Par fabien.morel2002 dans le forum Administration
    Réponses: 0
    Dernier message: 30/11/2009, 16h00
  5. Réponses: 4
    Dernier message: 06/06/2008, 19h22

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