JavaBeans.

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Le struts validator – framework de validation
Evénements Java Beans Java RMI
Au programme du jour …. Ce que vous navez pas encore vu Constantes et variables de classe Main et Tests Utilisation de lAPI Existence des packages Existence.
Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages.
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Approfondissement du langage
(Classes prédéfinies – API Java)
Introduction à Java - les paquetages -
Plan du cours La sérialisation: – comment stocker et restaurer les Objets? Les interfaces graphiques et la programmation évènementielle. –Comment concevoir.
C.
JAV - TD 6 Structures de données JAVA
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Entité Module Java Expert.
Programmation par Objets et Java
Principes de programmation (suite)
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Administration de SharePoint
Principes de programmation (suite)
Page de garde Les JavaBeans ISIA, Mars 2003
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Classes abstraites et Interfaces
Langage Oriente Objet Cours 2.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Module 4 : Création et gestion de comptes d'utilisateur
Création et gestion de comptes d'utilisateur
Techniques de test Boulanger Jean-Louis.
Structures de données IFT-2000
Behavioral Design Patterns The Observer Pattern Roberto Demontis Sylvain Giroux.
Présentation Structures de Données et TDA
IFT 6800 Atelier en Technologies d’information
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Module 2 : Préparation de l'analyse des performances du serveur
Types de données abstrait et mécanismes d'encapsulation
COURS DE PROGRAMMATION ORIENTEE OBJET :
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Patrons de conceptions de créations
Les méthodes en java • Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. • Une méthode pour être utilisée.
1212 Entrée et sortie de fichiers Objectifs À la fin de ce cours, vous serez capables de : • Lire à partir de la console • Écrire sur la console.
Gestion de Fichiers GF-3: Structures d’Enregistrements, Acces Sequentiel et Direct, Manipulation de classes en C++ (Base sur des segments des Chapitres.
Paradigmes des Langages de Programmation
Objectifs À la fin de ce cours, vous serez capables de :
La production informatique sécurisée et simplifiée
JavaScript Nécessaire Web.
La notion de type revisitée en POO
Les principes de la modélisation de systèmes
Propriétés. Propriétés ► Les propriétés peuvent être visibles dans les environnements de scripts ► Les propriétés peuvent être accédées par programmation.
Cours 61 6 La sécurité, Portée, Visibilité Programmer avec sécurité.
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
JavaScript.
Evénements. Plan Evénements Principes Exemples Adapteur.
Cours No8 La programmation à l’aide d’objets. Contenu 1. Terminologie objet 2. Classe vs Objet 3. Création d’une classe 4. Déclaration d’une variable.
11/04/ L'héritage Cours 7 Cours 7.
Variables et accès en Java. Déclaration des variables final transient static private Printer hp; transient => ne doivent pas être sérialisées volatile.
Créer des packages.
Le contenu est basé aux transparents du 7 ème édition de «Software Engineering» de Ian Sommerville«Software Engineering» de Ian Sommerville B.Shishedjiev.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Tutorat en bio-informatique
ISBN Chapitre 10 L'implémentation des sous- programmes.
Cours LCS N°4 Présenté par Mr: LALLALI
Module 3 : Création d'un domaine Windows 2000
MOCK.
Behavioral Design Patterns The Observer Pattern. Intention Définir une dépendance de “1” à “n” entre des objets de telle sorte que lorsque l’état d’un.
Master 1 SIGLIS Intégration des données dans l’entreprise Stéphane Tallard JDBC: Java Database Connectivity Master 1 SIGLIS1JDBC.
21/04/2015© Robert Godin. Tous droits réservés.1 6Gestion des contraintes d’intégrité en SQL n Contrainte d'intégrité statique – respectée pour chacun.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Héritage Conception par Objet et programmation Java
Dreamweaver le retour Avec Les Formulaires Les Calques
Transcription de la présentation:

JavaBeans

Plan Objectifs : pourquoi les JavaBeans ? Utiliser les JavaBeans Evénements Propriétés Introspection Customization Manipuler et déployer les JavaBeans

Objectifs Définir un modèle de composant logiciel pour Java Blocs de construction pour composer des applications JavaBean en tant qu’applications Des tierces parties peuvent créer des composants Java qui seront assemblés ensemble pour créer des applications pour les usagers finaux Architecture neutre de composants Simplicité

Définition Un Java Bean est un composant logiciel réutilisable qui peut être manipulé visuellement dans un outil d’assemblage (éditeur graphique, BeanBox...). Exemples d’outils d’assemblage Editeur de page Web Editeur visuel d’applications Constructeur de GUI Editeur d’applications serveurs

NetBeans

Caractéristiques distinctives des JavaBean Support pour l’introspection de telle sorte qu’un outil d’assemblage puisse analyser comment le bean travaille Support pour la “customization” de telle sorte que lorsqu’il utilise un constructeur d’applications, l’utilisateur puisse configurer l’apparence et le comportement du bean Support pour les événements en tant que métaphore simple de communication qui puisse être utilisée pour connecter les beans entre eux. Support pour les propriétés à des fins de customization et de programmation. Support pour la persistence, de telle sorte qu’un bean puisse être configuré par un éditeur d’applications et que son état configuré puisse être sauvé et récupéré plus tard

Principales caractéristiques des JavaBean Ensemble de propriétés exposées attributs nommés (variables d’instance) Ensemble de méthodes que les autres composants sont autorisés à invoquer par défaut, toutes les méthodes publiques Ensemble d’événements déclenchés une façon d’informer les autres composants que quelque chose d’intéressant est survenu

JavaBeans en tant que lien à un état distant (remote state) Activation locale le modèle d’exécution de base est qu’un bean s’exécute dans le même espace d’adresse que son contenant Mécanismes principaux d’accès au réseau Java RMI Java IDL: modèle d’objet distribué de CORBA (OMG) JDBC: Java Database API Migration d’objets sur le réseau

Utilisation des JavaBeans Les éditeurs d’applications offrent souvent des scénarios de construction très différents.

Persistence I Tous les beans doivent implémenter Serializable ou Externalizable le mécanisme de sérialization automatique de Java le mécanisme d’“externalization” dans un flot (stream) contrôle total sur le format des données, permet de mimer des formats de données existants. un bean ne doit pas normalement stocker des pointeurs sur des beans externes utiliser les variables “transient” pour pointer vers les autres beans ou les “listeners” d’événements la responsabilité du beans ‘conteneur’ est de garder la trace des liens inter-beans, de les emmagasiner et de les reconstruire lorsque nécessaire.

Persistence II Le designer d’un bean peut spécifier qu’un bean ne peut pas être restauré simplement en le sauvant et en restaurant seulement ses propriétés. Utiliser le mécanisme attribut/valeur du FeatureDescriptor l’attribut “hidden-state” = Boolean true. Il faut utiliser la sérialization ou l’externalization pour sauver et / ou restaurer l’état du bean

Evénements Les événements permettent de propager et de notifier les changements d’états entre un objet source et un ou plusieurs objets listener.

Objectifs des événements à l’intérieur des JavaBeans Capture et déclenchement des événements dans des environnements de scripts. Découverte des événements qu’une classe donnée d’objets peut générer. Découverte des événements qu’une classe donnée d’objets peut observer. Mécanisme d’enregistrement commun qui permet la manipulation dynamique des relations entre les sources d’événements et les listeners.

Implémentation Notifications d’événements propagées des sources vers les listeners par invocation de méthodes Java java.util.EventListener Groupe d’événements de la même catégorie A chaque type d’événement correspond une méthode distincte pour la notification. Classe de listeners d’événements implémente un ensemble donné d’interfaces EventListener. java.util.EventObject l’état associé avec la notification d’un événement

Implémentation Sources d’événements méthodes d’enregistrement doivent se conformer à un design pattern spécifique de noms classes d’adapteurs sur mesure peuvent s’interposer entre la source et un ou plusieurs listeners pour les relier ou ajouter au comportement de base des listeners.

Notification d’événements

Objets : état de l’événement Par convention, les classes qui décrivent l’état d’un événement ont des noms qui se terminent par “Event”. Des sous-classes de java.util.EventObject peuvent être créées afin de permettre des distinctions logiques entre les types d’événements, même si elles partagent les mêmes données.

Interfaces Event Listeners Pour définir et regrouper les méthodes de gestion des événements. Les interfaces EventListener héritent de java.util.EventListener Par convention, le nom de ces interfaces se termine en “Listener”.

Design pattern associé aux événements un design pattern standard pour la documentation du système d’événements pour déterminer par programmation les interfaces des listeners réalisées par des tiers construction automatique d’adapteurs génériques. La signature de ce design pattern est: void <eventOccurenceMethodName>(<EventStateObjectType> evt); où <EventStateObjectType> est une sous-classe de java.util.EventObject.

Notes sur les éditeurs d’applications Les méthodes de gestion des événements devraient n’avoir qu’ un seul argument instance de la sous-classe java.util.EventObject. Les éditeurs d’applications devraient aussi supporter des signatures plus libres ne devraient pas discriminer entre les méthodes qui se conforment strictement au design pattern et celles qui ne s’y conforment pas strictement.

Enregistrement d’un Event Listener Les classes qui déclenchent des événements doivent fournir des méthodes d’enregistrement des listeners de “dés-enregistrement” des listeners. Design pattern : synchronized public void add< ListenerType>(< ListenerType> listener); remove< ListenerType>(< ListenerType> listener);

synchronized Les segments de code qui accède le même objet à partir de threads distincts parallèles sont appelés sections critiques. En Java, une section critique peut être un bloc ou une méthode identifiée par le mot-clé synchronized. Un verrou (‘lock’) est associé avec tout objet qui contient du code synchronisé

Synchronized : verrouillage Lorsque le contrôle entre dans une méthode synchronisée, le thread qui a appelé cette méthode verrouille l’objet dont la méthode a été appelé. Les autres threads ne peuvent pas appeler une méthode synchronisée du même objet jusqu’à ce que l’objet soit déverrouillé. L’acquisition et la libération d’un verrou est faite automatiquement et atomiquement par l’exécutable Java.

Enregistrement d’un Event Listener Aspects dépendants de l’implémentation la relation entre ordre d’enregistrement ordre de livraison des événements les effets de l’ajout du même objet event listener plus d’une fois sur la même source d’événements, le retrait d’un objet event listener plus d’une fois, le retrait d’un objet event listener qui n’est pas enregistré

Enregistrement Unicast Event Listener Pour des motivations sémantiques ou d’implémentation, il se peut qu’il ne soit pas approprié ou impraticable que certains événements soient multicast La signature pour un enregistrement d’un EventListener unicast : public void add <ListenerType> ( <ListenerType> listener) throws java.util.TooManyListenersException; public void remove< ListenerType> (< ListenerType> listener); Transmettre null en tant que valeur de listener est illégal, et peut provoquer les exceptions suivantes IllegalArgument-Exception ou NullPointerException.

Sémantique de la livraison des événements Unicast/Multicast par défaut, tous les listeners enregistrés doivent être considérés comme éligibles pour recevoir la notification de l’événement la source peut restreindre l’ensemble des listeners éligibles à un sous-ensemble de ceux qui sont actuellement enregistrés en fonction de critères de sélection dépendants de l’implémentation

Sémantique de la livraison des événements Livraison synchrone La livraison des événements est synchrone par rapport à la source des événements. Exceptions les méthodes des listeners peuvent déclencher des exceptions déclarées les sources d’événements doivent être conscientes que les listeners peuvent déclenchés “par inadvertance” des exceptions non déclarées. si un des listeners de l’exception déclenche une exception, alors c’est une décision de l’implémentation au niveau de la source des événements de décider si elle poursuit ou non la livraison de l’événement aux autres listeners

Sémantique de la livraison des événements Gestion du parallélisme Dans les systèmes multi-thread, la gestion des événements est une cause fréquente de “race condition” ou de deadlock. A race condition is anomalous behavior caused by the unexpected dependence on the relative timing of events les sources d’événements devraient utiliser des méthodes synchronisées et des blocs synchronisés pour accéder aux structures de données qui décrivent les event listeners

Sémantique de la livraison des événements Gestion du parallélisme (suite) il est fortment recommandé que les sources d’événements évitent de conserver les “locks” internes lorsqu’elles appellent des méthodes des listeners éviter l’utilisation de méthodes synchronisées pour déclencher un événement plutôt utiliser un bloc synchronisé pour trouver les listeners (e.g. copier la liste des listeners) par la suite appeler les méthodes des listeners à partir du code non-synchronisé.

Sémantique de la livraison des événements Modification de l’ensemble des listeners pendant la livraison d’un événement. L’effet exact de telles mises à jour parallèles sont dépendantes de l’implémentation. Un listener peut être de-enregistré continuer à recevoir subséquemment des événements de la source parce que la livraison d’événements multicast était en cours.

Adapteurs d’événements

Utilisation des adapteurs d’événements Implémentation d’une file entre les sources et les listeners. Filtrage. Démultiplexage de sources multiples d’événements sur un seul listener. Agir comme “wiring manager” générique entre les sources et les listeners.

Exemple de listener - pas joli, joli

Même exemple utilisant un adapteur

Même exemple utilisant une classe interne

Même exemple utilisant une classe interne anonyme

Adapteurs Démultiplexer plusieurs sources d ’événements sur un seul objet

Sécurité Parce que le mécanisme actuel de livraison des événements est synchrone à l’intérieur du thread déclencheur, l’algorithme de vérification de la pile implique les actions du listener sont automatiquement limitées si la source est une applet untrusted.

Propriétés Les propriétés peuvent être visibles dans les environnements de scripts Les propriétés peuvent être accédées par programmation par les autres composants en invoquant les accesseurs (getter and setter methods) Feuille de propriétés  fait partie du processus de personnalisation (customization) d’un composant En général, les propriétés sont persistentes

Méthodes d’accès Les propriétés sont toujours accédées par invocation de méthodes sur les instances qui les contiennent. Noms les méthodes d’accès peuvent avoir des noms arbitraires. Par convention PropertyType getFoo(); // simple getter void setFoo(PropertyType value); // simple setter même si dans un éditeur de scripts permet d’écrire quelque chose du genre “b.Label = foo” il y aura invocation d’une méthode sur l’objet cible

Propriétés indexées Pour spécifier un indice qui identifie quelle valeur obtenir Les indices de propriétés doivent être de type int (Java). Cette contrainte sera relaxée dans le futur pour permettre d’autres types d’indice. PropertyType getter(int index); // indexed getter PropertyType[] getter(); // array getter void setter(int index, PropertyType value); // indexed setter void setter(PropertyType values[]); // array setter peut déclencher une exception java.lang.ArrayIndexOutOfBoundsException

Exceptions et méthodes d’accès Les méthodes d’accès simples et indexées peuvent déclencher des exceptions.

Propriétés liées (bound) S’il existe un service de notification des changement d’une propriété  bound PropertyChangeListener event listener pour informer des mises-à-jour des propriétés liées simples. public void addPropertyChangeListener (PropertyChangeListener x); public void removePropertyChangeListener invocation de la méthode suivante pour chacun des aListener.propertyChange(PropertyChangeEvent evt)

Propriétés liées (bound) La source de l’événement devrait déclencher l’événement après la mise-à-jour de sont état interne. Classe utilitaire PropertyChangeSupport pour gérer la liste des PropertyChangeListeners pour déclencher les événements PropertyChange.

Propriétés contraintes Les propriétés sont dites contraintes lorsque d’autres beans peuvent souhaiter valider le changement rejeter un changement s’il est inapproprié. public PropertyType getFoo(); public void setFoo(PropertyType value) throws PropertyVetoException;

Propriétés contraintes Si le récepteur de l’événement ne souhaite pas que la modification soit faite  il déclenche une exception PropertyVetoException la responsabilité de la source de capturer cette exception réétablir l’ancienne valeur rapporte le retour l’ancienne valeur via un nouvel événement VetoableChangeListener.vetoableChange. La source devrait déclencher ce type d’événement avant de mettre à jour son état.

Propriétés contraintes Il existe une classe utilitaire VetoableChangeSupport pour gérer la liste des VetoableChangeListeners pour déclencher les événements VetoableChange pour capturer les exceptions PropertyVetoExceptions et émettre les événements de réversion nécessaires.

Ecouter les propriétés à la fois liées et contraintes Si un bean supporte une propriété qui est à la fois liée et contrainte alors elle devrait déclencher un événement VetoableChangeListener.vetoableChange avant la mise-à-jour de la propriété un événement PropertyChangeListener.propertyChange après la mise-à-jour de la propriété.

Vérification des événements sans effet Si une méthode setter est invoquée avec un argument égal à la valeur courante de la propriété alors il est recommandé que le bean ne déclenche pas d’événement de type VetoableChangeListener.vetoableChange ou PropertyChangeListener.propertyChange

Support optionnel pour les propriétés liées void addPropertyChangeListener (String propertyName, PropertyChangeListener listener); void removePropertyChangeListener le bean doit aussi supporter le design pattern standard pour l’enregistrement des event listeners, qui ne prend qu’un seul argument. alternative void add<PropertyName>Listener(PropertyChangeListener p); void remove< PropertyName>Listener(PropertyChangeListener p);

Support optionel support pour les propriétés contraintes nommées void addVetoableChangeListener (String propertyName, VetoableChangeListener listener); void removeVetoableChangeListener le bean doit aussi support le design pattern standard pour l’enregistrement des event listeners, qui ne prend qu’un seul argument. alternative void add<PropertyName>Listener(VetoableChangeListener p); void remove<PropertyName>Listener(VetoableChangeListener p);

Les classes de support en Java class java.beans.PropertyChangeEvent null peut être utilisé comme ancienne et/ou nouvelle valeur si la valeur réelle n’est pas connue. null peut être utilisé comme nom de la propriété modifiée pour indiquer qu’un ensemble arbitraire de propriétés ont été modifiées. interface java.beans.PropertyChangeListener class java.beans.PropertyChangeSupport Aucun événement n’est déclenché si les anciennes valeurs sont égales et non-nulles. class java.beans.PropertyVetoException interface java.beans.VetoableChangeListener class java.beans.VetoableChangeSupport

Introspection Pour découvrir les propriétés les événements les méthodes Pour éviter l’usage d’un langage distinct de spécification pour définir le comportement d’un Java Bean.

Comment fonctionne l’introspection? Par défaut Un mécanisme réflexif de bas-niveau Utilisation de design patterns simples pour déduire à partir des méthodes quels sont les propriétés, les événements et les méthodes publiques qui sont disponibles. design patterns = noms et signatures stéréotypés pour un ensemble de méthodes et/ou d’interfaces L’interface BeanInfo pour exercer un contrôle complet et précis sur les propriétés, les événements et les méthodes qui sont exposées.

Réflexivité: Design patterns Propriétés simple  get and set boolean  is and set indexées  get, set, get__(int x) and set__(int x, ___) Événements Multicast  add/remove___Listener Unicast  add___Listener(___) throws java.util.TooManyListenersException; Méthodes toutes les méthodes publiques sont exposées

Spécification explicite L’interface BeanInfo les méthodes permettent de connaître événements propriétés méthodes information globale. <BeanClassName>BeanInfo La classe qui sert de BeanInfo peut choisir de ne spécifier qu’une partie de l’information sur le comportement du bean. Les éditeurs d’applications devraient toujours utiliser l’interface de l’introspecteur pour combiner l’information provenant de plusieurs sources d’informations pour construire le descripteur (bean info) définitif d’un bean donné.

Analyse d’un bean La classe java.beans.Introspector traverse la hiérarchie des classes / superclasses d’une classe donnée. A chaque niveau Vérifie s’il existe une spécification explicite (BeanInfo) Si non, effectue une analyse implicite fondée sur les design patterns Si une classe fournit un BeanInfo explicite sur elle-même alors l’information fournie par le BeanInfo est ajoutée à l’information obtenue par l’analyse des sous-classes cette information explicite est considérée comme finale pour la classe courante et ses superclasses, l’introspection s’arrête et ne va pas plus loin dans la hiérarchie des superclasses

Le package java.beans.*; //Bean Info interface BeanInfo public BeanInfo[] getAdditionalBeanInfo() rend une collection arbitraire d’objets de type BeanInfo cette collection fournit des informations additionnelles sur le bean courant. class SimpleBeanInfo applique l’introspection de bas niveau et les design patterns pour l’analyse automatique du bean.

Le package java.beans.*; // descripteurs FeatureDescriptor displayName, shortDescription… BeanDescriptor classe du bean, customizer EventSetDescriptor Groupe des événements déclenchés sous forme d’invocation de méthodes sur une seule interface d’event listener PropertyDescriptor public void setPropertyEditorClass(Class propertyEditorClass) IndexedPropertyDescriptor MethodDescriptor ParameterDescriptor

Exemple d’introspection BeanInfo info =Introspector.getBeanInfo(SimpleBean.class); for (PropertyDescriptor pd : info.getPropertyDescriptors() ) System.out.println( pd.getName() );

Le package java.beans.*; //introspection IntrospectionException Introspector Recherche des BeanInfo via le nom de la classe complet (incluant le nom du package) + “BeanInfo” via le seul nom de la classe + “BeanInfo” recherche dans le chemin de recherche par défaut Dépendant de l’implémewntation public static void setBeanInfoSearchPath(String path[]) Réflexivité au bas niveau If a feature's getter (for example, getMethodDescriptor()) method returns null, low-level reflection is then used for that feature.

Personnalisation (Customization) Personnaliser l’aspect et le comportement d’un JavaBean Feuille de propriétés il y a un éditeur de propriétés pour chaque propriété Customizer contrôle la personnalisation du bean par exemple, un wizard

Editeur de propriétés une classe qui fournit un certain nombre de façons de lire écrire qui sera instanciée en tant que partie d’une feuille de propriétés en tant que champ d’un composant customizer plus complexe la valeur de la propriété

Déterminer les éditeurs de propriétés Java.beans.PropertyEditorManager Registre d’éditeurs de propriétés établit une correspondance entre les types Java et les classes d’éditeurs de propriétés. Default PropertyEditors Java primitive types "boolean", "byte", "short", "int", "long", "float", and "double"; les classes java.lang.String. java.awt.Color, java.awt.Font. Pré-chargé avec les éditeurs pour les types de base de Java Recherche d’un éditeur éditeur de propriétés spécifiquement chargé BeanInfo, (propDescriptor.setPropertyEditorClass(MoleculeNameEditor.class) PropertyEditorManager nom complet (incluant le nom du package) + “Editor” chemin de recherche des packages public static synchronized String[] getEditorSearchPath() Par défaut pour le bean box, sun.beans.editors

Gestion des modifications Lorsqu’un éditeur de propriétés fait une modification, il devrait déclencher un événement “PropertyChange”. Les éditeurs de propriétés reçoivent un object qui représente la valeur courante de la propriété. Un éditeur de propriétés ne devrait pas modifier directement cet objet initial. Il devrait créer un nouvel objet qui reflète l’état modifié de la propriété. Lorsque l’éditeur déclenche un “PropertyChange” la couche supérieure du logiciel va détecter la modification, récupérer le nouvel objet, invoquer la méthode d’accès (set) appropriée du bean édité pour modifier son état. Modification indirecte d’une priopriété après chaque mise-à-jour, le gestionnaire de la feuille de propriétés devrait relire toutes les propriétés du bean édité.

La méthode getJavaInitializationString Les éditeurs d’applications peuvent utiliser cette méthode pour la génération du code source qui doit restaurer l’état d’un bean

Customizer BeanInfo.getBeanDescriptor().getCustomizerClass() Devrait hériter directement ou indirectement de la classe java.awt.Component. Devrait implémenter l’interface java.beans.Customizer. Chaque Customizer sera exécuté dans une fenêtre de dialogue AWT distincte. Il peut intégrer des éditeurs de propriétés pour éditer les valeurs du bean. Il est du ressort de chaque customizer d’appliquer les modifications au fur et à mesure ou d’en faire des “batchs” et de les appliquer en des points de contrôle déterminés

Le package Java.beans.*; // customizers interface Customizer Interface PropertyEditor la plupart des PropertyEditors n’ont besoin de supporter qu’un sous-ensemble des options possibles définies par cette interface. class PropertyEditorSupport class PropertyEditorManager

Java.beans.Beans Beans.instantiate(...) Serialized bean à partir d’une classe Applets  fournit un AppletContext par défaut Points de vue différents sur un JavaBean Beans. isInstanceOf(Object bean, Class<?> targetType) Beans.getInstanceOf(Object bean, Class<?> targetType) isGuiAvailable()

Java.beans.Beans Règles de programmation Beans.getInstanceOf et Beans.isInstanceOf ne jamais utiliser “instanceof” ou les “casts” pour naviguer entre les différents points de vue sur un bean. Ne pas supposer que l’objet résultant d’une invocation de Beans.getInstanceOf sera le même objet que l’objet passé en paramètre d’entrée. Ne pas supposer que l’objet résultant d’une invocation de Beans.getInstanceOf supportera les mêmes propriétés, événements ou méthodes que ceux du point de vue initial.

L’environnement d’un JavaBean java.beans.Visibility permet au contenant d’informer un bean qu’il se trouve dans un environnement côté serveur seulement.

Livraison d’un bean JAR Fichier Manifest Name: wessex/wonder/bean.class Java-Bean: True Name: wessex/quaint/bean.ser Depends-On: wessex/wonder/bean.class Name: argle/Bargle.class Name argle/BargleBeanInfo.class Design-Time-Only: True

Référence [Sun, 1997] Sun Microystem, JavaBeans, Version 1.01, Graham Hamilton (Editor), July 24, 1997, http://java.sun.com/beans/beans.101.pdf

Alternate type views of a bean First release, each bean is a single Java object Future releases, support for beans that are implemented as a set of cooperating objects Type view = a view of a bean as a given type (class or interface) Programming rules Beans.getInstanceOf and Beans.isInstanceOf never use Java “instanceof” or Java casts to navigate between different type views of a bean. not assume that the result object of a beans.getInstanceOf call is the same object as the input object. not assume that the result object of a beans.getInstanceOf call supports the same properties, events, or methods supported by the original type view.