RMI

RMI - Java - Programmation

Marsh Posté le 08-07-2003 à 18:35:43    

salut à tous,
 
petite kestion pour le gens qui s'y connaissent en rmi.
 
je dois  faire une application qui est en meme temps serveur rmi et  ki fait des appels RMI sur d'autres site.
le site 1 fait un appel au site 2, le site fait un appel au site 3. comment faire pour  que le site 2 libère le site 1 car celui ci devra répondre a d'autres appels d'autres sites...
 
merci pour  votre aide et A+

Reply

Marsh Posté le 08-07-2003 à 18:35:43   

Reply

Marsh Posté le 08-07-2003 à 18:37:18    

Qu'entends par "libère" ?


---------------
Le site de ma maman
Reply

Marsh Posté le 08-07-2003 à 18:44:15    

Cherrytree a écrit :

Qu'entends par "libère" ?


 
probablement pour que l'appel ne soit pas synchrone. Tu peux implémenter une file d'attente tout simple sur la forme d'une list quelconque. Ton appel de méthode RMI n'a pour but que d'ajouter une demande d'appel sur le site 2 (ensuite la méthode retourne et ton site 1 est libéré). A coté de ca, dans ton serveur 2 tu as une thread qui regarde périodiquement si il y a des demandes dans la file d'attente. Si oui elle les traite (et peut ainsi faire une demnande sur un serveur 3 qui peut avoir le meme mécanisme). Ta demande peut se faire via un objet relativement simple. Mais fait bien attention à bien spécifier toutes les infos dont tu as besoin (qui a fait la demande, comment répondre, etc)
 
Si c'est pas clair n'hésite pas


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 08-07-2003 à 18:44:25    

je m'explique..
j'ai  3 site.
les 3 site se font des appels en "anneau".
1. site1 fait appel1 sur site 2
2. site2 fait appel1 sur site 3
3. site3 fait appel1 sur site 1
à ce moment j'ai un problème car mon site 1 qui devrait faire appel2 à site 2 ne fait plus rien. il est donc bloqué je suppose par le l'appel1 qu'il a fait au site2.
 
pour résumé ma kestion pourrait  etre :  
site1 fait appel1 sur site2. comment je sais  que site1 a eu le retour de sa fonction et peut ainsi continuer  son exécution (pour attendre d'autre appels)
est-ce plus clair ?

Reply

Marsh Posté le 08-07-2003 à 18:45:05    

j'avais bien compris :sol:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 08-07-2003 à 18:53:21    

darklord :  
tu veut dire que dans  chacunes de mes méthodes RMI je fais un traitement minimal (ajouter une requete de ce type en attente). ainsi le site n libère très vite le site n-1.
puis le site n peut faire son traitement et appeler des méthodes du site n+1 et le site  n-1 peut recevoir des appels.
 
je dois aussi préciser que tout mes sites sont identiques, il s'agit de l'implémentations d'un algorithme d'élection en anneaux.

Reply

Marsh Posté le 08-07-2003 à 19:06:15    

pifou_234 a écrit :

darklord :  
tu veut dire que dans  chacunes de mes méthodes RMI je fais un traitement minimal (ajouter une requete de ce type en attente). ainsi le site n libère très vite le site n-1.
puis le site n peut faire son traitement et appeler des méthodes du site n+1 et le site  n-1 peut recevoir des appels.
 
je dois aussi préciser que tout mes sites sont identiques, il s'agit de l'implémentations d'un algorithme d'élection en anneaux.


 
oui c'est ce que je veux dire. Tu peux meme introduire la notion de priorité si tu veux en faisant des classes de requete et en implémentant un scheduleur simple (comme Weigthed Round Robin par exemple)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 08-07-2003 à 19:41:03    

:heink: attend, y a du call-back en RMI !!!


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 08-07-2003 à 21:12:14    

benou a écrit :

:heink: attend, y a du call-back en RMI !!!  


 
 
bin je sais et alors :o
 
Edit: explique où tu veux en venir stp :o


Message édité par darklord le 08-07-2003 à 21:13:16

---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 08-07-2003 à 21:21:47    

y'a du call back oui..
mais si un appel a site 1 engendre un appel à site 2 qui engendre un appel à site 3 qui engendre un appel à site 1, ben le site un restera en attente du retour de son appel si comme dans mon cas les méthodes sont synchronized

Reply

Marsh Posté le 08-07-2003 à 21:21:47   

Reply

Marsh Posté le 08-07-2003 à 21:30:47    

pifou_234 a écrit :

dans mon cas les méthodes sont synchronized


ca mieux en le disant :o  
je peux pas deviner :/


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 08-07-2003 à 21:31:19    

DarkLord a écrit :


Edit: explique où tu veux en venir stp :o


ben là : que si elles avaient pas été synchronizées, y aurait pas eu de problème ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 08-07-2003 à 21:56:11    

benou a écrit :


ca mieux en le disant :o  
je peux pas deviner :/


excuse moi... c'est vrai que c'est un détail important

Reply

Marsh Posté le 08-07-2003 à 22:06:19    

pifou_234 a écrit :


excuse moi... c'est vrai que c'est un détail important


bha c'est pas grave, mais du coup faut que tu passes par la méthode de dark :/


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 09-07-2003 à 13:16:35    

Question bete...
 
Pourquoi synchroniser si tu veux traiter d'autres requetes (les forcer meme) ?  
 
Ca me semble scabreux ton truc et ca sent le probleme de conception a plein nez (a moins que tu ne justifie la chose, mais intuitivement je dirais qu'il y a un probleme)
 
 :hello:

Reply

Marsh Posté le 09-07-2003 à 13:30:47    

Utilise un vrai anneau :
 
node1 -> node2 -> node3 -> node4 -> node1
 
Si node1 veux envoyer un msg a node3 il passe par node2, et recoit la reponse par node4.  
 
Chaque message sur l'anneau est associe a un tag T1 avec une valeur numerique cree a l'envoi du message ainsi que l'id du noeud.
 
Le noeud faisant l'appel de methode (message) map ce tag T1 a un tag identique local T1' (meme valeur) sur lequel le thread de la methode appelante wait lors de l'envoi du message.
 
Chaque noeud, lorsqu'il recoit un message verifie si le message lui est destine.  
 
Si oui soit c'est un appel de methode. Si le noeud est le noeud destinataire l'appel est execute, puis le tag T1 est modifie pour le transformer en ACK puis est transfere dans le message de retour et renvoye sur l'anneau au noeud suivant.
 
Soit c'est un message de retour. Dans ce cas, le tag est extrait le systeme retrouve le tag local dans la map (via sa vlaeur numerique) et fait un notify.
 
etc... je te laisse peaufiner l'anneau ;)
 

Reply

Marsh Posté le 09-07-2003 à 13:36:54    


 
Note : pour avoir des appels asynchrones, soit tu crees ta propre classe de connection (ca fait 2 ans que je n'ai plus jete un oeil a RMI) soit tu fais les appels au noeud suivant dans un nouveau Thread et tu fais en sorte que tes methodes soient toutes void.
 
Enfin bref : RMI ne me semble pas du tout adapte a ce genre d'utilisation  :whistle:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed