TP2 publish - question1 - DeadSubscribers

Conception de logiciels Intranet : patrons et canevas

Modérateurs : Douin, graffion

NAVARRO
Messages : 35
Inscription : 02 oct. 2016 13:44

TP2 publish - question1 - DeadSubscribers

Message par NAVARRO » 27 févr. 2018 14:43

Bonjour,

J'ai du mal aussi à comprendre la notion de DeadSubscribers, et donc de ce qu'il faut faire ou comment les gérer.

Quand considere t - on qu'on à un deadSubscribers?

Lorsqu'il choisi de ne plus être notifié par la méthode setAborted?? y a- t -il d'autres cas?
Je ne suis pas sur de comprendre la classe SubException.

/** Ce souscripteur arrête la propagation de la notification
* après l'appel de la méthode update.
* Est utilisé seulement lors d'un sendOrderedBroadcast.
*/
public void setAborted(){aborted = true;}

Voici les extraits du TP:

/** Obtention des souscripteurs injoignables.
* Ces souscripteurs ont levé une exception
* @return la liste souscripteurs injoignables
*/

public List<SubscriberI> getDeadSubscribers();

Et la classe de test:

public void testDeadSubscribers() throws Exception{
try{ // toute instance de SubExc lève un exception, cf. methode update
SubException subExc, subExc1;
subExc = new SubException("se",planif,36);
subExc1 = new SubException("se1",planif,16);
mediator.add(s1).add(s2).add(subExc).add(s3).add(s4).add(subExc1).add(s5);
int tailleAvant = mediator.getSubscribers(planif).size();
assertEquals("taille de la liste pour planif ?", 7, tailleAvant);
mediator.sendOrderedBroadcast(planif," résultats dans la semaine");
int tailleApres = mediator.getSubscribers(planif).size();
assertEquals("taille de la liste pour planif ?", tailleAvant-2, tailleApres);
int taille = mediator.getDeadSubscribers().size();
assertEquals("taille de la dead liste ?", 2, taille);
boolean result = mediator.getDeadSubscribers().contains(subExc);
assertTrue("subscriber subExc absent de la dead liste ? ", result);
mediator.add(mediator.getDeadSubscribers().get(0));
assertEquals("taille de la liste pour planif ?", tailleAvant-1, tailleApres+1);
}catch(Exception e){
fail("exception inattendue !" + e.getMessage());
}
}

Merci de votre aide.

Cordialement.
Vincent.

slash
Messages : 62
Inscription : 04 nov. 2017 2:45

Re: TP2 publish - question1 - DeadSubscribers

Message par slash » 27 févr. 2018 15:54

Tout est dans le commentaire de la méthode getDeadSubscribers() :
/** Obtention des souscripteurs injoignables.
* Ces souscripteurs ont levé une exception
* @return la liste souscripteurs injoignables
*/

On "imagine" donc qu'il y aurait des souscripteurs qui potentiellement renverraient une Exception à l'exécution de update(). Il suffit de les attraper dans les méthodes de publications.

La classe SubException permet juste de simuler ce cas de souscripteur en défaut.

NAVARRO
Messages : 35
Inscription : 02 oct. 2016 13:44

Re: TP2 publish - question1 - DeadSubscribers

Message par NAVARRO » 27 févr. 2018 21:52

Merci pour ton aide slash.

J'y vois un peu plus clair mais ce n'est pas encore limpide ;) haha

slash
Messages : 62
Inscription : 04 nov. 2017 2:45

Re: TP2 publish - question1 - DeadSubscribers

Message par slash » 27 févr. 2018 23:56

Alors pour que ce soit plus limpide, la méthode update() renvoie potentiellement une exception (throws Exception).
La méthode qui l'appelle doit donc pouvoir la catcher, et auquel cas il suffit d'ajouter ce souscripteur défaillant à une liste de Subscribers, qui pourra être retournée par getDeadSubscribers().

Si c'est setAborted() qui te fait poser des questions, dis toi qu'un arrêt de propagation ne génère pas une exception ici, mais arrête simplement le traitement.

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité