IMPLÉMENTATION MVC actuelle de Java

Documents pareils
RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

RMI le langage Java XII-1 JMF

Programmer en JAVA. par Tama

Calcul Parallèle. Cours 5 - JAVA RMI

Remote Method Invocation en Java (RMI)

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Remote Method Invocation (RMI)

Programmation Par Objets

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

Corrigé des exercices sur les références

Remote Method Invocation Les classes implémentant Serializable

Programmation Objet Java Correction

Intergiciel - concepts de base

Par Laurent DESECHALLIERS. Mastère Spécialisé en Management de Projets en Milieu Industriel. CESI de Rouen Promotion 2002/2003.

Synchro et Threads Java TM

Architecture Orientée Service, JSON et API REST

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Objets et Programmation. origine des langages orientés-objet

Design patterns. Design patterns - définition. Design patterns - avantages

Un ordonnanceur stupide

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Conception de serveurs d'applications ouverts

Interfaces graphiques avec l API Swing

Alfstore workflow framework Spécification technique

Programmation répartie RPC & RMI

Développement Logiciel

Premiers Pas en Programmation Objet : les Classes et les Objets

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Programmation avec des objets : Cours 7. Menu du jour

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Programmation réseau avec Java. 3/7 RMI, un peu de sécurité et CORBA

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Java - RMI Remote Method Invocation. Java - RMI

Dis papa, c est quoi un bus logiciel réparti?

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

F. Barthélemy. 17 mai 2005

A DESTINATION DES SERVICES TIERS. Editeurs d applications et ressources pédagogiques connectées à l ENT

PROGRAMMATION PAR OBJETS

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Chapitre 10. Les interfaces Comparable et Comparator 1

Threads. Threads. USTL routier 1

LOG4430 : Architecture logicielle et conception avancée

Applet pour visualiser les variables «automate» notifiées

Auto-évaluation Programmation en Java

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Projet de programmation (IK3) : TP n 1 Correction

INITIATION AU LANGAGE JAVA

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Cours 14 Les fichiers

Package Java.util Classe générique

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

OpenPaaS Le réseau social d'entreprise

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Généralités sur le Langage Java et éléments syntaxiques.

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

Chapitre VI- La validation de la composition.

Programmation par les Objets en Java

Gestion distribuée (par sockets) de banque en Java

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Java et les annotations

TD/TP PAC - Programmation n 3

Modèle client-serveur Plan. Modèle client-serveur. Modèle client-serveur définition. Modèle client-serveur communication par messages.

Introduction au langage Java

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

TD/TP PAC - Programmation n 3

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Cours 1: Java et les objets

Création d objet imbriqué sous PowerShell.

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Java DataBaseConnectivity

Une introduction à Java

La gestion des exceptions

Création d une application JEE

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

INF 321 : mémento de la syntaxe de Java

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Composants Logiciels. Le modèle de composant de CORBA. Plan

Langage Java. Classe de première SI

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

TP Programmation Java / JDBC / Oracle

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

Implementing a simple RMI Application over the Internet (using and comparing HTTP tunneling, RMI Proxy)

Héritage presque multiple en Java (1/2)

Programme Compte bancaire (code)

2 Chapitre 1 Introduction

Plan du cours. Historique du langage Nouveautés de Java 7

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Certificat Big Data - Master MAthématiques

ETUDE DE CAS en UML : GESTION DES COMMANDES DE PIECES FABRIQUEES PAR LA SOCIETE C

Transcription:

1 IMPLANTER LE PARADIGME MVC AVEC RMI UNE SOLUTION (AVEC REDÉFINITION COMPLÈTE DE L IMPLÉMENTATION MVC DE JAVA) : IMPLÉMENTATION MVC actuelle de Java MonModèle Observable MonInterfaceModèle NOUVELLE IMPLÉMENTATION MVC/RMI pour Java MonModèleImpl MonModèle MvcModel MvcModelAbstract MonContrôleur1 Observer MonContrôleur2 Observer ItemListener MonContrôleur3 Observer TextListener MonContrôleur1 MvcControlerView MonContrôleur2 MvcControlerView ACTIONS de l UTILISATEUR (souris / clavier) ACTIONS de l UTILISATEUR (souris / clavier) MaVue1 MaVue1 MaVue2 MaVue3 MaVue1 MaVue1 MaVue2 <T,U,V> JVM 1 : SERVEUR MonContrôleur3 MvcControlerView JVM 2 : CLIENT MaVue3 De plus, les classes et interfaces ont été paramétrées à l aide de types génériques pour faciliter l utilisation de la classe qui permet de fournir aux contrôleurs une description de ce qui a changé dans le modèle.

