Archive

Articles taggués ‘performances’

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

Oubliez les redéploiements grâce à JRebel

Introduction

Comme une grande partie des lecteurs de ce blog, vous avez certainement déjà travaillé sur des applications web Java EE de taille variable, sur lesquelles vous avez fait un nombre indécent de redéploiements à chaque fois que vous vouliez valider des modifications fraîchement apportées. Puis vous avez dû découvrir que depuis Java 1.4, la JVM permet de faire du Hotswap en mode debug, c’est-à-dire de remplacer du code à la volée au runtime.
Lire la suite…

Share

Illuminez vos logs dans Eclipse

Introduction

Comme beaucoup de lecteurs de ce blog, j’utilise un IDE au quotidien. Sur mon projet actuel, c’est Eclipse combiné à un serveur Websphere. Pour des raisons pratiques, je fais un tail -f des logs du serveur dans la console d’Eclipse, et qui dit serveur d’applications Java + logs en niveau DEBUG dit énormément d’informations à scanner pour trouver ce qui m’intéresse réellement (quelques Mo de logs par jour !). Lire la suite…

Share

Découper le chargement d’une application Flex

Un projet Flex standard produit un seul fichier SWF. Dans le cas de gros projets, cela peut aboutir à un projet monolithique composé d’un trop grand nombre de classes et lignes de code à maintenir, mais également  à un temps de chargement assez important chez l’utilisateur.

L’objectif de cet article est de présenter un ensemble de solutions permettant de découper une application Flex en plusieurs fichiers à des fins d’amélioration du développement et d’optimisation des temps de chargement. On restera ici assez général, l’idée étant plus de résumer les différentes solutions existantes que de présenter les manières pour les mettre en place. Cela fera plutôt l’objet d’autres articles… Lire la suite…

Share

HibernateGenericDAO considered harmful

La factorisation de code est une des grandes promesses de la programmation orientée objet. Ainsi, dès que l’on a passé le niveau “novice”, on meurt d’envie de factoriser du code et l’on tombe dans le premier piège de la POO : abuser de l’héritage. La désillusion n’en sera que plus grande dès que l’on passera au niveau “confirmé” :). Mais ce n’est pas le sujet de ce billet. Non, dans ce billet je vous propose de voir un effet plus pervers de ce problème, induit par le mode de fonctionnement d’Hibernate, et la paresse humaine. Lire la suite…

Share