Apache Maven 1.x has reached its end of life, and is no longer supported. For more information, see the announcement. Users are encouraged to migrate to the current version of Apache Maven.

Apperçu

Ce sous projet constitue un plugin maven (1.x) permettant de générer du code à partir de la structure d'une base de données. Cette fonctionnalité est déjà couverte par de nombreux outils (MidleGen, Sql2Java...), cependant ce générateur apporte la plus-value suivante:

  • Le plugin peut se baser sur un référentiel Oracle Designer. Il peut en extraire des informations qui ne sont plus présentes dans l'instance de la base de données. Les autres outils de génération, quelquesoient leurs avantages, ne peuvent obtenir des informations telles que :
    • association d'une colonne avec une séquence
    • commentaires de description des données
    • domaines de valeurs
    • tables associatives (relation N:N)
    • donnes spécifiques Designer (noms courts des tables)
  • Le plugin utilise des templates Velocity. Il est facile de produire ses propres templates pour répondre un besoin particulier.
  • Le plugin extrait la structure de la base dans un fichier XML. Ce fichier peut tre placé sous CVS et éventuellement modifié à la main. Le développement du modèle Designer est décorrélé du développement métier.

Mise en oeuvre

Production du fichier modèle

La production du fichier modle est dcrite ici.

Le plugin produit un fichier XML qui détaille les tables, et colonnes du modèle, ainsi que les contraintes et relations qui les relient. Le format est assez explicite pour permettre une édition manuelle si besoin.

Extrait d'un fichier modèle:

<?xml version="1.0" encoding="ISO-8859-1"?>
<model name="GTA-G1R0C0 (1)"
          date="2005-10-03T22:00:00Z">
    <domain-of-values name="D_BOOLEEN">
        <value name="OUI" value="O">Oui/True</value>
        <value name="NON" value="N">Non/False</value>
    </domain-of-values>
    <table name="BASCULE_CAA_SITE" alias="BCS">
        <column name="BASCULE_CAA_SITE.ID_SITE" type="VARCHAR2" jdbc="VARCHAR"
                   pk="true" mandatory="true" size="10">
            <description>Identifiant du site</description>
        </column>
        <column name="BASCULE_CAA_SITE.ID_BASCULE" type="NUMBER" jdbc="NUMERIC"
                   pk="true" mandatory="true" size="4">
            <description>Identifiant de l'op&eacute;ration de bascule de pr&eacute;fixe du CAA</description>
        </column>
        <relation name="BCS_SIT_FK">
            <target ref="SITE"/>
            <target-role>.</target-role>
            <source-role>.</source-role>
            <foreign-key name="BCS_SIT_FK">
                <source ref="BASCULE_CAA_SITE.ID_SITE"/>
                <target ref="SITE.ID_SITE"/>
            </foreign-key>
        </relation>
    </table>
</model>

Templates

Le plugin propose par défaut les templates de génération suivants :

model

Modèle d'objets métiers équivalent à la structure des tables en base. Les relations inverses et les tables associatives sont remplacées par des relations multiples (Collections).

Ce modèle n'est pas complet et doit être associ éaux templates model-orm ou model-basic selon le type de persistance utlisé. La hiérarchie des objets métiers peut être partiellement retravaillée pour obtenir un modèle orrienté objet.

model-basic

Complément au modèle des objets métier. Il introduit le parcours des relations entre objets par invocation de DAO.

Il est destiné à être utilisé avec un mécanisme de persistance basique, de type JDBC ou SQLMaps, qui ne gère pas l'état de persistance des objets métier. Chaque objet métier doit alors gérer sa sauvegarde en base après une modification.

model-orm

Complment au modle des objets mtier, destin tre associ un outil de persistance (Object Relational Mapping) de type Hibernate ou JDO. L'outil de mapping prend en charge le parcours des relation et le cycle de persistance des donnes.

model-ejb3

TODO.

dao-ioc

Couche intermédiaire entre les objets métier et les DAO utilisant des proxies spring-aop pour intercepter les nouveaux objets métier instanciés et leur injecter les dépendances nécessaires.

Cette couche peut tre remplacée par l'utilisation de ccc-spring-aspects , voir de Spring 2.0 si un JDK 5 est utilisé.

dao-jdbc

Implémentation basée sur JDBC des DAO définis par le modèle "model-basic".

dao-sqlmap

TODO

dao-hibernate

TODO

Ces templates sont pr?sent?s en d?tail ici.

Roadmap

  • Intégration de templates "par défaut" pour l'utilisation courante.

  • Support des référentiels Oracle Designer 9

  • Support d'autres mécanismes d'extraction du modèle ?

  • Adaptation comme plugin Maven 2.

  • Adaptation comme plugin Eclipse (EMF ?).