Action de l utilisateur sur les composants actifs de l interface graphique Transmission au modèle (vu au travers de son interface) de l action à effectuer Notification à tous les contrôleurs inscrits d un changement du modèle Mise à jour des vues en fonction des modifications du modèle (par utilisation de ) 2 DIAGRAMME d ACTIVITÉ (UML) Client JVM 2 Serveur JVM 1 Client JVM 3 Vues ACTION de l UTILISATEUR (souris / clavier) Vue [actualisée] Contrôleurs Réception de l action Mise à jour des Mise vues à jour des vues [paramètres] Modèle Demande d action au modèle Notification de mise à jour à tous les contrôleurs clients Modèle [modifié] Contrôleurs [paramètres] Mise à jour des vues Diagramme d'activités : sémantique UML permet de représenter graphiquement le comportement d'une méthode ou le déroulement d'un cas d'utilisation, à l'aide de diagrammes d'activités (une variante des diagrammes d'états-transitions). Une activité représente une exécution d'un mécanisme, un déroulement d'étapes séquentielles. Le passage d'une activité vers une autre est matérialisé par une transition. Les transitions sont déclenchées par la fin d'une activité et provoquent le début immédiat d'une autre (elles sont automatiques). En théorie, tous les mécanismes dynamiques pourraient être décrits par un diagramme d'activités, mais seuls les mécanismes complexes ou intéressants méritent d'être représentés. Afin d'organiser un diagramme d'activités selon les différents responsables des actions représentées, il est possible de définir des "couloirs d'activités". Il est même possible d'identifier les objets principaux, qui sont manipulés d'activités en activités et de visualiser leur changement d'état.

3 public interface MvcControlerView extends java.rmi. { public void update(mvcmodel mod, W wc) throws java.rmi.exception ; public interface MvcModel extends java.rmi. { public void addcontroler(mvccontrolerview cv) throws java.rmi.exception ; public boolean deletecontroler(mvccontrolerview cv) throws java.rmi.exception ; public void deletecontrolers() throws java.rmi.exception ; public void notifycontrolers() throws java.rmi.exception ; public void notifycontrolers(w wc) throws java.rmi.exception ; public int countcontrolers() throws java.rmi.exception ; public void clearchanged() throws java.rmi.exception ; public boolean haschanged() throws java.rmi.exception ; public void setchanged() throws java.rmi.exception ; public abstract class MvcModelAbstract implements MvcModel { protected java.util.arraylist<mvccontroleurview> mvclist; protected boolean changed; public MvcModelAbstract() { mvclist = new java.util.arraylist<mvccontroleurview>(); changed = false; public void addcontroler(mvccontrolerview cvw) mvclist.add(cvw); public boolean deletecontroler(mvccontrolerview cvw) return mvclist.remove(cvw); public void deletecontrolers() mvclist.clear();

public void notifycontrolers() notifycontrolers(null); 4 public void notifycontrolers(w w) ArrayList<MvcControlerView> supplist = null; // Envoi des update à des MvcControlerView // et non seulement à des MvcControlerView! for( MvcControlerView mvc : mvclist ) { try { mvc.update(this, w); // Invocation de l'od-méthode // ICI: on peut vouloir supprimer le contrôleur non valide // de la liste des contrôleurs du modèle pour qu'il // ne provoque plus d'erreur inutile la prochaine fois. catch ( NoSuchObjectException e) { // Peut arriver quand le client a été fermé! if ( supplist == null ) { supplist = new ArrayList<MvcControlerView>(); supplist.add(mvc); System.out.println("MvcModelAbstract(notifyControlers): "); System.out.println(" Contrôleur inconnu : "+e.getmessage()); catch ( Exception e) { // Peut arriver pour des raisons de communication réseau if ( supplist == null ) { supplist = new ArrayList<MvcControlerView>(); supplist.add(mvc); System.out.println("MvcModelAbstract(notifyControlers) : "); System.out.println(" Contrôleur inaccessible : "+e.getmessage()); // Suppression des contrôleurs inconnus! if ( supplist!= null ) { for( MvcControlerView mvc : supplist ) { deletecontroler(mvc); System.out.println("MvcModelAbstract(notifyControlers) : " + "suppression de " + supplist.size() + " contrôleur(s)"); public int countcontrolers() return mvclist.size(); public boolean haschanged() return changed; public void setchanged() changed = true;

5 public void clearchanged() throws java.rmi.exception { changed = false; /** * Créer un service de résolution de noms pour la JVM courante */ protected boolean createregistry(int portserveur) { try { System.out.print("SERVEUR création du registry :"); // Créer un service de noms pour la JVM courante LocateRegistry.createRegistry (portserveur) ; // Trouve le service de résolution de noms de RMI registry = LocateRegistry.getRegistry(portServeur); System.out.println(" OK"); return true; catch (Exception e) { System.out.println(" ERREUR"); System.out.println( " Warning dans createregistry : " + e.getmessage()); return false; /** * Exporte le STUB serveur (this) * et l'enregistre dans rmiregistry sous le nom nameod. */ protected boolean registermodel(int portserveur, String nameod) { try { System.out.print("SERVEUR enregistrement du modèle :"); // Exporte le modèle dans rmiregistry // ICI, le STUB est créé dynamiquement // par l'usage de exportobject(, int) // plutôt que exportobject() UnicastObject.exportObject(this, portserveur); // Enregistre le nom et la référence distante (Stub) registry.rebind(nameod, this); System.out.println(" OK : "+nameod); return true; catch (Exception e) { System.out.println(" ERREUR"); System.out.println( " Warning dans registermodel : " + e.getmessage()); return false;

6 public class <T,U,V> { public final String mess; public T t; public U u; public V v; public () { this.mess = null; public (String mess) { public (String mess, T t) { this.t = t; public (String mess, T t, U u) { this.t = t; this.u = u; public (String mess, T t, U u, V v) { this.t = t; this.u = u; this.v = v;