Commencer à développer
Nous pouvons maintenant ouvrir le projet dans un IDE et commencer à développer.
Configurer une base de données embarquée
Pour assurer la persitance de nos entités, il faut faire appel à
un SGBD supporté par Hibernate. Pour cela, un peu de configuration JDBC est
nécessaire. Dans le fichier src/main/resources/library-config.properties
, on
définit
# Pour démarrer, on utilisera une base H2 hibernate.connection.url=jdbc:h2:file:target/db/h2data # Configuration JDBC hibernate.dialect=org.hibernate.dialect.H2Dialect hibernate.connection.username=sa hibernate.connection.password= hibernate.connection.driver_class=org.h2.Driver # On demande à Hibernate de créer toutes les tables nécessaires # au besoin hibernate.hbm2ddl.auto=update # Un peu de config pour savoir ce que fait hibernate, cette directive # affiche toutes les requêtes effectuées sur la base dans la console hibernate.show_sql=true
Sans oublier les dépendances nécessaires à l'exécution
<dependencies> ... <!-- Implémentation pour les logger --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${sl4jVersion}</version> <scope>runtime</scope> </dependency> <!-- Driver pour la base de données H2 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>${h2Version}</version> </dependency> </dependencies>
Développer un premier service
Gestion des transactions
>>> Properties conf = new Properties(); URL url = Resource.getURL("TopiaContextImpl.properties"); conf.load(new FileInputStream(new File(url.toURI())));
Permet de charger un fichier contenant les informations de connexion à la base et de configuration de Topia.
>>> TopiaContext rootContext = TopiaContextFactory.getContext(conf);
Récupère le context de départ pour la création de sous context pour la gestion des entités.
>>> TopiaContext transaction = rootContext.beginTransaction();
Création d'un sous context pour la gestion des entités.
>>> transaction.commitTransaction();
Validation de l'état du context, les modifications des entités sont reportées dans la base de données.
>>> transaction.rollBackTransaction();
Invalidation de l'état du context, les modifications des entités ne sont pas reportées dans la base de données.
>>> transaction.closeContext();
Relâche la connexion JDBC d'un sous context et de ses sous contexts sans validation de l'état des contexts.
>>> rootContext.closeContext();
Relâche l'ensemble des ressources (cache, pools, ...) et relâche la connexion JDBC des sous contexts avec validation de l'état des contexts.
Manipulation des entités
>>> PersonDAO personDAO = <nom modele>DAOHelper.getPersonDAO(transaction);
Récupération d'un DAO pour accéder à une entité.
>>> Person person = personDAO.findByTopiaId(id);
Les méthodes find permettent de récupérer une ou plusieures entités selon différents critères.
>>> person.setName("tutu");
Manipulation de l'entité par les getters et setters.
>>> Person person = personDAO.create();
Création d'une entité. Si vous utilisez l'instanciation classique java avec le new, l'entité n'est pas persistée.
>>> personDAO.update(person);
Modification d'un entité.
>>> personDAO.delete(person);
Suppression d'une entité.
Configuration I18n
ToPIA contient une internationnalisation des messages utilisateurs (logs). Il est préférable d'initialiser I18n pour accélérer la recherche des messages.
Au démarrage de l'application
I18nInitializer i18nInitializer = new DefaultI18nInitializer("library-bundle"); I18n.init(i18nInitializer, new Locale("fr", "FR"));
Configuration maven
<!-- Plugin i18n pour gérer le bundle de messages --> <plugin> <groupId>org.nuiton.i18n</groupId> <artifactId>i18n-maven-plugin</artifactId> <version>${nuitonI18nVersion}</version> <executions> <!-- Cette exécution permet de rassembler tous les messages i18n dans un seul 'properties bundle' nommé library-bundle --> <execution> <id>make-bundle</id> <configuration> <bundleOutputName>library-bundle</bundleOutputName> </configuration> <goals> <goal>bundle</goal> </goals> </execution> </executions> </plugin>
Vous pourrez également utiliser nuiton-i18n pour l'internationnalisation de votre application.
Exemple complet
Un exemple complet dans StartTest.