LazyInitializationException sur un composant selectManyMenu (JSF / PrimeFaces)

L'objectif de cet article est d'éviter la levée d'une LazyInitializationException lors de l'utilisation d'un composant JSF selectManyMenu (ou PrimeFaces).

L'application, sur laquelle je travaille actuellement, repose sur les technologies JSF et JPA (Hibernate). J'ai dû, pour les besoins du projet, créer une page contenant un composant selectManyMenu, qui permet de sélectionner plusieurs éléments d'une liste :

selectManyMenu

Search in the SI : Hibernate Search

Hibernate Search est une surcouche qui facilite l’intégration du moteur d’indexation et de recherche Lucene. Il permet notamment la recherche fulltext dans des données structurées en SGBD (ou dans une base de données NoSQL). Son principe est simple, il propose de s'appuyer sur les entités JPA (déjà mappés sur la base de données) en définissant un mapping Object<->Document (au sens document Lucene). Ensuite Hibernate Search se charge de tout : Maintien des indexes à jour, récupération des entités JPA à partir d'une requête dans le moteur de recherche, ... On s'affranchit ainsi de l'écriture de beaucoup de code (voir un tutoriel pour s'en rendre compte). Voyons dans le détail comment mettre en place Hibernate Search dans nos applications.

JASIG CAS et persistance JPA

Dans le cadre d'une de mes missions, mon client souhaitait améliorer la disponibilité de son infrastructure SSO basé sur JASIG CAS. Avec 1 unique serveur SSO, celle-ci n'était pas très élevée.

Pour rappel, ce produit open-source gère les accès (identification et authentification) en un point unique du SI. Les applications lui demande des tickets d'identification puis de services  afin de valider les accès utilisateurs.

Présentation, étape par étape, de Spring-DATA-JPA

Ce billet présente une démo pour illustrer, étape par étape, comment utiliser Spring-Data-JPA.

Ce billet peut être considéré traitant le même thème que Construction de requêtes en Java : comment faire le bon choix ?.

Nous détaillons, dans une première partie, la prise en main du "framework" Spring-Data-JPA avant de progresser dans notre compréhension.

Le projet Spring-Data-JPA est l'un des projets de Spring reposant sur Spring-Data.

Spring-Data réduit considérablement le coût économique de la couche d'accès aux données relationnelles ou NoSQL.

Il simplifie l'accès aux bases de données SGBDR ou de type NoSQL.

Spring-Data peut-être combiné avec le framework QueryDSL (Domain Driven Design) afin de réaliser des requêtes complexes.

Avec Spring-Data-JPA, le développeur bénéficie d'un certain nombre de méthodes d'accès à la base sans écrire une ligne de code d'implémentation.

Le projet Spring-Data-JPA vise à améliorer la mise en œuvre de la couche d'accès aux données en réduisant considérablement l'effort d'écriture du code d'implémentation en particulier pour les méthodes CRUD et de recherche.

La notion centrale dans Spring-Data-JPA est la notion "Repository". Le repository est une interface à écrire par le développeur.

Il déclare, dans cette interface, les méthodes utiles d'accès aux données et Spring-Data-JPA fournit les implémentations nécessaires.

Notez que la même approche est appliquée à des contextes autres que JPA comme pour les bases non relationnelles.

Vous pouvez télécharger les sources de la démo1 ici.

Avec Spring-Data, écrire des méthodes de requête à la base se fait en 3+1 étapes:

  • Déclarer une interface Repository,
  • Ecrire la signature de la méthode de requête (CRUD ou de recherche),
  • Configurer Spring pour la génération automatique,
  • Appeler dans le client (ou test unitaire) les méthodes du Repository

C'est aussi facile!

Mais là on n'a fait que survoler la surface de Spring-Data.

Nous allons détailler ces étapes ci-après dans la démo.

Installation du projet Contacts

Pour ceux qui n'étaient pas à l'Ideo Bar (ouai j'ai les noms !! 🙂 ), j'y ai présenté une application Contacts qui permet de mettre en oeuvre une partie serveur en Java EE 6, avec du JPA, des EJB 3 et des web service rest JAX-RS.

Cette application est désormais disponible sur mon GitHub : https://github.com/sebrevel/Contacts

Vous y trouverez bien entendu le code mais aussi une petite explication : https://github.com/sebrevel/Contacts/blob/master/README.md

et une doc d'installation qui comprend le clone du repo GitHub, la création du workspace IntelliJ et le déploiement sur un Glassfish : http://www.youtube.com/watch?v=NJpBY6ys-mE&feature=plcp

Amusez-vous bien 🙂

Paris JUG : soirée de présentation de Java EE 6 le mardi 13 janvier

Le thème de la première réunion de l'année du JUG parisien était Java EE 6. Antonio Goncalves, co-fondateur du JUG, a présenté les nouveautés apportés à Java Enterprise Edition en tant que membre du JCP, le Java Community Process. Il s'agit du groupe chargé de définir les spécifications de Java dans son ensemble. La première version de Java EE (en 1999) comportait 10 spécifications, la version 6 qui sortira en mai ou juin 2009 en comporte 28.