begin process at 2012 02 15 12:00:13
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Api

 > OBSERVER ET OBSERVABLE EN RMI

OBSERVER ET OBSERVABLE EN RMI


 Information sur la source

Note :
Aucune note
Catégorie :Api Classé sous :observer, observable, rmi Niveau :Débutant Date de création :23/01/2006 Vu / téléchargé :10 395 / 1 072

Auteur : indiana_jules

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

L'observer et l'observable sert à modéliser des vues et de faire des actions communes sur chacune. Anisi, dans le cadre d'un client/serveur, les données qui ont changées par un utilisateur seront apparents pour les autres utilisateurs (notion de rafraîchissement de données). Or le problème, en RMI, c'est que ces deux classes sympathiques ne peuvent pas fonctionner. Ainsi, j'ai fait un petit package util et fonctionnel (utilisation de Publishing et de Subscribing).

Voilà

Source

  • /*
  • * Created on 22 janv. 2006
  • *
  • * TODO To change the template for this generated file go to
  • * Window - Preferences - Java - Code Style - Code Templates
  • */
  • package observer;
  • import java.io.Serializable;
  • import java.rmi.Remote;
  • import java.rmi.RemoteException;
  • /**
  • * @author Julien
  • *
  • * TODO To change the template for this generated type comment go to
  • * Window - Preferences - Java - Code Style - Code Templates
  • */
  • public interface Subscriber extends Remote, Serializable {
  • public void update(Object pub, Object code) throws RemoteException;
  • }
  • /////////////////////////////////////////////////////////////////////////////////
  • /*
  • * Created on 22 janv. 2006
  • *
  • * TODO To change the template for this generated file go to
  • * Window - Preferences - Java - Code Style - Code Templates
  • */
  • package observer;
  • import java.rmi.Remote;
  • import java.rmi.RemoteException;
  • /**
  • * @author Julien
  • *
  • * TODO To change the template for this generated type comment go to
  • * Window - Preferences - Java - Code Style - Code Templates
  • */
  • public interface Publisher extends Remote {
  • public void addSubscriber(Subscriber s) throws RemoteException;
  • public void notifyAllSubscribers()throws RemoteException;
  • public void removeSubscriber(Subscriber s) throws RemoteException;
  • public void removeAllSubscribers() throws RemoteException;
  • }
  • /////////////////////////////////////////////////////////////////
  • /*
  • * Created on 22 janv. 2006
  • *
  • * TODO To change the template for this generated file go to
  • * Window - Preferences - Java - Code Style - Code Templates
  • */
  • package observer;
  • import java.io.Serializable;
  • import java.rmi.RemoteException;
  • import java.rmi.server.UnicastRemoteObject;
  • import java.util.Enumeration;
  • import java.util.Vector;
  • /**
  • * @author Julien
  • *
  • * TODO To change the template for this generated type comment go to
  • * Window - Preferences - Java - Code Style - Code Templates
  • */
  • public class BasicPublisher extends UnicastRemoteObject implements Publisher, Serializable {
  • private Vector subscribers;
  • public BasicPublisher() throws RemoteException {
  • subscribers = new Vector();
  • }
  • public void addSubscriber(Subscriber s) throws RemoteException {
  • subscribers.addElement(s);
  • }
  • public void notifyAllSubscribers() throws RemoteException {
  • notifySubscribers(null);
  • }
  • public void removeSubscriber(Subscriber s) throws RemoteException {
  • subscribers.removeElement(s);
  • }
  • public void removeAllSubscribers() throws RemoteException {
  • subscribers.removeAllElements();
  • }
  • public void notifySubscribers(Object pub, Object code) {
  • Vector deadSubs = null;
  • Enumeration e = subscribers.elements();
  • while (e.hasMoreElements()) {
  • Subscriber s = (Subscriber) e.nextElement();
  • try {
  • s.update(pub, code);
  • }
  • catch (java.rmi.ConnectException ce) { //serious
  • if (deadSubs == null) deadSubs = new Vector();
  • deadSubs.addElement(s);// must be dead
  • }
  • catch (java.rmi.NoSuchObjectException nsoe){ //serious
  • if (deadSubs == null) deadSubs = new Vector();
  • deadSubs.addElement(s);// must be dead
  • }
  • catch (java.rmi.RemoteException re) {
  • /*might recover?*/
  • }
  • }
  • if (deadSubs != null) {
  • e = deadSubs.elements();
  • while (e.hasMoreElements()) {
  • Subscriber s = (Subscriber) e.nextElement();
  • try {
  • removeSubscriber(s); // forget this subscriber
  • } catch (RemoteException e1) {
  • // TODO Auto-generated catch block
  • e1.printStackTrace();
  • }
  • }
  • }
  • }
  • public void notifySubscribers(Object pub) throws RemoteException {
  • notifySubscribers(pub, null);
  • }
  • }
  • /////////////////////////////////////////////////////////////////////////
  • /*
  • * Created on 22 janv. 2006
  • *
  • * TODO To change the template for this generated file go to
  • * Window - Preferences - Java - Code Style - Code Templates
  • */
  • package observer;
  • import java.io.Serializable;
  • import java.rmi.RemoteException;
  • import java.rmi.server.UnicastRemoteObject;
  • /**
  • * @author Julien
  • *
  • * TODO To change the template for this generated type comment go to
  • * Window - Preferences - Java - Code Style - Code Templates
  • */
  • public class Publishing extends UnicastRemoteObject implements Publisher, Serializable {
  • BasicPublisher pub;
  • public Publishing() throws RemoteException {
  • pub = new BasicPublisher();
  • }
  • /** Delegate Publisher interface to BasicPublisher */
  • public void addSubscriber(Subscriber s) throws RemoteException {
  • pub.addSubscriber(s);
  • }
  • public void notifyAllSubscribers() throws RemoteException{
  • pub.notifyAllSubscribers();
  • }
  • public void removeSubscriber(Subscriber s) throws RemoteException{
  • pub.removeSubscriber(s);
  • }
  • public void removeAllSubscribers() throws RemoteException {
  • pub.removeAllSubscribers();
  • }
  • }
  • ////////////////////////////////////////////////////////////////////////
  • /*
  • * Created on 22 janv. 2006
  • *
  • * TODO To change the template for this generated file go to
  • * Window - Preferences - Java - Code Style - Code Templates
  • */
  • package observer;
  • import java.lang.reflect.*;
  • import java.rmi.RemoteException;
  • import java.rmi.server.UnicastRemoteObject;
  • /**
  • * @author Julien
  • *
  • * TODO To change the template for this generated type comment go to
  • * Window - Preferences - Java - Code Style - Code Templates
  • */
  • public class Subscribing extends UnicastRemoteObject implements Subscriber {
  • //Variables globales
  • private Method methode;
  • private Object instance;
  • private Object[] params;
  • public Subscribing(Object instance, Method methode, Object[] params) throws RemoteException {
  • this.instance = instance;
  • this.methode = methode;
  • this.params = params;
  • this.methode.setAccessible(true);
  • }
  • /* (non-Javadoc)
  • * @see dico.observer.Subscriber#update(java.lang.Object, java.lang.Object)
  • */
  • public void update(Object pub, Object code) throws RemoteException {
  • // TODO Auto-generated method stub
  • try{
  • methode.invoke(instance, params);
  • }
  • catch(Exception e){
  • }
  • }
  • }
