Archive

Articles de Raphaël LEMAIRE

Pourquoi pas des requêtes spécifiques ?

Aujourd’hui je vais vous présenter un petit truc tout bête pour améliorer les performances d’une application utilisant un ORM, et en particulier de l’affichage d’une page de type back-office.

Problème

Vous avez un problème de performance lors de l’affichage d’une page importante de votre application. La page en question ne contient en gros qu’un tableau de données, avec une vingtaine de colonnes, le tout paginé qui plus est. Un cas assez courant dans les applications de gestion type back-office.

Votre chef vous explique que les utilisateurs seraient plus heureux (plus productifs en tout cas) si la page s’affichait instantanément plutôt qu’en 5 ou 10 secondes. Votre AMOA vous regarde avec pitié et étonnement : elle affiche le même tableau sans soucis dans son Squirrel avec une requête SQL pas très compliquée. Le directeur de projet vous soutient qu’Hibernate/JPA c’est lent et qu’on était mieux en JDBC.

Pour afficher le tableau en question, vous passez par une requête JPA/QL qui sélectionne les entités que vous cherchez (disons Person), puis vous utilisez le graphe d’objets résultant pour afficher la page :


1
String hql = "select p from Person join fetch ... where p.age > 18 ...";

Bien sûr Person est une classe énorme avec toutes les informations imaginables (pays de naissance, nom de l’école maternelle, nom de jeune fille de la grand mère paternelle, …), et vous avez  besoin de fetcher des associations en plus pour charger vos informations. L’ORM traduit tout cela en une ou plusieurs requêtes peu efficaces (sous selects, jointures, …) et chargeant beaucoup de données (50 colonnes sur trois tables), dont finalement peu sont utilisées. Lire la suite…

Share

Serial version UID ?

Capture d’écran 2010-03-18 à 21.46.37

Tout le monde connaît le warning affiché par défaut dans Eclipse quand une classe implémentant Serializable ne déclare pas d’attribut de classe final serialVersionUID de type long. Il y a différents types de réactions :

  • On ne touche à rien, c’est qu’un warning (aka politique de l’autruche).
  • On utilise le quick fix d’eclipse pour supprimer le warning (avec l’annotation @SuppressWarnings("serial")) (autruche aussi).
  • On utilise le quick fix d’eclipse pour générer un attribut serialVersionUID, de valeur 1L ou autre, généré par eclipse, selon les préférences et on n’y touche plus (un huitième de seconde et on y pense plus).

Il y a des gens que les warnings ne dérangent pas, moi je serais plutôt du genre à tout activer et à traquer toutes les petites pastilles jaunes. En général c’est vraiment le signe qu’il y a un truc pas terrible.

En même temps ajouter des numéros dans les classes comme ça sans trop savoir pourquoi… Lire la suite…

Share
Categories: Non classé Tags:

Java EE 6 en Scala, partie 2 : EJB 3.1

Introduction

La lecture de ce billet suppose celle du billet précèdent, en particulier la mise en place de l’environnement.

Le but de cette seconde partie est de s’amuser avec les EJB 3.1, en soulignant les différences avec la spécification précédente, le tout en Scala. Nos EJB seront donc des ESB (Enterprise Scala Bean), acronyme pouvant également signifier Enterprise Service Bus ou encore Encéphalopathie spongiforme bovine. On peut néanmoins espérer qu’une application JEE en Scala ne ressemble pas à un large véhicule bruyant rempli de ruminants dérangés.

Lire la suite…

Share

JEE 6 en Scala avec maven et glassfish v3, partie 1 : Servlet 3.0

Introduction

Cet article est le premier d’une série visant à explorer les nouveautés de JEE 6, en scala. Le but de cet article est d’écrire une servlet en scala en utilisant l’annotation @WebServlet disponible depuis JEE 6. Lire la suite…

Share
Categories: Non classé Tags: , , , ,

Création et utilisation de webservice avec Java 6

On y pense pas forcement mais les webservices font partie de J2SE 6. Oui oui, vous avez bien lu : J2SE 6. C’est d’ailleurs ce qui a conduit JBoss à créer deux versions, une pour java 5 et une pour  java 6, pour cause de conflits de librairies.  Cela signifie qu’il n’y a pas besoin de conteneur pour déployer un web service.
Lire la suite…

Share
Categories: Non classé Tags: , ,