Archive

Articles taggués ‘Hibernate’

Formation développement d’une application web en java – Promotion exceptionnelle

Développement Web Java dans une architecture

Spring, Hibernate et JSF

Nouveau Prix : 1560€

Prix initial : 1950€

4 Jours du 11 au 14 mars

Grenoble

Lire la suite…

Hibernate Object Grid Mapper – Alpes JUG – 22 Juin

Une présentation à ne manquer sous aucun prétexte !

Emmanuel Bernard vient nous présenter le projet Hibernate OGM.

Emmanuel Bernard est lead développeur sur les project Hibernate Annotation et EntityManager, il est aussi le fondateur des projets Hibernate Search et Validator et membre du groupe d’expert JPA2.

Le monde NoSQL fait du buzz en terme de scalabilité, disponibilité, … Mais comment faire migrer nos applications traditionnelles vers des solutions de type HBase, Cassandra ou Voldemort ?

OGM propose d’utiliser JPA comme API standard pour la persistance quelle soit de type relationnelle ou non !

Hibernate a fait ses preuves en terme de gestion de la persistance pour les bases relationnelles, avec l’engouement actuel pour les solutions NoSQL, le projet OGM fera sans doute beaucoup parler de lui.

Plus d’infos ici sur le site de l’Alpes JUG

Paris JUG : soirée « Emmanuel Bernard »

logoparisjug
La soirée du Paris JUG a commencé par une présentation de JDuchess : communauté féminine autour de Java. Il s’agit d’un groupe international qui a été fondé en Hollande.

Ensuite, la soirée « Emmanuel Bernard » s’est déroulée en deux parties : la première sur Hibernate Search et la seconde sur le design des APIs.

Première partie : Hibernate Search : recherche full-text pour des applications utilisant Hibernate.

Pour la recherche, il existe plusieurs modules de recherche full-text (par exemple avec SQL Server). Cependant, il n’existe pas de standard sur ces modules de recherche. Une autre solution pour réaliser de la recherche full-text est d’utiliser une librairie. Hibernate Search est basé sur  « Lucene », il permet de réaliser une recherche full-text avec les caractéristiques suivantes :

  • ordonne les résultats, les documents les plus pertinents seront dans les premiers résultats.
  • tolère les fautes de frappe ou orthographiques
  • on peut donner des priorités aux différents champs

La recherche full-text va s’appuyer sur un analyseur et plusieurs filtres. Parmi les filtres, on peut mettre tout en minuscule (recherche insensible à la case), enlever certains mots (le, la les).

Il y a plusieurs techniques qui permettent de comparer deux mots et donc qui permettent une recherche :

  • Recherche par approximation avec le calcul de distance de Levenshtein (distance entre deux mots). Si entre deux mots, 1 seule lettre change => bonne distance.
  • Recherche N-gram : cette technique permet de tolérer les fautes de saisie de l’utilisateur. Par exemple, au lieu de rechercher Hibernate, on découpe le mot en fragments de 3 lettres : Hib, ibe, ber et on recherche ces fragments … (le nombre de lettres du fragment est configurable).

D’un point de vue technique :

  • L’annotation @Indexed mise sur une entité permet de l’indexer en full-text. L’index sera mis à jour pour toute modification de l’entité.
  • L’annotation @Field crée un champ de recherche dans Lucene

Remarque : La recherche full-text se réalise uniquement sur du texte, des chaînes de caractères, Hibernate Search possède donc ses propres convertisseurs (date…)

Il est possible d’utiliser l’annotation @Fields qui permet de définir plusieurs types de recherche sur le même attribut. Il est possible de pondérer les différents critères. Par exemple, un mot trouvé dans un titre aura une meilleure pertinence que le même mot trouvé dans la description.

  • Recherche phonétique : prendre un mot et réaliser de la réduction phonétique (métaphone ou double métaphone, bien adapté aux langages latins).
  • Recherche de synonymes : on n’indexe pas le mot lui-même mais un mot de référence. Par exemple, pour like, cherish, le mot de référence sera love. On crée alors un sous-ensemble de la langue
  • Recherche par mots de la même famille (loving =>love) : on réduit un mot à sa racine. Le docteur Porter a écrit un algorithme sur ce principe appliqué à la langue anglaise (langage snowball). Ce dernier type de recherche est présent dans Hibernate Search, il s’agit de l’analyseur stem.

Astuce : il peut être judicieux de mettre plusieurs fields sur le même attribut pour pouvoir ajuster la pondération même en production.

Conclusion : Lucene est assez bas niveau, il peut donc être assez complexe à utiliser. Hibernate search est plus facile à mettre en place et permet de se concentrer sur le moteur de recherche.

Deuxième partie : Design d’API

Cette partie nous a exposé les bonnes pratiques pour faire de bonnes API (donc qui seront facilement utilisables par un maximum de personnes).

  • Tout d’abord, faire des APIs prend beaucoup de temps et aboutit à un produit qui ne satisfera jamais entièrement tout le monde.
  • Pour une API, il est préférable d’exposer que quelques méthodes (5 par exemple)
  • Il est bien que l’API couvre 80% des cas (les cas les plus fréquents) et si besoin qu’on puisse l’étendre pour des demandes bien spécifiques.
  • Une API doit être lisible et compréhensible de tous.
  • Une citation prise du snowboard et adaptée à la réalisation d’API : « If you don’t fall, you don’t make progress »
  • Utilisez l’API pendant que vous la développez
  • Pensez au-delà du code, la sémantique est très importante
  • Pour les méthodes, trouver un nom court et explicite

Bon pattern : method chaining pattern. La méthode renvoie l’objet lui-même, on peut donc appeler des méthodes à la chaîne.

Conclusion : pour une API, rendez les choses difficiles pour vous et simples pour les autres. Pour faire de bonnes APIs, il faut essayer et réessayer, penser aux utilisateurs et au futur de l’API.

Merci à Emmanuel Bernard pour cette soirée riche en enseignements. Une bonne présentation illustrée par de nombreux exemples de code et de démonstrations. Pour en savoir plus sur lui : http://blog.emmanuelbernard.com

Pour en savoir plus sur cette soirée, et si vous avez un compte google wave, une wave détaillant la dernière soirée du Paris JUG est accessible ici.

Hibernate : fonctionnement et bonnes pratiques – Héritage

Le Wiki d’Objet Direct contient une section Hibernate depuis un certain temps.  Cette section commence à être assez étofée et propose des articles techniques très pointus.  Elle vient de s’enrichir d’un article de Gérald Quintana concernant l’héritage. Cet article met en perspective les différentes approches autorisées par Hibernate, délivre des détails d’implémentation et des limites peu connus. La section Hibernate contient aussi la série des articles « Hibernate survival Guide » rédigée par Henri Darmet, dans leur version longue.

Le guide de survie Hibernate

2 excellents articles d’Henri Darmet (directeur technique Objet Direct Paris) issus du Wiki d’Objet Direct sont parus dans la revue Programmez  (n° 117 – mars 09 et n° 118 – avril 09). Ils traitent du fonctionnement interne d’Hibernate (partie 1 : cache de 1er niveau, partie 2 : gestion des liens inverses).

Série en cours…

NB : Même si vous croyez connaitre parfaitement ce framework, ces articles vont vous captiver, comme l’a été Sami Jabber par exemple.

Categories: Java EE Tags: ,