The Coder's Breakfast - Mot-clé - hibernate - Commentaires2022-11-22T14:44:11+01:00Olivier Croisierurn:md5:7bccc57fa40daaa0bbb47c16f3d66529DotclearP6Spy, l'espion qui m'aidait - smougenoturn:md5:7b9a84f1385b0ff4674e7b4a23cae7232012-10-07T18:27:38+01:002012-10-07T17:30:17+01:00smougenot<p>plus de 6 ans d'utilisation (p6spy + Irontrack) c'est un vrai confort<br />
On y trace :<br />
- les requêtes<br />
- les transactions<br />
- les stat des requêtes (nombre de fois lancée, nombre de lignes retournées, temps de traitement)<br />
- un petit graph temporel des requêtes</p>
<p>En pratique il est activé en dev et intégration (déploiement et tests automatisés).<br />
Comme cela a déjà été précisé, j'utilise une ressource Jndi, donc la config n'est pas compliquée.<br />
Contrairement à l'opinion de certains je trouve bien plus efficace de faire des traces coté applicatif et non coté SGBD ; au moins j'ai la trace en local, je ne perturbe pas la base et si quelqu'un d'autre l'utilise on ne se gène pas.</p>
<p>Par rapport aux logs hibernate en mode trace, on a en plus le numéro de la connexion (SQL) qui sert à identifier les transactions.</p>P6Spy, l'espion qui m'aidait - Briceurn:md5:6c79f0f1d8b115cd4e4b313ae1642db02012-10-04T10:56:29+01:002012-10-05T08:29:05+01:00Brice<p>A noter qu'il faut ne faut pas oublier d'activer les modules</p>
<p>module.log=com.p6spy.engine.logging.P6LogFactory</p>
<ol>
<li>module.outage=com.p6spy.engine.outage.P6OutageFactory</li>
</ol>P6Spy, l'espion qui m'aidait - lapsus63urn:md5:58a195e03c8601f7c41b8e51f5f39f2b2012-09-17T09:11:00+01:002012-09-17T08:41:53+01:00lapsus63<p>Nous nous sommes sur GlassFish Server Open Source Edition 3.0.1 (build 22) ; peut-être est-ce dû à la version bêta de GF.<br />
Merci pour votre retour.</p>P6Spy, l'espion qui m'aidait - Nicolasurn:md5:104d8f29ed958cdb46d0fd97878a9bcd2012-09-16T16:13:57+01:002012-09-16T15:19:12+01:00Nicolas<p>@lapsus63</p>
<p>On utilise p6spy (et irontrack) depuis plus de 3 ans, via JNDI (sous jetty, tomcat, ou via simple-jndi), pour tous les développements, avec des requêtes SQL natives, des requêtes HQL ou des Criteria Hibernate, et je n'ai jamais eu le problème que tu décris.</p>P6Spy, l'espion qui m'aidait - lapsus63urn:md5:36e18ec4d128713f40c410b59f36bc332012-09-14T15:06:33+01:002012-09-14T15:23:27+01:00lapsus63<p>Pour compléter mon précédent commentaire (s'il se fait valider), il semblerait que les requêtes construites à l'aide de l'API Criteria ne soient pas "compatibles" avec P6Spy.<br />
Erreur retournée :<br />
Internal Exception: java.sql.SQLException: Column 'ID' not found.<br />
Error Code: 0<br />
Call: SELECT t0.ID AS ID1, ...<br />
--> java.sql.SQLException : Column 'ID' not found.</p>
<p>Les champs sont suffixés d'un numéro de colonne, mais le parcours du ResultSet cherche ces colonnes sans ce suffixe. Bizarre bizarre. Bug ?<br />
Si quelqu'un a des infos à ce sujet je suis preneur.</p>P6Spy, l'espion qui m'aidait - lapsus63urn:md5:a0f354c2bc6815f6002eab086187ad182012-09-14T13:51:11+01:002012-09-14T15:23:27+01:00lapsus63<p>La librairie contient la documentation (un peu vieillissante) pour installer P6Spy sur JBoss 2.X ; JBoss 3.X ; Orion ; Jakarta ; JOnas ; BEA WebLogic ; ATG Dynamo ; Sun iPlanet ; IBM WebSphere ; Caucho Resin et propose une doc standard pour tout autre type de serveur d'applications.</p>
<p>Utilisant Glassfish v3, j'ai regardé un peu si on pouvait intégrer cette librairie dans ce serveur. Un blog d'Oracle propose une solution assez simple à mettre en oeuvre : <a href="https://blogs.oracle.com/enterprisetechtips/entry/using_p6spy_and_the_glassfish" title="https://blogs.oracle.com/enterprisetechtips/entry/using_p6spy_and_the_glassfish" rel="nofollow">https://blogs.oracle.com/enterprise...</a> ; il s'adresse à Glassfish v2 mais pour la v3 c'est sensiblement la même chose. Juste penser à placer le spy.properties dans le domain/config (Nul besoin d'avoir Netbeans comme indiqué).</p>P6Spy, l'espion qui m'aidait - Tibourn:md5:cc33b62c107e0894ffa81390106019cf2012-09-14T13:16:03+01:002012-09-14T12:50:25+01:00Tibo<p>Je pense que le meilleur moyen n'est pas de le monitorer au niveau de l'application mais au niveau de la DB. Primo, c'est toujours un peu ennuyeux de devoir configurer son app en fonction du context (Test, prod, debug). Secondo, on rajoute encore une dépendance a notre projet... Tertio, on est jamais a l'abris d'un bug de la librairie qui ne montre pas exactement ce qui est envoyé, d'un problème de configuration quelconque, d'une configuration qui pointe sur la mauvaise DB, etc...<br />
En ce moment, j'utilise MySQL, j'ai activé le general query log et hop "tail -f mysql.log" : j'ai en en live toute les requêtes effectuées. C'est hyper simple a activer/desactiver, je peux suivre les requêtes en luve et je suis sur de ce qui est réellement executé cote DB. Toutes les bases de données un minimum évolué permettent de logger les requêtes!<br />
Si la BD est partagé par plusieurs clients, ca peut même aider a comprendre certains problèmes du genre "mais pourquoi cette requête a mis une plombe?? Ah oui d'accord, Jackie mon co-developpeur a encore execute une requete avec 20 cross join en meme temps que moi..."<br />
A part cas particulier ou la BD ne peut être configurer ou dont les logs ne sont pas accessibles, je ne vois aucune raison d'utiliser ce genre de librairies.</p>P6Spy, l'espion qui m'aidait - Nicolasurn:md5:0686e49fb4ae1bd1c41a5d762dd66ee92012-09-14T12:42:45+01:002012-09-14T11:52:36+01:00Nicolas<p>Cet outil est formidable, mais utilisé seul il ne permet que difficilement de régler les problèmes de performance causé par une utilisation "à l'aveugle" d'Hibernate, comme des lazy loading de collection dans une itération.</p>
<p>Allié avec IronTrack SQL, c'est une véritable tuerie (même si l'interface Swing pourrait être meilleure...).</p>
<p>Voir un article au hasard sur le sujet, qui propose également le téléchargement de l'outil (maintenant très difficile à trouver car la société qui le faisait a fermé).</p>
<p><a href="http://www.360emedia.fr/2007/01/29/profiling-de-requetes-sql-en-java/" title="http://www.360emedia.fr/2007/01/29/profiling-de-requetes-sql-en-java/" rel="nofollow">http://www.360emedia.fr/2007/01/29/...</a></p>P6Spy, l'espion qui m'aidait - Johannurn:md5:93fd7c1d924146f182de3b21e77d847e2012-09-14T10:50:45+01:002012-09-14T10:11:46+01:00Johann<p>Hello,</p>
<p>Merci pour partager ce genre d'info ;)</p>
<p>Juste pour signaler qu'il existe aussi log4jdbc (<a href="http://code.google.com/p/log4jdbc/" title="http://code.google.com/p/log4jdbc/" rel="nofollow">http://code.google.com/p/log4jdbc/</a>) qui est sur le même principe. Je l'utilise et c'est très pratique !</p>P6Spy, l'espion qui m'aidait - Jérôme Durn:md5:c96b123e345e39fb6f97063f24da65312012-09-14T10:48:46+01:002012-09-14T10:11:48+01:00Jérôme D<p>log4jdbc est aussi une alternative.<br />
---<br />
<a href="http://code.google.com/p/log4jdbc/" title="http://code.google.com/p/log4jdbc/" rel="nofollow">http://code.google.com/p/log4jdbc/</a><br />
---<br />
log4jdbc is a Java JDBC driver that can log SQL and/or JDBC calls (and optionally SQL timing information) for other JDBC drivers using the Simple Logging Facade For Java (SLF4J) logging system.</p>