Une base de données relationnelle embarquée dans Apache TomEE et sans prise de tête? Allons faire un petit tour du côté de HSQLDB
HSQLDB ou la base de données facile
Introduction
Dans le cadre d’un side-project, j’avais besoin d’une base de données relationnelle. Au départ, je voulais utiliser PostgreSql, mais l’application devant fonctionner sur un Raspberry 3+, j’ai revu mon choix et j’ai opté pour une base embarquée (“Embedded database”).
Embarquée vs Autonome
D’un côté, on trouve les serveurs de bases de données à installer (comme MariaDB, PostgreSql, Oracle, etc) et de l’autre on trouve des serveurs qui fonctionnent dans un serveur applicatif (par exemple Tomcat).
Les deux approches sont intéressantes et bien sûr chaque solution possède des avantages et des inconvénients.
Le principal avantage des bases embarquées est qu’elles démarrent avec en même temps que Tomcat et les autres applications.
Bases candidates
- H2: base plutôt fiable mais la console d’administration est très pauvre.
- Apache Derby: grosse déception! Ne fonctionne tout simplement pas avec Apache Deltaspike.
- HSQLDB (HyperSql DataBase): intégration sans histoire avec Apache Deltaspike et gérable avec un client Sql tel que dBeaver.
Deux modes de fonctionnement
HSQLDB propose deux modes de fonctionnement: “in process” et “server”. Le mode “in process” consiste a inclure le jar HSQLDB dans l’application. Le mode “server” est plus intéressant puisqu’il permet d’héberger plusieurs bases dans un même serveur applicatif. Je vais présenter un exemple d’application appliquant le mode “server”.
Application HSqlServer
L’application s’articule autour d’une seule classe, nommée ici HSqlServer. Cette classe permet de configurer le port de connexion ainsi que la ou les bases exposées.
|
|
Le reste du projet se compose de fichiers de configuration. Le projet complet est téléchargeable ici et consultable sur mon GitHub.
Connexion et utilisation dans une application
Configurer pom.xml
Il faut en premier lieu inclure le jar HSqlDB via Maven dans le pom.xml:
|
|
Configurer Persistence.xml
Ensuite, il faut ajouter le fichier de persistance src/main/resources/META-INF/persistence.xml. En jaune, il s’agit des deux informations à adapter à son projet.
|
|
A noter que j’ai activé l’affichage des requêtes (“SQL=Trace”) et des paramètres (“PrintParameters=true”) afin de faciliter la mise au point de mon application.
Configurer Resources.xml
Il faut maintenant configurer la datasource en ajoutant le fichier src/WebContent/WEB-INF/resources.xml:
|
|
En jaune, on trouve les informations à adapter:
- myDB: nom de la datasource.
- SA: nom de l’utilisateur permettant d’accéder aux données.
- localhost: le nom DNS du serveur sur lequel est accessible la base de données.
- 9001: la port de connexion à la base de données.
- projet: le nom de la base elle-même.
Configurer Web.xml
Le point suivant consiste à exposer la datasource nécessaire au bon fonctionnement de Deltaspike. Pour cela, on complète le fichier src/WebContent/WEB-INF/web.xml:
|
|
En jaune, “myDB
” est le nom de la datasource et doit être identique à celui configuré dans le fichier resources.xml.
Définir un “Entity Manager”
Et pour terminer, il faut définir un “Entity Manager” qui va effectuer les requêtes produites par le ou les repositories.
|
|
En jaune, on retrouve le nom de l’unité de persistance définie dans le fichier src/main/resources/META-INF/persistence.xml.
Et voilà, HSqlDB est prêt à l’emploi!
Conclusion
Il est assez facile et rapide d’ajouter un serveur HSqlDB et l’utiliser dans ses projets.
Commentaires
C’est par ici