TP Proxy - Question 2.1

Conception de logiciels Intranet : patrons et canevas

Modérateurs : Douin, graffion

Répondre
NAVARRO
Messages : 41
Inscription : 02 oct. 2016 13:44

TP Proxy - Question 2.1

Message par NAVARRO » 19 mars 2018 16:32

Bonjour,

Je suis un peu bloqué sur cette question. Y a t -il d'autres personnes dans mon cas?
Je ne suis pas sur d'avoir compris ce qu'il fallait faire dans DynamicProxyFiltre.getProxy.

Le but est bien de mettre en place une classe Proxy + InvocationHandler?

Est ce que DynamicProxyFiltre peut implémenter InvocationHandler ou il faut créer une classe à part?

Il faut ensuite écrire la méthode invoke?
Object invoke( Object proxy, Method m, Object[] args) throws
Throwable;

Merci de votre aide.
Vincent

Vivel
Messages : 44
Inscription : 19 févr. 2018 13:27

Re: TP Proxy - Question 2.1

Message par Vivel » 19 mars 2018 17:39

Bonjour Vincent,
Tu es sur la bonne piste. n'hésite pas regarder de le code du cours.
bon courage,
Virginie

STB
Messages : 26
Inscription : 22 févr. 2017 19:44

Re: TP Proxy - Question 2.1

Message par STB » 19 mars 2018 19:16

Bonjour Vincent,

tu as la solution en page 63 du cours PROXY.

Stéphane

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

Re: TP Proxy - Question 2.1

Message par NAVARRO » 19 mars 2018 22:00

Merci pour vos réponses.
J'ai commencé la question 2.1 ce week end. Mais je patauge!

Je vais voir vos propositions.

Question : est ce qu'il faut bien laisser les "fail" dans la classe de test?

GANKAMA
Messages : 54
Inscription : 26 oct. 2017 16:51

Re: TP Proxy - Question 2.1

Message par GANKAMA » 19 mars 2018 22:42

Bonsoir,

Navarro ,je suis un peut dans le même cas .J'ai un problème lorsque je lance le test testAccesRestreint1().J'ai systematiquement

IllegalAccessException est attendue ?
---
junit.framework.AssertionFailedError: IllegalAccessException est attendue ?
at question2.DynamicProxyFiltreTest.testAccesRestreint1(DynamicProxyFiltreTest.java:23)


J'ai beau mettre une methode autorisée je retombe sur la même erreur .D'ailleurs quelqu'un a t il une idée sur cette assertion:
assertTrue( "IllegalAccessException est attendue ?", e.getCause() instanceof IllegalAccessException);

Voici mon début de code:


public class DynamicProxyFiltre<T> implements InvocationHandler{
private Liste<T> liste;
private String[] autorisees;
public DynamicProxyFiltre(Liste<T> l,String[] a){
this.liste=l;
autorisees=a;
}


Cordialement

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

Re: TP Proxy - Question 2.1

Message par NAVARRO » 19 mars 2018 23:17

Je pense qu'il faut lancer (throw) une erreur de type IllegalAccessException lorsque la méthode n'est pas dans la liste autorisée, normalement par ton "handler".

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

Re: TP Proxy - Question 2.1

Message par slash » 19 mars 2018 23:45

Bonsoir,

Il suffit de faire exactement ce qui est indiqué dans le cours (page 63). La méthode invoke() du Handler interne est à implémenter. En cas de méthode non permise, on doit renvoyer une IllegalAccessExecption.

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

Re: TP Proxy - Question 2.1

Message par NAVARRO » 20 mars 2018 0:08

Merci à tous pour votre aide.

J'ai finalement réussi les tests mais je ne comprends pas vraiment ce que je fais..
Je trouve que finalement c'est une sorte de boite noire qui fait le boulot pour nous.

Je ne comprends pas vraiment les subtilités des blocs try et catch successifs.

} catch (InvocationTargetException e) { throw e.getTargetException();
} catch (Exception e) {
throw new RuntimeException("unexpected invocation exception: " +
e.getMessage());
}
throw new RuntimeException(m.getName() + " est une méthode inhibée ");

Douin
Messages : 266
Inscription : 18 mars 2009 15:46

Re: TP Proxy - Question 2.1

Message par Douin » 20 mars 2018 17:16

Bonjour,

} catch (InvocationTargetException e) {
throw e.getTargetException(); <-- c'est une exception venue de l'objet réel, alors celle-ci est propagée vers l'appelant
} catch (Exception e) {
throw new RuntimeException("unexpected invocation exception: " + e.getMessage()); <-- tout autre exception, là c'est en local au sein du proxy
}
throw new RuntimeException(m.getName() + " est une méthode inhibée "); <-- si on arrive ici, dans l'exercice c'est une méthode inhibée...

un autre exemple est en ligne http://jfod.cnam.fr/NFP121/supports/NFP ... ection.pdf diapositive 84

Bonne lecture

GANKAMA
Messages : 54
Inscription : 26 oct. 2017 16:51

Re: TP Proxy - Question 2.1

Message par GANKAMA » 20 mars 2018 18:08

Bonsoir,

Merci pour toutes les explications.Mais moi j'ai toujours une erreur au niveau des tests.
Voici ma methode invoke qui est celui de la page 63 que j'essaye de comprendre.

public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{
try {
for(String s : autorisees){
if(s.equals(method.getName())){
return method.invoke(liste, args);
}
}
}

catch (InvocationTargetException e) { throw e.getTargetException();}
catch (Exception e) {
throw new RuntimeException("unexpected invocation exception: " +
e.getMessage());
}
throw new RuntimeException(method.getName() + " est une méthode inhibée ");


}

Voici l'erreur generée:
IllegalAccessException est attendue ?
---
junit.framework.AssertionFailedError: IllegalAccessException est attendue ?
at question2.DynamicProxyFiltreTest.testAccesRestreint1(DynamicProxyFiltreTest.java:23)

Ma question est la suivante ,est ce que je dois rajouter un bloc catch
catch (IllegalAccessException e) { throw new IllegalAccessException();}

Vivel
Messages : 44
Inscription : 19 févr. 2018 13:27

Re: TP Proxy - Question 2.1

Message par Vivel » 20 mars 2018 18:59

args est un tableau d'objet à initialiser. regarde la classe VirtualProxy
bon courage

virginie

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

Re: TP Proxy - Question 2.1

Message par NAVARRO » 20 mars 2018 21:01

Bonsoir,

Pour te mettre sur la voie, et pour faire suite à mon précédent commentaire, j'avais ajouté ceci dans ma classe de test DynamicProxyFiltreTest:

}catch(Throwable e){
//System.out.println("testAccesRestreint1 : e = " + e.getMessage());
//System.out.println("testAccesRestreint1 : e = " + e.getClass() );
assertTrue( "IllegalAccessException est attendue ?", e.getCause() instanceof IllegalAccessException);
}

On attend un IllegalAccessException, il faut donc que le Throwable e soit un IllegalAccessException , d'où mes println pour voir ce que je recevais à la place.

Bon courage.
Vincent.

Répondre

Qui est en ligne ?

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