|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
OBSERVER ET OBSERVABLE EN RMI
Information sur la source
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
Fichier Zip
Pour les "Membres Club", vous pouvez 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
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
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
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|