Instructions: Conception des JavaBeans
Ces instructions portent sur la conception des JavaBeans (EJB) d'une application J2EE.
Relations
Eléments connexes
Description principale

Introduction

Ces instructions portent sur la conception des JavaBeans et les différents choix qui s'offrent à un concepteur.

Pour plus d'informations sur les JavaBeans, reportez-vous à Concept : JavaBeans.

Les propriétés des JavaBeans

La valeur d'une propriété peut être stockée en interne en tant que zone privée et elle peut aussi se calculer. Le concepteur peut faire un pré-comptage de cette valeur ou une évaluation retardée, où la valeur sera uniquement calculée lorsqu'un appelant en fera la demande.

Il peut aussi lier la propriété ou lui imposer des contraintes. Dans l'un ou l'autre cas, le concepteur doit alors décider du mécanisme à utiliser concernant les événements et la notification.

Evénements et notification

Pour implémenter le mécanisme de notification, deux choix s'offrent au concepteur :

  • Utiliser les classes PropertyChangeSupport et PropertyChangeEvent du package java.beans.
  • Créer un mécanisme de notification personnalisée.

Les classes du package java.beans fournissent une implémentation qui s'applique dans la plupart des situations. La classe PropertyChangeEvent contient la référence à l'objet qui a mis l'événement (modification de propriété) en application, le nom de la propriété sous forme de chaîne et deux objets représentant la nouvelle et l'ancienne valeur de la propriété. La classe PropertyChangeSupport gère une collection de PropertyChangeListeners et contient le code de la notification dans la méthode firePropertyChange.

Diagramme décrit dans le texte d'accompagnement.

La classe PropertyChangeSupport est couramment utilisée pour les JavaBeans qui composent une partie des interfaces utilisateur.

La notification personnalisée est appropriée s'il faut réduire le temps système de la création d'objets événement. L'inconvénient est qu'il faut implémenter le mécanisme de notification. L'implémenteur de la notification personnalisée doit garder à l'esprit qu'une unité d'exécution différente peut ajouter ou supprimer des écouteurs pendant le processus de notification. Afin de fournir le comportement qui convient, la plupart des solutions créent une copie de la collection contenant les écouteurs ; la notification est alors réalisée à partir de cette copie. La plupart des implémentations publiées créent cette copie au début du processus de notification, ce qui crée beaucoup de copies et de performances dégradées. Cependant, les notifications étant plus courantes que l'ajout ou la suppression d'écouteurs, une copie à durée de vie longue peut être créée à l'avance pendant l'ajout ou la suppression des écouteurs puis réutilisée pour les notifications, permettant un fonctionnement plus rapide.

Compte tenu de la productivité des développeurs, on devrait avoir recours à la notification personnalisée uniquement lorsque les performances de la prise en charge du changement de propriété du package java.beans s'avèrent être le goulot d'étranglement.

Les exemples suivants démontrent l'utilisation de la prise en charge du changement de la propriété à partir du package java.beans et l'utilisation du mécanisme de notification personnalisée.

 

Exemple : JavaBean Tank utilisant java.beans.PropertyChangeSupport

Nous avons ici un JavaBean représentant un Tank (réservoir) qui a une propriété liée : level (niveau). Lorsque l'on change le niveau du réservoir, ce réservoir met en application la classe PropertyChangeEvent qui est gérée par l'objet TankController.

Diagramme décrit dans le texte d'accompagnement.

 

Exemple : JavaBean Tank utilisant la notification personnalisée

Dans l'exemple suivant, la classe Tank est implémentée à l'aide d'un mécanisme de notification personnalisée plus efficace qui évite de créer des objets pendant la notification.

Diagramme décrit dans le texte d'accompagnement.