/*
 * Created on 22 janv. 2006
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package observer;

import java.io.Serializable;
import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 * @author Julien
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public interface Subscriber extends Remote, Serializable { 
	public void update(Object pub, Object code) throws RemoteException; 
} 

/////////////////////////////////////////////////////////////////////////////////
/*
 * Created on 22 janv. 2006
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package observer;

import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 * @author Julien
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public interface Publisher extends Remote { 
	public void addSubscriber(Subscriber s) throws RemoteException;
	public void notifyAllSubscribers()throws RemoteException;
	public void removeSubscriber(Subscriber s) throws RemoteException; 
	public void removeAllSubscribers() throws RemoteException; 
}
/////////////////////////////////////////////////////////////////
/*
 * Created on 22 janv. 2006
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package observer;

import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Enumeration;
import java.util.Vector;

/**
 * @author Julien
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class BasicPublisher extends UnicastRemoteObject implements Publisher, Serializable { 
	private Vector subscribers;
	
	public BasicPublisher() throws RemoteException {
		subscribers = new Vector();
	}
	
	public void addSubscriber(Subscriber s) throws RemoteException { 
		subscribers.addElement(s); 
	}
	public void notifyAllSubscribers() throws RemoteException {
		notifySubscribers(null);
	}
	public void removeSubscriber(Subscriber s) throws RemoteException { 
		subscribers.removeElement(s); 
	} 
	public void removeAllSubscribers() throws RemoteException { 
		subscribers.removeAllElements(); 
	} 
	public void notifySubscribers(Object pub, Object code) { 
		Vector deadSubs = null; 
		Enumeration e = subscribers.elements(); 
		while (e.hasMoreElements()) { 
			Subscriber s = (Subscriber) e.nextElement();
			try { 
				s.update(pub, code);
			} 
			catch (java.rmi.ConnectException ce) { //serious 
				if (deadSubs == null) deadSubs = new Vector(); 
				deadSubs.addElement(s);// must be dead 
			} 
			catch (java.rmi.NoSuchObjectException nsoe){ //serious 
				if (deadSubs == null) deadSubs = new Vector(); 
				deadSubs.addElement(s);// must be dead 
			} 
			catch (java.rmi.RemoteException re) { 
				/*might recover?*/ 
			} 
		} 
		if (deadSubs != null) { 
			e = deadSubs.elements(); 
			while (e.hasMoreElements()) { 
				Subscriber s = (Subscriber) e.nextElement(); 
				try {
					removeSubscriber(s);  // forget this subscriber 
				} catch (RemoteException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			} 
		} 
	} 
	public void notifySubscribers(Object pub) throws RemoteException { 
		notifySubscribers(pub, null); 
	} 
}
/////////////////////////////////////////////////////////////////////////
/*
 * Created on 22 janv. 2006
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package observer;

import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

/**
 * @author Julien
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class Publishing extends UnicastRemoteObject implements Publisher, Serializable { 
	  BasicPublisher pub; 
	  
	  public Publishing() throws RemoteException {
	  	pub = new BasicPublisher();
	  }
	  
	  /** Delegate Publisher interface to BasicPublisher */ 
	  public void addSubscriber(Subscriber s) throws RemoteException { 
	    pub.addSubscriber(s);
	  }
	  public void notifyAllSubscribers() throws RemoteException{
	  	pub.notifyAllSubscribers();
	  }
	  public void removeSubscriber(Subscriber s) throws RemoteException{ 
	    pub.removeSubscriber(s); 
	  } 
	  public void removeAllSubscribers() throws RemoteException { 
	    pub.removeAllSubscribers(); 
	  }  
}
////////////////////////////////////////////////////////////////////////
/*
 * Created on 22 janv. 2006
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package observer;
import java.lang.reflect.*;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

/**
 * @author Julien
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class Subscribing extends UnicastRemoteObject implements Subscriber {
	//Variables globales
	private Method methode;
	private Object instance;
	private Object[] params;
	
	public Subscribing(Object instance, Method methode, Object[] params) throws RemoteException {
		this.instance = instance;
		this.methode = methode;
		this.params = params;
		this.methode.setAccessible(true);
	}
	
	/* (non-Javadoc)
	 * @see dico.observer.Subscriber#update(java.lang.Object, java.lang.Object)
	 */
	public void update(Object pub, Object code) throws RemoteException {
		// TODO Auto-generated method stub
		try{
			methode.invoke(instance, params);
		}
		catch(Exception e){
			
		}
	}
}


 Conclusion

