P6Spy

Cette page a été rédigée il y a fort fort longtemps, et n'a pas tellement été mise à jour.

 

Vous savez, moi je ne crois pas qu'il y ait de bonne ou de mauvaise page. Moi, si je devais résumer mon wiki aujourd'hui avec vous, je dirais que c'est d'abord des rencontres. Des gens qui m'ont tendu la main, peut-être à un moment où je ne pouvais pas, où j'étais seul chez moi. Et c'est assez curieux de se dire que les hasards, les rencontres forgent une destinée... Parce que quand on a le goût de la chose, quand on a le goût de la chose bien faite, le beau geste, parfois on ne trouve pas l'interlocuteur en face je dirais, le miroir qui vous aide à avancer. Alors ça n'est pas mon cas, comme je disais là, puisque moi au contraire, j'ai pu ; et je dis merci au wiki, je lui dis merci, je chante le wiki, je danse le wiki... je ne suis qu'amour ! Et finalement, quand des gens me disent « Mais comment fais-tu pour avoir cette humanité ? », je leur réponds très simplement que c'est ce goût de l'amour, ce goût donc qui m'a poussé aujourd'hui à entreprendre une construction logicielle... mais demain qui sait ? Peut-être simplement à me mettre au service de la communauté, à faire le don, le don de soi.

Un proxy JDBC est un composant qui s’installe entre une application et le driver JDBC. Il sert à tracer les requêtes à la base de donner sans avoir à modifier son code.

Principe

DataSource JDBC classique

Jdbc-driver.png

DataSource JDBC avec un proxy

Jdbc-proxy.png

Installation

P6Spy

P6Spy s’installe comme un driver JDBC, dans la datasource :

driver-class=com.p6spy.engine.spy.P6SpyDriver

Ensuite, P6Spy se configure dans le fichier spy.properties, qui doit être placé dans le classpath de JBoss ($JBOSS_CLASSPATH) :

realdriver=org.hsqldb.jdbcDriver

Irongrid

IronTrack est une application de rendu pour P6Spy. Il peut lire un fichiers de trace spy.log ou exploiter une connexion directe à l’application. Cela se configure dans le fichier p6spy.properties :

module.ibeam=com.irongrid.ibeam.server.IBeamFactory
monitorport=2000

Pour installer IronTrack, on lance le fichier d’installation, irontracksql-installer-1_0_172.jar, avec java.

Ensuite, il faut installer les fichiers p6spy.jar et irontracksql.jar dans le répertoire lib de la configuration, puis spy.properties dans un répertoire du classpath. Pour déclarer un répertoire dans le classpath de JBoss, on le référence via la variable d’environnement JBOSS_CLASSPATH.

Configuration

Configuration classique

L’étape suivante consiste à modifier la datasource pour remplacer le driver de la base de données par celui de P6Spy :

   <driver-class>com.p6spy.engine.spy.P6SpyDriver</driver-class>

Le driver de la base de données doit être déclaré dans le fichier de configuration de P6Spy, spy.properties. Dans notre cas, nous avons déclaré le driver de hypersonic et avant mis le driver mySql en commentaire.

 realdriver=org.hsqldb.jdbcDriver
 # realdriver=org.gjt.mm.mysql.Driver

Lorsque plusieurs datasources utilisent le même driver, toutes doivent être interceptées par P6Spy. Dans notre cas, DefaultDS, déclarée dans le fichier deploy/hsqldb-ds.xml de la configuration, doit être modifiée.

Cas hypersonic

Le cas de hypersonic est particulier car pour que cela fonctionne, il faut désactiver la base de données en mode « in-process » et la passer en mode « server ».

  <mbean code="org.jboss.jdbc.HypersonicDatabase"
    name="jboss:service=Hypersonic">
    <attribute name="Port">1701</attribute>
    <attribute name="Silent">true</attribute>
    <attribute name="Database">default</attribute>
    <attribute name="Trace">false</attribute>
    <attribute name="No_system_exit">true</attribute>
  </mbean>

La datasource, elle-même doit être modifiée pour prendre ce changement en compte.

 <local-tx-datasource>

   <jndi-name>DefaultDS</jndi-name>
   <connection-url>
     jdbc:hsqldb:hsql://localhost:1701
   </connection-url>

   <driver-class>com.p6spy.engine.spy.P6SpyDriver</driver-class>

   <user-name>sa</user-name>
   <password></password>

   <min-pool-size>5</min-pool-size>
   <max-pool-size>20</max-pool-size>
   <idle-timeout-minutes>0</idle-timeout-minutes>

   <security-domain>HsqlDbRealm</security-domain>

   <metadata>
     <type-mapping>Hypersonic SQL</type-mapping>
   </metadata>

   <depends>jboss:service=Hypersonic</depends>
 </local-tx-datasource>

Remarques

L’outil IronTrack a été développé par la société IronGrid qui a cessé son activité. Cependant, celui-ci a été développé sous la licence open source « Apache Public License », ce qui permet de le redistribuer sans contrainte. Il est donc téléchargeable sur le site du Java User Group de Belgique et son code source est disponible sur le site sourceforge.net.

Dans son paramétrage intégré à IronTrack, P6Spy communique les traces en temps réel et les envoie dans un fichier spy.log. Ce fichier est stocké dans le repertoire qui a été utilisé pour le lancement de JBoss. Pour modifier ce lieu de stockage, il faut modifier la ligne suivante dans spy.properties :

logfile     = spy.log

en (par exemple)

logfile     = /usr/local/jboss/server/myconf/log/spy.log

Pour réduire le volume des traces, il est possible d’activer un filtre en précisant la liste des tables à tracer.