Archive

Archives pour la catégorie ‘Non classé’

Applications Java extensibles avec les Service Provider Interfaces

Introduction

Dans la lignée des plugins chargés au runtime, je vous propose cette fois-ci d’explorer une seconde voie d’ajout de fonctionnalités au runtime : les Service Provider Interfaces (SPI) couplées à l’utilisation du ServiceLoader du JDK6.

Lire la suite…

Share

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

La réponse à la Grande Question sur la Vie, les Annotation Processors et le reste…

Introduction

Ne vous êtes-vous jamais demandé si vous utilisiez correctement une annotation ? Certes, pour certains cas comme @Deprecated, il faut vraiment en vouloir pour se tromper en l’utilisant. Mais quid d’un @Transactional ou d’un @AccessRole ? La plupart du temps, on s’attendra à les trouver sur des classes d’un package particulier (*.service), sur des méthodes ayant des paramètres précis, etc.

L'apocalypse des développeurs

Les annotation processors : l'apocalypse des développeurs ?

A l’inverse, on pourrait vouloir savoir comment sont utilisées certaines annotations, pour faire du reporting : quels sont les services auxquels aura accès un utilisateur disposant du droit "admin" ? Dans quelles classes mon framework doit-il injecter mon instance de FooBarPlopDAOImpl ? Brian va-t-il demander Penelope en mariage dans l’épisode 43 de la saison 28 d’Amour, Gloire et Clean Code ?

Autant de problématiques pouvant être résolues (en partie) grâce aux Annotation Processors, fonctionnalité assez peu connue apparue dans le JDK5. Je vous propose dans cet article de pousser un peu l’utilisation des annotations, dans la continuité des présentations faites par Olivier Croisier et d’un non moins génialissime article paru sur le blog Excilys récemment [1].

Lire la suite…

Share

Plugins annotés et chargés dynamiquement en Java

Attention : cet atricle n’est pas un atricle sur le cyclimse.[?]

Introduction

Je suis un geek. Comme tout bon geek qui se respecte, mes activités extra-professionnelles incluent entre autre des jeux vidéo et de la programmation (tard le soir en buvant un soda quelconque). Alors quand je peux mélanger deux activités favorites entre elles, c’est chouette. Etant fan de Trackmania Nations, il m’arrive de fouiner dans toute source d’information qui s’y rapporte.

C’est ainsi que j’ai appris que le serveur dédié TrackMania peut être contrôlé à distance par des appels XML-RPC. Evidemment, tout ça me donne envie d’ouvrir mon IDE favori pour faire un HelloWorld en Java et voir un peu les possibilités.

Le HelloWorld ayant évolué un peu plus que je ne l’avais initialement prévu, il s’est vu doté d’un système de plugins chargés dynamiquement (parce que j’avais envie d’explorer ce domaine depuis un certain temps déjà).

Assez raconté ma life, je vais maintenant vous faire part de mes réflexions relatives à la mise en place d’un système de plugins sous forme de JARs, pouvant être chargés/déchargés au runtime, et utilisant des annotations personnalisées.

Lire la suite…

Share

Optimiser l’ergonomie de son application web

Introduction

Je vous propose aujourd’hui un article sur un sujet un peu moins technique mais qui a son importance dans la vie d’un projet web, j’ai nommé la démarche ergonomique.

Cette démarche part d’un constat simple : nous sommes ceux qui créons les outils que nous utilisons au quotidien, nous devrions donc être capable de les concevoir pour qu’ils nous servent et non l’inverse.

Cependant dans le domaine des Interfaces Homme-Machine, on constate souvent à regret que concevoir un produit qui fonctionne ne suffit pas à garantir la satisfaction de ses utilisateurs en terme d’utilisabilité.

Nous allons donc voir ensemble quelques conseils pour optimiser l’expérience utilisateur sur ces interfaces.

Lire la suite…

Share