La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Evénements Java Beans Java RMI X. BLANC & J. DANIEL

Présentations similaires


Présentation au sujet: "Evénements Java Beans Java RMI X. BLANC & J. DANIEL"— Transcription de la présentation:

1 Evénements Java Beans Java RMI X. BLANC & J. DANIEL

2 Les événements dans Java X. BLANC & J. DANIEL

3 Le modèle événementiel Les événements sont un moyen de communication alternatif entre deux objets. Les communications par événements sont asynchrones. Un objet lance un événement et un autre objet attrape cet événement. Exemples dévénements : click de sourie, changement dune base de donnée …

4 Le modèle événementiel

5 Le modèle événement de Java est tout objet. Le lanceur dévénement est un objet Le receveur dévénement est un objet Lévénement est un objet.

6 Exemple d'événement La classe JButton est capable de lancer lévénement java.awt.Event.ActionEvent Cet événement est lancé lorsque lon clique sur un bouton. Les classes capables de recevoir cet événement doivent implanter linterface java.awt.event.ActionListener Pour quun receveur (listener) se connecte à un lanceur, il doit appeler la méthode addActionListener() du lanceur. Lorsque le lanceur lance un événement, il appelle les méthodes actionPerformed(ActionEvent e) de l interface ActionListener

7 Exemple dévénement // la classe receveur public class MonListener implements java.awt.event.ActionListener { public void actionPerformed(ActionEvent e) { System.out.println(evenement recu !); } … // quelque part dans le programme, le lien entre le receveur et le lanceur java.swing.JButton button = new java.swing.JButton(click); … button.addActionListener(new MonListener());

8 Le Lanceur dévénements Un objet qui lance des événements doit proposer des méthodes pour que des receveurs puissent denregistrer. Ces méthodes sont toujours sous la forme addXXXListener() Où XXX est le type dévénement lancé. Lorsquil jette un événement, le lanceur le jette vers tout les objets qui se sont enregistrés. Les méthodes removeXXXListener() Permettent de ne plus enregistrer des objets.

9 L'événement Les événements doivent tous hériter de la classe java.util.Event Cette classe dispose de deux méthodes –public String toString() Cette méthode donne une représentation de l événement sous forme de chaîne de caractère (inintéressant). –public Object getSource() Cette méthode donne une référence vers lobjet qui a crée cet événement (très intéressant)

10 Le receveur dévénements Le receveur dévénement doit implanter linterface correspondant à lévénement. XXXListener Cette interface contient les méthodes appelées lorsque lévenement est jeté. Toutes ces interfaces héritent de linterface java.util.EventListener Cette interface na aucune méthode.

11 Architecture Il y a différents choix darchitecture possibles. –Soit une classe qui centralise tous les événements. Cette classe est le recepteur, elle implante toute les interface Listener. –Soit plusieurs classes receveur. Chaque receveur est lié avec un certain nombre de lanceur. –Soit une classe interne pour chaque événement.

12 ActionListener Cette interface doit être implantée par les receveurs dévénement Action public void actionPerformed(ActionEvent e) est la seule méthode de cette interface. ActionEvent est lobjet représentant un événement de type action. Ces événements sont jetés par les Button, List, Menu,...

13 WindowListener Cette interface doit être implantée par les receveurs dévénement Window public void windowActivated(WindowEvent e) public void windowClosed(WindowEvent e) public void windowIconified(WindowEvent e)... Sont des méthodes de cette interface. WindowEvent est lobjet représentant un événement de type window. Ces événements sont jeté par les Window, Frame...

14 MouseListener Cette interface doit être implantée par les receveurs dévénement Mouse public void mousePressed(MouseEvent e) public void mouseClicked(MouseEvent e) public void mouseExited(MouseEvent e)... Sont des méthodes de cette interface. MouseEvent est lobjet représentant un événement de type mouse. Ces événements sont jeté par les Window, Button,...

15 MouseMotionListener Cette interface doit être implantée par les receveurs dévénement MouseMotion public void mouseDragged(MouseEvent e) public void mouseMoved(MouseEvent e)... Sont des méthodes de cette interface. MouseEvent est lobjet représentant un événement de type sourie. Ces événements sont jeté par les Component, Button,...

16 KeyListener Cette interface doit être implantée par les receveurs dévénement Key public void keyPressed(KeyEvent e) public void keyReleased(KeyEvent e)... Sont des méthodes de cette interface. KeyEvent est lobjet représentant un événement de type key. Ces événements sont jeté par les List, Button, Frame...

17 FocusListener Cette interface doit être implantée par les receveurs dévénement Focus public void focusGained(FocusEvent e) public void FocusLost(FocusEvent e)... Sont des méthodes de cette interface. FocusEvent est lobjet représentant un événement de type focus. Ces événements sont jeté par les Component, Button,...

18 AdjustmentListener Cette interface doit être implantée par les receveurs dévénement Adjustement public void adjustmentValueChanged(AdjustmentEvent e) est la seule méthode de cette interface. AdjustmentEvent est lobjet représentant un événement de type adjustment. Ces événements sont jeté par les Scrollbar...

19 Les Adapter Lorsque lon veut créer un Listener il faut que la classe du listener implante toutes les méthodes de linterface. Cependant, il nest pas dit que toutes les méthodes nous intéresse. Ex : WindowListener (iconified, closed …) Les classes Adapter sont des classes abstraites qui implantent les interface Listener.

20 Exemple : MouseAdapter La classe java.awt.event.MouseAdapter implante linterface MouseListener Ainsi pour créer un recepteur de MouseEvent, il suffit de créer une classe qui hérite de MouseAdapter. Les autres adapter : –KeyAdapter –MouseAdpter –WindowAdapter –ContainerAdapter –...

21 Construire ses événements Le modèle événementiel de Java nest quune architecture. Pour créer ses propres événements il faut –Créer sa classe événement qui hérite de java.util.Event –Créer linterface Listener qui hérite de java.util.EventListener –Dans la classe lanceur créer les méthode pour inscrire les receveur. –Gérer le fait de lancer un événement.

22 Construire ses événements On ne peut pas créer de nouveaux événements graphiques. Le seul moyen est de les utiliser. Ou, en hériter.

23 Exercice Construire une classe Pile qui génère un événement de NewItem dès quun nouvel élément est inséré dans la pile.

24 Attention ce modèle est celui de AWT 1.1 Le modèle événementiel présenté ici est celui définie dans AWT 1.1 Le modèle événementiel de AWT 1.0 est tout à fait différent. Doù utilisation de jdk1.1.x ou jdk1.2.x

25 Java Beans X. BLANC & J. DANIEL

26 Java Beans Modèle de Composant auto-descriptif réutilisable principalement visuel java

27 Java Beans Construction dun Beans –Modèle Beans –Règles syntaxiques –Pacquage Déploiement dun Beans –Utilisation doutils graphiques Exécution dun Beans –programme classique

28 Construction dun Beans Modèle Beans et Règles de syntaxes

29 Modèle Beans Un Bean est une classe Cette classe doit être conforme au modèle Beans Ce modèle permet aux outils de découvrir les Beans Un Bean encapsule sa propre description =>Propriété générale des COMPOSANTS

30 Modèle Beans Un Beans est une classe Java Implante linterface java.io.Serializable Fournir un constructeur public sans argument Possède des propriétés Peu envoyer des événements

31 Propriétés du Bean Un Beans possède des propriétés Les propriétés dun Beans sont les aspects du Beans qui pourront être modifier lors du déploiement du Bean Ex: couleurDeFond, typeDeFont...

32 Propriétés Simples Laccès aux propriétés se fait par des méthodes set / get. Example : private int toto; // La propriete public int gettoto() { return toto;} //La syntaxe doit être respectée public void settoto(int value) { toto=value;} //idem Ces règles syntaxiques permettent aux outils de découvrir les méthodes.

33 Propriétés Indexées Les propriétés indexées public void setXXX(int index, type value); public void setXXX(type values[]); public type getXXX(int index); public type[] getXXX();

34 Propriétés Liées Les propriétés peuvent être liées: un changement dune propriété dun Beans entraîne un changement dune propriété dun autre Beans. Le lien entre deux propriétés est unidirectionnel. Il y a donc la propriété dépendante et la propriété lié. En fait, il y a la propriété lié et le bean qui contient la propriété dépendante. L utilisation dune propriété liée consiste plus particulièrement à notifier divers événements aux beans intéresséS.

35 Propriétés Liées Le Beans contenant la propriété liée import java.beans.*; private PropertyChangeSupport changes = new PropertyChangeSupport(this); public void addPropertyChangeListener( PropertyChangeListener l) { changes.addPropertyChangeListener(l); } public void removePropertyChangeListener(PropertyChangeListener l) { changes.removePropertyChangeListener(l); } public void setLabel(String newLabel) { String oldLabel = label; label = newLabel; sizeToFit(); changes.firePropertyChange("label", oldLabel, newLabel); }

36 Propriétés Liées Le Beans contenant la propriété dépendante public class MyClass implements java.beans.PropertyChangeListener, java.io.Serializable { … public void propertyChange(PropertyChangeEvent evt) {…}... }

37 Propriétés Contraintes Un propriété de Beans peut être contrainte. Les contraintes sont un cas particulier des propriétés liées, un bean peu émettre un veto sur le changement dune propriété contrainte. Les mécanismes de propriété contrainte sont similaires aux propriétés liées. –Les méthodes set doivent générer lexception PropertyVetoException

38 Propriétés Contraintes Le Beans qui contient la propriété contrainte import java.beans.*; private VetoableChangeSupport vetos = new VetoableChangeSupport(this); public void addVetoableChangeListener(VetoableChangeListener l) { vetos.addVetoableChangeListener(l)} public void removeVetoableChangeListener(VetoableChangeListener l){ vetos.removeVetoableChangeListener(l);} public void setPriceInCents(int newPriceInCents) throws PropertyVetoException { int oldPriceInCents = ourPriceInCents; vetos.fireVetoableChange("priceInCents",new Integer(oldPriceInCents), new Integer(newPriceInCents)); ourPriceInCents = newPriceInCents; changes.firePropertyChange("priceInCents",new Integer(oldPriceInCents), new Integer(newPriceInCents)); }

39 Propriétés Contraintes Beans émettant le veto public class MyClass implements VetoableChangeListener interface { …. void vetoableChange(PropertyChangeEvent evt) throws PropertyVetoException { …. }

40 Exercice Créer un Bean possédant les propriétés : –int a; –String b; Puis faite que a soit une propriété contrainte

41 Communication par événements Les Java Beans communique par événements. Un bean envoie un événement vers un bean capable de comprendre ce type dévénement Lorsquun bean génère des événements, il faut quil possède ces méthodes pour chacun des événements quil est capable de générer.: –public void add ( a) –public void remove (

42 Méthodes du bean Pour quun bean puisse offrir ces services, il faut que les méthodes soient public. public type nom_methode(parametre) {…}

43 Introspection Comment connaître un Java Bean

44 Principe Un bean est un composant qui va être manipulé par des outils graphiques. Le bean doit donc permettre à ces outils de savoir comment le bean fonctionne. Lintrospection permet de connaître les propriétés, les méthodes et les événements que manipule le bean.

45 Le package reflect Java propose une API pur découvrir une classe lors de lexécution. Ce qui permet dexécuter dynamiquement une méthode sur une classe. Le package reflect peut être utilisé pour n importe quelle classe Java, donc aussi pour les bean.

46 La classe Introspector Le package java.beans propose une autre manière de découvrir une classe Cette manière se fait à travers la classe Introspector. Lintrospection de Java Bean utilise la réflexion mais aussi les règles syntaxiques de Java Beans Lintrospection permet aussi dutiliser la classe BeanInfo pour décrire un Java Bean

47 Obtenir la référence vers un BeanInfo Si aucun BeanInfo na été proposé par le constructeur de bean, il en sera généré un automatiquement. MonBean mb = new MonBean(); BeanInfo bi = Introspector.getBeanInfo(mb.getClass());

48 La classe BeanInfo La classe BeanInfo est une interface qui contient toute les méthodes permettant de connaître un Bean. Un objet de type BeanInfo est retourné lors de lappel à lintrospector. Si, le bean possède un BeanInfo qui lui est propre, cette objet sera de ce type.

49 Des méthodes de la classe BeanInfo public MethodDescriptor[] getMethodDescriptors() public PropertyDescriptor[] getPropertyDescriptors() public EventSetDescriptor[] getEventSetDescriptors() public BeanDescriptor getBeanDescriptor()

50 Des méthodes de PropertyDescriptor public Class getPropertyType() public boolean isConstrained()...

51 Création dun BeanInfo Le nom de la classe BeanInfo doit être le nom du bean précédé de BeanInfo Ex: MonBeanBeanInfo Cette classe doit hériter de SimpleBeanInfo Re-écrire les méthodes que lon veut modifier.

52 Property Editors / Customizers Les Beans sont manipulés par un outil graphique. Cet outil va permettre de saisir les valeurs de bases des propriétés. Les Property Editors permettent de paramètrer la façon de saisir les informations dans loutil graphique. Les Customizers sont des composants graphiques qui vont être intégrés dans loutil pour la saisie des propriétés.

53 Exercice Proposer une méthode qui prend le nom dun Bean et qui affiche à lécran le nom de toutes les méthodes du bean.

54 Déploiement de Beans Utilisation de la Bean Box

55 Principe Nous avons vu quun bean était constitué de plusieurs classe Java. Cependant, ces classes forment un tout : le bean. Voilà pourquoi il faut archiver toutes les classes dans un seul fichier. Un fichier.jar

56 Le manifest du fichier Jar Dans tout archive.jar, il y a un fichier manifest.mnf qui décrit le contenu de larchive. Pour les Java Beans le manifest doit contenir: Name: toto.class Java-Bean: True

57 Le fichier Jar Pour archiver des classes dans un fichier Jar: jar cfm fichier.jar fichier.mnf liste_fichier ex:jar cfm toto.jar toto.mnf *.class

58 Java RMI X. BLANC & J. DANIEL

59 Principe de Java RMI Java RMI pour Java Remote Method Invocation Cest un façon pour faire communiquer deux classes situés sur deux machines différentes. Une classe située dans une machine virtuelle appelle la méthode dune classe située dans une autre machine virtuelle. Java RMI est une architecture Sun (contrairement à CORBA

60 Architecture de Java RMI ClientServeur Stub Skeleton Remote Reference Layer Transport Layer

61 Obtention du stub à lexécution Il faut disposer du stub de lobjet pour pouvoir invoquer des méthodes à distance. Si on ne dispose pas du stub, il est possible de lobtenir au moment de lutilisation de lobjet. –La classe implantant le stub est rechercher en locale –Si la classe nest pas trouvée en locale, on la cherche sur le site distant –Le stub est transmis au poste client puis chargé par le client lui- même Ce mécanisme est automatiquement géré par Java.

62 Définir une interface distante Java Une interface distante décrit un objet distant. Elle doit hériter de java.rmi.Remote Cette interface identifie le décrit le type des objets répartis Toute les méthodes qui constituent linterface distante doivent pouvoir générer une exception de type RemoteException

63 Exemple dinterface Import java.rmi.*; public interface Calculatrice extends Remote { public add(int a, int b) throws RemoteException; }

64 Implanter une interface On définie une classe qui implante linterface distante. Cette classe doit hériter de UnicastRemoteObject import java.rmi.*; import java.rmi.server.*; public class CalculatriceImpl extends UnicastRemoteObject Implements Calculatrice { public int add(int a, int b) throws RemoteException { return a+b;} }

65 Rendre accessible un serveur Pour cela on doit : –créer un manager de sécurité –ajouter le serveur a ceux disponible sous Java RMI (bind) public static void main(String args[]) { try { System.setSecurityManager(new RMISecurityManager()); CalculatriceImpl calc = new CalculatriceImpl(); String nom = "Calculatrice"; Naming.rebind(nom.calc); } catch (Exception ex) {…} }

66 Générer le stub et le skeleton Pour cela, on utilise le compilateur rmic fourni avec Java. Les arguments de rmic sont identiques à ceux de javac La génération du stub et du skeleton s effectue à partir de la classe dimplantation rmic CalculatriceImpl

67 Développer un client Le client est une classe traditionnelle qui va utiliser le service de désignation de Java RMI pour retrouver le serveur auquel il souhaite accéder. Le service de désignation va retourner une référence sur lobjet (RemoteObject) qui devra être convertie vers lobjet que lon souhaite utiliser (cast). Lopération qui retourne le serveur prend en paramètre une sorte d URL (//host/name).

68 Exemple de client Import java.rmi.*; public class CalculatriceClient { public static void main(String args[]) { String serverName = "Calculatrice"; CalculatriceInterface calc; try { calc = (CalculatriceInterface) Naming.lookup(serveurName.toString()); System.out.println(" 6+2= "+calc.add(6,2); } catch (RemoteException ex) {…} catch (Exception e) {…} }

69 Exécuter lapplication répartie On doit en premier lieux, lancer le service de désignation de Java RMI (rmiregistry) sur la machine ou se situ le serveur Ce service doit connaître lendroit où les classes sont accessibles (cest à dire que le CLASSPATH doit être positionné avent le lancement de lutilitaire. On lance ensuite le serveur, puis le client

70 Exercice Créer une classe accessible à distance. Cette classe sera une pile.

71 Sérialisation des objets La sérialisation est un mécanisme utilisé pour lencodage et décodage des paramètres lors dun appel distant. En particulier, dans le cas ou lon devrait passer une structure de données particulière lors dun appel, notre structure devrait supporter la notion de sérialisation pour pouvoir être transmise (c est à dire implanter linterface java.io.Serializable).

72 Les exceptions avec Java RMI Toutes les méthodes dune interface doivent signaler lexception RemoteException car: –il peut survenir un problème lors dune communication client/serveur : dans ce cas, cest RMI qui généra cette exception. Toutes les exceptions définies par lutilisateur devront hériter de la classe RemoteException.

73 Garbage collector dobjets distants De façon à maintenir une cohérence dans la modèle Java. Java RMI dispose dun mécanisme de garbage collection dobjets distants Ce mécanisme utilise un algorithme complexe qui maintient un liste de toutes les références à des objets distants. Un protocole entre les références d objets permet lincrémentation et la décrémentation des références. Ainsi, RMI assure un compteur de référence pour chaque objet distant, lorsque le compteur arrive à 0, lobjet est alors détruit. La méthode finalize est bien entendue appelée au moment de la destruction de l objet.


Télécharger ppt "Evénements Java Beans Java RMI X. BLANC & J. DANIEL"

Présentations similaires


Annonces Google