Evnements Java Beans Java RMI - PowerPoint PPT Presentation

1 / 73
About This Presentation
Title:

Evnements Java Beans Java RMI

Description:

Les v nements sont un moyen de communication alternatif entre deux objets. ... qu'un receveur (listener) se connecte un lanceur, il doit appeler la m thode ... – PowerPoint PPT presentation

Number of Views:122
Avg rating:3.0/5.0
Slides: 74
Provided by: Bla8153
Category:
Tags: rmi | appeler | beans | evnements | java

less

Transcript and Presenter's Notes

Title: Evnements Java Beans Java RMI


1
Evénements Java BeansJava RMI
  • X. BLANC J. DANIEL
  • Xavier.Blanc_at_lip6.fr , Jerome.Daniel_at_der.edf.fr

2
Les événements dans Java
  • X. BLANC J. DANIEL
  • Xavier.Blanc_at_lip6.fr , Jerome.Daniel_at_der.edf.fr

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énementiel
  • 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.ActionEventCet
    événement est lancé lorsque lon clique sur un
    bouton.
  • Les classes capables de recevoir cet événement
    doivent implanter linterfacejava.awt.event.Actio
    nListener
  • Pour quun receveur (listener) se connecte à un
    lanceur, il doit appeler la méthodeaddActionListe
    ner()du lanceur.
  • Lorsque le lanceur lance un événement, il appelle
    les méthodesactionPerformed(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
    formeaddXXXListener()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éthodesremoveXXXListener() Permettent de
    ne plus enregistrer des objets.

9
L'événement
  • Les événements doivent tous hériter de la
    classejava.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.XXXListen
    er
  • Cette interface contient les méthodes appelées
    lorsque lévenement est jeté.
  • Toutes ces interfaces héritent de
    linterfacejava.util.EventListenerCette
    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(AdjustmentEven
    t 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
  • Xavier.Blanc_at_lip6.fr , Jerome.Daniel_at_der.edf.fr

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
    gtProprié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)
    totovalue //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 PropertyChangeSuppor
    t changes new PropertyChangeSupport(this)
  • public void addPropertyChangeListener(
    PropertyChangeListener l) changes.addPropertyC
    hangeListener(l)
  • public void removePropertyChangeListener(Property
    ChangeListener 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é
    contrainteimport java.beans.
  • private VetoableChangeSupport vetos new
    VetoableChangeSupport(this)
  • public void addVetoableChangeListener(VetoableCha
    ngeListener l)
  • vetos.addVetoableChangeListener(l)
  • public void removeVetoableChangeListener(Vetoable
    ChangeListener 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 addltEventListenerTypegt(ltEventListenerT
    ypegt a)
  • public void removeltEventListenerTypegt(ltEventListen
    erType a)

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 BeanInfoEx 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
  • exjar cfm toto.jar toto.mnf .class

58
Java RMI
  • X. BLANC J. DANIEL
  • Xavier.Blanc_at_lip6.fr , Jerome.Daniel_at_der.edf.fr

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
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 ab

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("  62  "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.
Write a Comment
User Comments (0)
About PowerShow.com