Enjoy it :D

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

UNE SEULE INSTANCE DE PROGRAMME SANS SOCKET
Source avec Zip JMF ET RTP
Source avec Zip Source avec une capture JTABBEDPANE FERMABLE AVEC GESTION DU DRAG AND DROP
Source avec Zip Source avec une capture HEADER POUR LES LIGNES D'UNE JTABLE
LIRE ET ÉCRIRE UN FICHIER BMP

 Sources de la même categorie

Source avec une capture AUTO FOLLOW/UNFOLLOW AVEC JTWITTER/OAUTHSIGNPOSTCLIENT ET SW... par GeroXXXX
Source avec Zip LOGICIEL MESSAGERIE par layeure
Source avec Zip Source avec une capture CRÉER DES GRAPHIQUES : UTILISATION DE JFREECHART par Julien39
EJB3-BEAN ENTITÉ : RELATIONS BIDIRECTIONNELLES par SoftDeath
Source avec Zip Source avec une capture LETMESEE : CAPTURE D'ÉCRAN À INTERVALLE RÉGULIER : UTILISATI... par pyo656

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture JBOXIKON PORTAGE DE BOXIKON par ulm950
Source avec Zip Source avec une capture CAFE MONNAIE SUR SERVEUR EN RMI par sergetoure
Source avec Zip Source avec une capture OBSERVABLE DANS L'EDT (EVITE LE RECOURS À SWINGUTILITIES.INV... par pouicky
Source avec Zip COURS - EXEMPLE D'UTILISATION DE RMI (REMOTE METHOD INVOCATI... par lambdacrash
Source avec Zip CALCUL DE MATRICES A DISTANCE RMI JAVA par Abdellah81

