lundi 3 novembre 2014

H2 : la base de données "de poche" au service des développeurs

H2 est une base de données relationnelle écrite en Java qui s'avère très utile pour les développeurs.

Cette base de données ultra-légère n'est pas conçue pour supporter de gros volumes de données ni un nombre important d'utilisateurs, mais elle est extrêmement pratique pour les développeurs Java qui ont besoin de tester des applications ou des composants nécessitants des requêtes SQL via JDBC.

H2 présente de nombreux avantages :

  • légèreté : elle tient dans un fichier "zip" de 7 mo (y compris les sources et la documentation) 
  • portabilité : elle est constituée d'un seul fichier "jar" qui peut être exécuté sur tout système d'exploitation disposant de Java
  • fonctionnalités :  H2 dispose des mêmes possibilités que les "grandes bases de données" (schémas multiples, contrôle d'intégrité référentielle, triggers, fonctions, procédures stockés, colonnes auto-incrémentées, séquences, etc)
  • différents modes de fonctionnement : client/serveur ou embarqué

Pour installer H2 :
  1. Télécharger le fichier "Platform-Independent.zip" ( exemple : "h2-2014-08-06.zip" ) à partir du site http://www.h2database.com/ 
  2. Décompresser le fichier "zip"
  3. Pour démarrer la base : dans "bin" lancer "start.sh" ou "start.bat" selon le système d'exploitation
  4. Et voilà, la base est prête à accepter des connexions, une IHM web est même lancée dans le navigateur

Emplacement de stockage des données 

H2 permet de stocker les données d'une base soit en mémoire (très utile pour des données temporaires par exemple pour des tests JUnit), soit sur disque.
L'emplacement est déterminé lors de la connexion par la dernière partie de l'URL JDBC 


Les différents modes de fonctionnement

1) Le mode "embarqué" ( "embedded" in english )
Dans ce mode le moteur H2 fonctionne dans la même JVM que l'application qui l'utilise. La "connexion" est donc réduite à sa plus simple expression puisqu'elle n'utilise pas le réseau. Le principal avantage de ce mode est qu'il n'est pas nécessaire de démarrer la base (en tant qu'application autonome) avant de s'y connecter, ce qui est extrêmement pratique pour des tests JUnit par exemple.



2) Le mode "client/serveur" ou "connexion à distance" (  "remote" ) 
Dans ce mode la base de données est lancée en tant qu'application de type "serveur" et elle va accepter des connexions de "clients" distants (comme une base de données Oracle, PostgreSQL, etc)




3) Le mode "mixte"
Il s'agit d'un mode dans lequel le moteur de la base de données est "embarqué" dans une application spécifique qui peut l'utiliser et le piloter (notamment le démarrer). Une fois lancé le moteur H2 peut être utilisé avec des connexions locales et/ou distantes.



Les différents types d'URL de connexion 
Avec H2 l'URL JDBC est fondamentale puisqu'elle indique dans quel mode on souhaite se connecter à la base ( "remote" ou "embedded") et l'emplacement ou sont stockées les données de la base (en mémoire ou sur disque dans un répertoire du filesystem).
Voici donc un tableau qui représente les différents cas possibles :


Configuration JDBC "out of the box" 
jdbc.driverClassName=org.h2.Driver ( la classe du driver JDBC est dans le jar "h2-version.jar" )
jdbc.url=jdbc:h2:mem:mydb 
jdbc.username=sa
jdbc.password=sa

Le petit plus : initialisation par un script SQL à la connexion 
Pour ça il suffit d'utiliser  INIT=RUNSCRIPT FROM 'file_name'
Exemples d'URL :

  • jdbc:h2:mem:mydb;INIT=RUNSCRIPT FROM '~/init_mydb.sql'
    pour un script situé dans le répertoire du "user"
  • jdbc:h2:mem:mydb;INIT=RUNSCRIPT FROM 'classpath:sql/init_mydb.sql' 
    pour un script chargé via le "classpath" (par exemple situé dans "/src/main/resources" )

Dans bien des cas ça remplace efficacement DBUnit pour les tests..

Pour plus d'informations, voir le site de référence ; http://www.h2database.com/ 

1 commentaire: