Projets
Pages enfant
  • 3.3.3 Gestion de la structure de la base de données

Vous regardez une version antérieure (v. /wiki/spaces/PROJ/pages/100663543/3.3.3+Gestion+de+la+structure+de+la+base+de+donn%C3%A9es) de cette page.

afficher les différences afficher l'historique de la page

« Afficher la version précédente Vous regardez la version actuelle de cette page. (v. 15) afficher la version suivante »

Relu

Relecture RB

Sommaire :


Introduction

Important : La gestion de la structure de la base de données est liée à la numérotation des versions de l'application (Cf. 3.3.6 Numérotation des versions)

Création de la structure de la base de données

Il est possible de configurer la couche JPA pour l'autoriser à automatiquement créer (où mettre à jour) la structure de la base de données. Ceci notamment parce que nous utilisons l'implémentation Hibernate de JPA qui offre cette fonctionnalité.

Pour activer activer la fonctionnalité il faut dans le fichier resources/properties/dao/dao.xml, positionner la propriété generateDdl à true :

<bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="${datasource.bean}" />
        <property name="jpaVendorAdapter">
            <bean>
                <property name="showSql" value="true" />
                <property name="generateDdl" value="#{ systemProperties[generateDdl]?:false }" />
                <property name="database" value="${jpa.database.type}" />
            </bean>
        </property>
        <property name="persistenceXmlLocation" value="classpath*:META-INF/example-dao-persistence.xml" />
        <property name="jpaProperties" ref="jpaProperties" />
    </bean>

En  fait, on voit ici que la propriété generateDdl du jpaVendorAdapter est évaluée via une EL Spring. Par défaut, sa valeur vaudra false. Ceci permet de NE PAS mettre à jour la base de données à chaque démarrage de l'application mais de le faire explicitement.

Pour cela ESUP-Commons propose un module batch dont une des commande sert à initialiser la base de données. L'appel à cette commande positionne la variable d'environnement generateDdl à true ce qui fait que la propriété generateDdl du jpaVendorAdapter est elle même positionnée à true.

La commande batch se lance via :

jar <appli>-batch-<version>.jar init-db

Mise à jour de la structure de la base de données

Le principe est le même que pour la création de la base de données sauf que la commande à lancer est :

jar <appli>-batch-<version>.jar upgrade-db

Comment ça marche

Les exemples données ici sont consultables dans l'application esup-example.
Le module batch dépend du module example-domain-services pour avoir accès au VersionningService.

Les commandes batch

La méthodeMaindispatche vers différente méthodes suivant le paramètre passé :

  • initDb pour init-db
  • upgradeDb pour upgrade-db

Respectivement ces méthodes appellent les méthodes suivantes du VersionningService :

  • initDatabase
  • upgradeDatabase

Le VersionningService est initialisé dans une méthode utilitaire qui positionne aussi la variable generateDdl.

Les procédures de mise à jour des données

LeVersionningServicea une méthode interne pour mettre à jour des données de la base (upgradeDatabaseIfNeeded). Elle permet de découper les traitements de mise à jour par version élémentaire. Il suffit ensuite de coder chaque mise à jour sous la forme d'une méthode avec une signature du typevoid upgrade0d0d1(0d0d1 pour 0.0.1 ou 0 dot 0 dot 1).
upgradeDatabase

  • Aucune étiquette