Commentaires et avis

Commentaire de akandras le 03/02/2006 13:32:05

Nikel Le code qu'il me faut !!

Juste un petit reproche, les commentaires !!!!!!!!
J'aurai voulu des petites précisions sur la correspondance avec les classes observer/Observable, un petit résumé de chaque classe, ...

Enfin des commentaires qui aurait évité de reprendre à zéro ton code et d'imaginer un exemple tout bete d'utilisation basic d'un modele MVC avec RMI.

D'ailleurs j'ai toujours pas fini de comprendre ton code...

Commentaire de akandras le 03/02/2006 23:37:19

Pour plus d'informations sur les classes publisher/subscriber

allez voir là : http://jdj.sys-con.com/read/35878.htm

C'est en anglais, mais le vocabulaire est pas compliqué

bonne lecture.

Commentaire de indiana_jules le 17/02/2006 12:41:58

j'en suis desole, j'avais fait ca rapidement lors d'un weekend afin de trouver une solution pratique pour un projet, je n'avais donc pas mis les commentaires.
Grosso modo le Subscriber est l'observer et le Publisher l'observable.
Le Publishing sert de gestion des Subscriber qui sont sur les clients (le publishing se situe dans le serveur)

voilà

Commentaire de titoss87 le 18/08/2010 14:18:48

MERCI POUR Le code source c intéressant , mais est ce que vous pouver nous indiquer comment exécuter ce code (le main)

Commentaire de arafat877 le 14/01/2011 19:38:28

salut !

Je veux adapter ton code pour mon projet.

Il s'agit d'une application client/serveur qui est basé sur Spring RMI, le client contient une JTable, je veux lors ce que un utilisateur A apporte des changements à la table par le bais d'un formulaire, les autres doivent voire les dits changements, sans cliquer sur un bouton par exemple.

et comme tu le sais, en Spring RMI, on n'ai pas amener à dériver les classes Remote, ni UnicastRemoteObject.

il faut juste déclarer une interface, et une classe qui va l'implémenter, puis donner la main à Spring afin qu'il publie le service, et de l'autre côté il faut déclarer la même interface et une classe l'implémentant, puis donner la main à Spring afin d'établir la connexion avec le serveur.

prière de bien vouloir lire ces articles :
http://static.springsource.org/spring/docs/2.0.x/reference/remoting.html
http://cosminaru.ro/blog/2006/11/02/spring-by-examples-rmi/

Ma question comment adapter ta solution, pour Spring ?

Cordialement

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

RMI [ par Aldee ] Quelle configuration minimum me faut-il pour tester une liaison RMI? Un/Deux ordinateur "basique" avec Java, deux cartes reseaux et une ficelle entre? java rmi [ par scorpionetoile ] salut a toutje veus tester un petit exemple en java utilisant rmi,je l'ai execute sur mon poste mais le problemec'est que je veus l'executer sur 2 pos RMI REGISTRY [ par efr ] efrEst il possible de m'expliquer comment fonctionne la méthode Http Post avec RMI pour eviter les firewalls envoyer un fichier en RMI [ par lutecefalco ] Salut à tous,j'ai à disposition un serveur avec le logiciel R d'installé dessus.A partir de mon PC, je génère un script et je dois l'envoyer en RMI su Communication RMI [ par homersimp ] J'aimerai relié une applet et une servlet. Mais comme la communication RMI ne marche pas toujours, je voudrais que l'applet essaie d'abord de ce conn Rmi et Jnlp [ par homersimp ] Mon but est de réaliser une applet dans un fichier jnlp, qui devrait se connecter à une servlet sur serveur(avec exemple de DaytimeServer et applet.Si RMI et Visual J++ [ par egamir ] J'ai développé une classe java "client.java" avec la SDK de sun (qui s'exécute parfaitement avec la jvm de sun).Cette classe importe le package java.r RMI et Visual J++ [ par egamir ] J'ai développé une classe java "client.java" avec la SDK de sun (qui s'exécute parfaitement avec la jvm de sun).Cette classe importe le package java.r Problème JAVA RMI Hello World [ par missgaelle ] Bonsoir à tous,Voilà, je viens de créer un hello world en JAVA avec rmi...ah oui, détail importante, je ne suis qu'un mini débutante en prog, on me de RMI => Problemes d'IPs [ par Bulzebok ] J'ai chez moi 2 PC, l'un et mon PC usuel et l'autre et simplement une passerel pour allez sur le NET et qui tourne en permanence et ki soulage le prem


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,248 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales