Why make donate
google analytics

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>maven-i18n-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

Maven JRst ReStructuredText ArgoUML