Dans ce troisième volet sur Apache Torque, on va s’intéresser à l’organisation des entités générées.

Apache Torque (épisode 3)

Introduction

Dans le deuxième article, on a vu comment configurer et utiliser Apache Torque pour générer les entités depuis le schéma de base de données. Dans ce troisième volet, on va améliorer l’organisation des entités.

Configuration des descripteurs de tables

On a configuré le pom.xml pour que le ou les descripteurs de schéma soient chargés depuis le dossier src/main/schema/. Afin de séparer les entités, on va simplement séparer le fichier de description en fonction des groupes d’entités. Dans cet exemple, on va séparer le fichier en deux: book d’un côté et author de l’autre.

Dans le dossier src/main/schema/, on ajoute deux dossiers book/ et author/. Dans chacun on dépose le fichier descripteur contenant uniquement ce qui concerne chaque package. On obtient cette arborescence:

Organisation des descripteurs de tables

Adaptation du pom.xml

Décidément, pratiquement tout Torque se configure dans le pom. Ici on va supprimer le bloc dont l’id est “generate-sources” puis ajouter un goal par package. Pour le package “book”, on obtient ceci (en gras, les modifications par rapport au goal “sans package”):

    
 1<execution>
 2                        <id>generate-sources-book</id>
 3                        <phase>generate-sources</phase>
 4                        <goals>
 5                            <goal>generate</goal>
 6                        </goals>
 7                        <configuration>
 8                            <packaging>classpath</packaging>
 9                            <configPackage>org.apache.torque.templates.om</configPackage>
10                            <sourceDir>src/main/schema/book</sourceDir>
11                            <defaultOutputDir>src/main/java/</defaultOutputDir>
12                            <defaultOutputDirUsage>compile</defaultOutputDirUsage>
13                            <options>
14                                <torque.database>mysql</torque.database>
15                                <torque.om.retainSchemaNamesInJavaName>false</torque.om.retainSchemaNamesInJavaName>
16                                <torque.om.generateBeans>true</torque.om.generateBeans>
17                                <torque.om.package>ch.gobothegeek.model.book</torque.om.package>
18                                <torque.om.package.peerPackageSuffix>.peer</torque.om.package.peerPackageSuffix>
19                                <torque.om.package.dbObjectPackageSuffix>.dbo</torque.om.package.dbObjectPackageSuffix>
20                                <torque.om.package.mapPackageSuffix>.map</torque.om.package.mapPackageSuffix>
21                                <torque.om.package.managerPackageSuffix>.mgr</torque.om.package.managerPackageSuffix>
22                                <torque.om.package.beanPackageSuffix>.bean</torque.om.package.beanPackageSuffix>
23                                <torque.om.package.baseDbObjectPackageSuffix>.base.dbo</torque.om.package.baseDbObjectPackageSuffix>
24                                <torque.om.package.basePeerPackageSuffix>.base.peer</torque.om.package.basePeerPackageSuffix>
25                                <torque.om.package.baseManagerPackageSuffix>.base.mgr</torque.om.package.baseManagerPackageSuffix>
26                                <torque.om.package.baseBeanPackageSuffix>.base.bean</torque.om.package.baseBeanPackageSuffix>
27                                <torque.om.className.baseDbObjectClassNamePrefix>Entity</torque.om.className.baseDbObjectClassNamePrefix>
28                                <torque.om.className.basePeerClassNamePrefix>Entity</torque.om.className.basePeerClassNamePrefix>
29                                <torque.sql.generate.drops>false</torque.sql.generate.drops>
30                            </options>
31                        </configuration>
32                    </execution>

Pour le pacakge “author”, le goal du pom se présente comme ceci:

    
 1<execution>
 2                        <id>generate-sources-author</id>
 3                        <phase>generate-sources</phase>
 4                        <goals>
 5                            <goal>generate</goal>
 6                        </goals>
 7                        <configuration>
 8                            <packaging>classpath</packaging>
 9                            <configPackage>org.apache.torque.templates.om</configPackage>
10                            <sourceDir>src/main/schema/author</sourceDir>
11                            <defaultOutputDir>src/main/java/</defaultOutputDir>
12                            <defaultOutputDirUsage>compile</defaultOutputDirUsage>
13                            <options>
14                                <torque.database>mysql</torque.database>
15                                <torque.om.retainSchemaNamesInJavaName>false</torque.om.retainSchemaNamesInJavaName>
16                                <torque.om.generateBeans>true</torque.om.generateBeans>
17                                <torque.om.package>ch.gobothegeek.model.author</torque.om.package>
18                                <torque.om.package.peerPackageSuffix>.peer</torque.om.package.peerPackageSuffix>
19                                <torque.om.package.dbObjectPackageSuffix>.dbo</torque.om.package.dbObjectPackageSuffix>
20                                <torque.om.package.mapPackageSuffix>.map</torque.om.package.mapPackageSuffix>
21                                <torque.om.package.managerPackageSuffix>.mgr</torque.om.package.managerPackageSuffix>
22                                <torque.om.package.beanPackageSuffix>.bean</torque.om.package.beanPackageSuffix>
23                                <torque.om.package.baseDbObjectPackageSuffix>.base.dbo</torque.om.package.baseDbObjectPackageSuffix>
24                                <torque.om.package.basePeerPackageSuffix>.base.peer</torque.om.package.basePeerPackageSuffix>
25                                <torque.om.package.baseManagerPackageSuffix>.base.mgr</torque.om.package.baseManagerPackageSuffix>
26                                <torque.om.package.baseBeanPackageSuffix>.base.bean</torque.om.package.baseBeanPackageSuffix>
27                                <torque.om.className.baseDbObjectClassNamePrefix>Entity</torque.om.className.baseDbObjectClassNamePrefix>
28                                <torque.om.className.basePeerClassNamePrefix>Entity</torque.om.className.basePeerClassNamePrefix>
29                                <torque.sql.generate.drops>false</torque.sql.generate.drops>
30                            </options>
31                        </configuration>
32                    </execution>

Génération des entités

Ici il faut invoquer la commande Maven “mvn generate-sources”, les deux goals sont dans la même phase, ils vont donc s’exécuter à la suite. On obtient alors les entités dans des packages séparés:

Conclusion

Dans le premier article, on a vu comment générer des entités et des tables à partir d’un fichier de description XML. Dans le deuxième article, on a vu le contraire, c’est à dire générer le descripteur à partir du schéma puis générer les entités. Dans ce troisième volet, on a vu une solution simple pour organiser les entités en différents packages.