Cette journée est l'occasion de suivre 4 sessions liées à l'ORM.

 

JPA 2.0 par Mike Keith

Cette session est l'ocassion de faire (refaire) un tour d'horizon des nouveautés de la version 2.0 de JPA incluse dans Jave EE 6 :

  • Standardisation de certaines propriétés de la Persistence Unit
  • Enrichissement des possbilités de mapping (@JoinTable, @JoinColumn)
  • Support de collection d’objets (@CollectionTable) et des listes ordonnées (@OrderBy, @OrderColumn)
  • Enrichissement du support des éléments Embeddable (imbrication, peuvent avoir des relations)
  • Possiblité de préciser le mode d’accès : champ ou propriété (@Access)
  • Gestion plus riche des verrous  avec un support des verrous pessimistiques
  • Support standard des fonctionnalités de base du cache de l’EntityManager : Cache.evictAll() est notamment très utile lors des tests.
  • Enrichissement de JPQL (timestamp litéral, collection dans la clause in, opérateur CASE,
  • TypedQuery pour éviter le casting
  • ...

En mileu de présentation, Mike nous propose un petit break culturel sur les horloges suisses et les Inukshuks ;-)

 

What's new in the hibernate sphere par Emmanuel Bernard

Le but de la présentation de faire un présentation générale des nouveautés de la partie Core d’Hibernate et de projets satellites.

Hibernate propose un support complet de la version 2.0 de JPA (standadisation des annotations, API Criteria, modes de verrous, ...). Certaines fonctionnalités étaient déjà implémentées de façon particulière par Hibernate : il est préférable d'utiliser la façon standardisée par JPA lorsque cela est possible.

Hibernate propose quelques nouvelles fonctionnalités intéressantes :

  • Fetch profile nommé (@FetchProfile) pour définir des statégies de récupération de données complexe utilisable via les méthodes enableFetchProfile() et disableFetchProfile() de la Session
  • la possibilité d’exécuter automatiquement des traitements à la lecture ou à l’écriture d’un champ
  • Exemple :

    <property name="creditcard">
    <column name="credit_card_num"
    read="decrypt(credit_card_num)"
    write="encrypt(?)"/>
    </property>
  • Partial generators
  • ...

 

Hibernate est bien plus qu'un simple outil d'ORM : Emmanuel nous propose une présentation rapide de trois sous projets d'Hibernate :

  • Hibernate search : qui permet la recherche full text dans la base de données avec plusieurs nouveautés (massive indexing, API d’intérogation, clustering, ...). Emmanuel est l’auteur d’un livre sur le sujet
  • Hibernate Envers (Entity Version) : permet d’enregistrer des informations d’audit de façon transparente sans modifier le schéma des tables du modèle (utilisation de tables dédiées)
  • Hibernate validator : c'est l'implémentation de la JSR 303 (Bean Validation) dont Emmanuel était le spec leader: Pour plus de détails consulter le chapitre 82 de mon didacticiel

Le présentation d'Emmanuel m'a particulièrement donné envie de regarder Hibernate search et surtout Hibernate Envers qui maintenant est fourni en standard avec la version 3.5 d'Hibernate.

Encore des sujets à ajouter à ma longue liste.

 

Java Persistence Criteria API par Linda DeMichele

Linda est la spec leader de la JSR 317 (JPA version 2.0) : elle donc une des mieux placée pour nous parler de cette partie de la version 2.0 de JPA.

Linda nous propose dans un premier temps :

  • un rappel sur JPQL : requêtes sous la forme de chaînes de caractères, syntaxe inspirée de SQL, static (NamedQuery ou dans le code) ou dynamique par concaténation de chaînes
  • les nouveautés de JPQL dans la version 2.0
  • les points forts (facile à utiliser car proche de SQL, requêtes dynamiques faciles ) et les points faibles (utilisation de String, pas de typage fort, problèmes de sécurité connus par concaténation de chaînes) de JPQL

L'API Criteria de JPA 2.0 permet la définition de requêtes en utilisant une approche OO.

Cette API doit permet de réaliser tout ce que permet JPQL et proposer un type fort.

Cette API s’inspire d’API similaires : Hibernate Criteria, TopLink Expression, Cayenne, OJB, ...

Deux approches sont proposées pour faire référence aux entités et aux champs

  • string based : facilité d'utilisation, plus familier et intuitif
  • object based : complètement OO avec l'utilisation d'un méta model pour un typage fort

Exemple JPQL

SELECT c
FROM Customer c join c.orders o
WHERE c.name = 'Braun'

Exemple API Criteria avec String

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Customer> cq = cb.createQuery(Customer.class);
Root<Customer> customer = cq.from(Customer.class);
Join<Customer, Order> o = customer.join("orders");
cq.where(cb.equal(customer.get("name"), "Braun"))
.select(customer);

Exemple API Criteria avec String

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Customer> cq = cb.createQuery(Customer.class);
Root<Customer> customer = cq.from(Customer.class);
Join<Customer, Order> o = customer.join(Customer_.orders);
cq.where(cb.equal(customer.get(Customer_.name), "Braun"))
.select(customer);

 

Patterns and practices in Hibernate par Patrycja Wegrzynowicz

La présentation au titre accrocheur est intéressante mais peu instructive car les points abordés sont pointus mais finallement connus après quelques temps de pratique d'Hibernate.

Leurs mises en oeuvre n'est cependant pas toujours triviale. Exemple : le choix d'une stratégies pour l'utilisation de l'héritage avec Hibernate

La mise en œuvre d’Hibernate peut se voir sous plusieurs angles : architecture, conception relationnelle, conception OO et programmation.

Après un petit rappel sur la POO (encapsulation héritage, polymorphisme, principes SOLID), ceux-ci sont mis en parallèle de leur utilisation dans les objets du domaine : éviter les modèles du domaine anemique (cd Martin Foler), respect de l’encapsulation, ...

Le thème suivant est celui des transactions et de la gestion des accès concurrents en proposant plusieurs alternatives à un exemple du livre de Gaving King.

Enfin le dernier thème porte sur les stratégies à mettre en œuvre pour l’héritage (table per classe hierarchy, table per subclass, table per concrete class) avec les avantages et les inconvénients d’un point de vu gestion des contraintes, vitesse d’accès et polymorphisme.

Un petit regret de ma part concernant la présentatrice qui se permet de critiquer Gaving King et le livre dont il est co auteur "Java persistance with Hibernate".

 

Mobicents 2.0 The Open Source Communication Platform par Jean Deruelle

Une présentation des plateformes open source de JBoss pour intégrer la VoIP (Voice over Internet Protocol qui ne se limite pas à la voix) dans des applications web.

Les applications possibles sont nombreuses : sécurité, notification par téléphone (messages vocaux et SMS), conférences, CRM, web Banking, ...

Mobitcents 2.0 se compose de plusieurs éléments reposant sur le microcontainer de Jboss

  • JAIN SLEE (Service Logic Execution Environment) : orienté asynchrone et événement
  • SIP Servlets : permet la convergence entre HTTP et SIP (JSR 289)
  • Media server : passerelle pour la diffusion de média
  • Presence Server

Jean nous présente une démo proposant l’utilisation de Mobicents dans un site d’ecommerce : validation de la commande, saisie de la date de livraison souhaitée, ... via un téléphone mobile par le client.

Cette présentation m’a permis de découvrir qu’il existe une plate-forme complète opne source pour intégrer la VoIP dans les applications web.