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.
Les procédures de mise à jour des données
TODO A compléter