Apache Derby (1er Pas) /*+Way Out?*/

Ce n’est pas que je veuille vraiment renoncer a Oracle… Cela dit quitte a voir autrechose, autant que ce soit une base Java. Java DB (i.e. Apache Derby) est inclus dans le JDK (Mustang) de Sun pour Java SE 6.0. Pour la petite histoire, il s’agit de la version open source de la base de donnees Cloudscape d’IBM. Pour ne pas mourrir idiot, j’ai fait quelques tests ! Ce que je voulais particulierement regarder c’est si c’est possible de manipuler Derby depuis un IDE comme JDeveloper et avec une « Java Persistence API » comme Toplink Essentials.

Pour installer Derby, c’est tres simple :

  • S’assurer que l’on a installe et configure un JRE 1.3 minimum (J’ai fait mes tests avec le JDK 1.5 Update 8 de Sun pour Windows)
  • Recuperer Derby sur le site d’Apache (http://db.apache.org/derby/derby_downloads.html) et decompresser la distribution.
  • Positionner la variable systeme DERBY_INSTALL sur le repertoire dans lequel Derby est decompresse
  • Ajouter les fichiers JAR derby.jar et derbytools.jar (repertoire lib de DERBY_INSTALL) dans la variable CLASSPATH
  • Lancer la classe org.apache.derby.tools.sysinfo pour verifier que le parametrage de Derby est correct avec la commande « java org.apache.derby.tools.sysinfo ». Le retour de cette commande indique les versions de Derby et JDK utilisees

Pour utiliser Derby, on peut, dans un premier temps, utiliser l’outil en ligne de commande « ij » :

  • Tapez : « java org.apache.derby.tools.ij »; le prompt ij> doit apparaitre.
  • Pour se connecter a une base de donnees nommee « test », il suffit de taper
    ij> connect ‘jdbc:derby:test’;
    Si la base de donnees n’existe pas encore, vous pouvez la creer en meme temps que vous vous connectez avec la commande :
    ij> connect ‘jdbc:derby:test;create=true’;
    La base de donnees est creee dans le repertoire de lancement de la JVM; Vous voyez un fichier derby.log et un repertoire correspondant a la base de donnees. Si vous voulez creer une base de donnees qui n’est pas dans ce repertoire, vous pouvez preceder le nom de la base de donnees par son chemin absolu
  • Vous pouvez ensuite utiliser le langage SQL pour manipuler des objets dans votre base de donnees.
    ij> create table emp(id int, lastname varchar(40), firstname varchar(40));
    ij> insert into emp values (1, ‘Arkzoyd’, ‘Gregory’);
    ij> insert into emp values (2, ‘Smith’, ‘John’);
    ij> update emp set firstname=’Jack’ where id=2;
    ij> select * from emp;
  • Pour executer un script demo.sql, tapez
    ij> run ‘demo.sql’;
    ou java org.apache.derby.tools.ij demo.sql
  • Tapez ‘disconnect’ ou ‘exit’ pour vous deconnecter de la base de donnees

Pour vous connecter a Derby depuis une autre JVM, cette approche est plus lourde et proche du fonctionnement d’une base de donnees comme Oracle. Elle permet d’acceder a la meme base de donnees depuis plusieurs JVM distinctes. Ces JVM peuvent etre sur la meme machine ou sur d’autres machines :

  • S’assurer que l’on a installe et configure un JRE 1.3 minimum
  • Recuperer Derby sur le site d’Apache (http://db.apache.org/derby/derby_downloads.html) et decompresser la distribution.
  • Positionnez la variable systeme DERBY_INSTALL sur le repertoire dans lequel vous avez decompresse Derby
  • Ajouter les fichiers JAR derby.jar, derbytools.jar et derbynet.jar (inclus dans le repertoire lib de DERBY_INSTALL) dans la variable CLASSPATH
  • Lancer la classe org.apache.derby.drda.NetworkServerControl avec les parametres (1) start (2) -h %derbyHost% (pour le nom de la machine sur laquelle Derby va binder une socket en LISTEN, par defaut hostname) et (3) -p %derbyPort% (pour le port de la machine sur laquelle Derby va binder une socket en LISTEN, par defaut 1527). Pour cela, il faut taper, par exemple :
    java
    org.apache.derby.drda.NetworkServerControl start -h localhost -p 1527
  • Pour se connecter, il suffit de lancer ij et de taper comme url de connexion « jdbc:derby://host:port/dbname« . Les fichiers jar necessaires sont derbyclient.jar et derbytools.jar. Une fois les variables positionnees, il faut taper :
    java org.apache.derby.tools.ij
    ij> connect ‘jdbc:derby://localhost:1527/test’;
    ij> select * from emp;

Acceder a Derby depuis Oracle Jdeveloper…


Comme presente dans la copie d’ecran ci-dessus, il est possible d’utiliser JDeveloper pour acceder a Derby comme a une base Oracle, pour cela :

  • Creer une nouvelle connexion et selectionner un driver tiers
  • Ajouter derbyclient.jar dans la bibliotheque d acces
  • Mettre org.apache.derby.jdbc.ClientDriver comme driver
  • Ne pas mettre de connexion utilisateur
  • Mettre une URL correspondant a une connexion distante (e.g. jdbc:derby://localhost:1527/test) et assurez vous que Derby est demarree en mode reseau

Il est egalement possible d’inclure Derby dans JDeveloper mais ca pose des problemes si on veux lancer un programme (pour des tests) qui accede a la meme base de donnees depuis une autre JVM

Developper une entity avec l’API de Persistence Java (JPA)

Depuis JDeveloper, On peur developper une entity qui accede a Derby et faire le mapping objet/relationnel. Pour cela,

  • On ajoute les librairies Derby au projet et on s’assure que la base Derby est lancee en reseau.
  • On cree une classe Emp qui est une entity qui mappe la table EMP de la base Derby.
  • On cree (ou modifie) ensuite un fichier persistence.xml dans le repertoire META-INF :
  • Pour finir on cree une classe JavaServiceFacade avec une methode main() qui manipule notre entity

Un projet exemple est disponible sur mon repertoire internet, ici. Regardez bien le fichier persistence.xml dans le repertoire META-INF; c’est lui qui contient le parametrage de la couche de persistence Toplink Essentials pour acceder a Apache Derby. Si vous voulez en savoir plus sur la maniere de developper des entities, reportez-vous a l’un de mes threads precedents sur EJB 3.0 et JPA ou, mieux, a toute la litterature sur ce theme… Interessant non ? pour developper une application en utilisant une infrastructure de base de donnees embarquee dans le serveur d’applications.

GarK!

2 réflexions sur “Apache Derby (1er Pas) /*+Way Out?*/”

  1. Bonjour,

    Vous parlez de Toplink ou de Toplink Essential ? Dans les 2 cas, le meilleur moyen d’obtenir rapidement de l’aide est d’utiliser le forum dédié à Toplink sur OTN :
    http://forums.oracle.com/forums/forum.jspa?forumID=48

    Les technos sont répandues et d’après ma compréhension validées. Le point qui pose le plus d’adhérence est sûrement TopLink & MySQL et ça a l’air valide : http://www.oracle.com/technology/products/ias/toplink/technical/support/database1013.html

    GarK!

  2. bonjour,
    merci d’avoir maitriser ces outils,
    juste un quetion comment faire une application web avec jsf et toplink et ejb et mysql et jboss?
    svp donnez votre avis sur projet

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *