P6Spy

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.