OVH Cloud OVH Cloud

Retrouver l'appelant

7 réponses
Avatar
Armel HERVE
Bonjour =E0 tous,

je vourdrais savoir s'il est possible de retrouver l'objet qui a appel=E9=
=20
la m=E9thode d'un autre objet. J'ai trouv=E9 le moyen de connaitre la class=
e=20
de l'objet appelant par le biais du security manager, mais je n'arrive=20
pas =E0 r=E9cup=E9rer l'instance de cette classe qui a fait l'appel.

L'objectif est de pouvoir m=E9moriser les objets faisant usage d'un autre=
=20
objet.

Merci d'avance pour vos suggestions

Armel

7 réponses

Avatar
zebulon
On doit sans doute y parvenir avec de l'AOP (par ex AspectJ)
Avatar
Akram
je t'aurais conseillé plutot de mettre un attribut parent dans tous les
objets crées et de l'initialiser à la construction ou à l 'appel.


pour recuperer la classe, tu peux ensuite faire un object.getClass();


Armel HERVE wrote:

Bonjour à tous,

je vourdrais savoir s'il est possible de retrouver l'objet qui a appelé
la méthode d'un autre objet. J'ai trouvé le moyen de connaitre la classe
de l'objet appelant par le biais du security manager, mais je n'arrive
pas à récupérer l'instance de cette classe qui a fait l'appel.

L'objectif est de pouvoir mémoriser les objets faisant usage d'un autre
objet.

Merci d'avance pour vos suggestions

Armel


Avatar
Armel HERVE
In article <bn6tnv$1mq1$, says...
je t'aurais conseillé plutot de mettre un attribut parent dans tous les
objets crées et de l'initialiser à la construction ou à l 'appel.


pour recuperer la classe, tu peux ensuite faire un object.getClass();


Armel HERVE wrote:

Bonjour à tous,

je vourdrais savoir s'il est possible de retrouver l'objet qui a appel é
la méthode d'un autre objet. J'ai trouvé le moyen de connaitre la c lasse
de l'objet appelant par le biais du security manager, mais je n'arrive
pas à récupérer l'instance de cette classe qui a fait l'appel.

L'objectif est de pouvoir mémoriser les objets faisant usage d'un aut re
objet.

Merci d'avance pour vos suggestions

Armel



C'est exactement ce que je ne voulais pas faire, mais je crois qu'il n'y

a pas d'autres moyens...
Pourtant, c'est obligé, seulement, ca doit être au niveau de la JVM et
ca doit être inaccessible...

tant pis

Armel


Avatar
jerome moliere
Armel HERVE wrote:
In article <bn6tnv$1mq1$, says...

je t'aurais conseillé plutot de mettre un attribut parent dans tous les
objets crées et de l'initialiser à la construction ou à l 'appel.


pour recuperer la classe, tu peux ensuite faire un object.getClass();


Armel HERVE wrote:


Bonjour à tous,

je vourdrais savoir s'il est possible de retrouver l'objet qui a appelé
la méthode d'un autre objet. J'ai trouvé le moyen de connaitre la classe
de l'objet appelant par le biais du security manager, mais je n'arrive
pas à récupérer l'instance de cette classe qui a fait l'appel.

L'objectif est de pouvoir mémoriser les objets faisant usage d'un autre
objet.

Merci d'avance pour vos suggestions

Armel



C'est exactement ce que je ne voulais pas faire, mais je crois qu'il n'y

a pas d'autres moyens...
Pourtant, c'est obligé, seulement, ca doit être au niveau de la JVM et
ca doit être inaccessible...
il y a un moyen crade pour faire cela dans les API recentes (JDK 1.4)

c'est en parsant la stacktrace...
ignoble mais cela marche...
je te laisse consulter les archives de la ML de l'universite de
strasbourg ou il y a eut differents threads la dessus

Jerome



Avatar
Emmanuel Puybaret
il y a un moyen crade pour faire cela dans les API recentes (JDK 1.4)
c'est en parsant la stacktrace...
ignoble mais cela marche...
je te laisse consulter les archives de la ML de l'universite de
strasbourg ou il y a eut differents threads la dessus


Jérome, Armel ne veut pas retrouver la classe et la méthode de l'appelant
mais l'objet ayant appelé la méthode ! Et là, je sèche...

Bye
--
Emmanuel PUYBARET
Email :
Web : http://www.eteks.com
Auteur du Cahier du programmeur Java [1] / Editions Eyrolles :
http://www.eteks.com/services/cahierjava1.html

Avatar
jerome moliere
Emmanuel Puybaret wrote:
il y a un moyen crade pour faire cela dans les API recentes (JDK 1.4)
c'est en parsant la stacktrace...
ignoble mais cela marche...
je te laisse consulter les archives de la ML de l'universite de
strasbourg ou il y a eut differents threads la dessus



Jérome, Armel ne veut pas retrouver la classe et la méthode de l'appelant
mais l'objet ayant appelé la méthode ! Et là, je sèche...


tres juste Emmanuel, autant pour moi.... :)
je suis aussi d'avis qu'un grand coup d'AOP ou de proxies dynamique doit
permettre de faire cela....
c'est même assez proche de tous les exemples classiques en la matiere....
maintenant l'interet final de tout cela ?
en jetant un oeil aux frameworks du tupe jac , aspectj ou jboss-aop
ou via les proxies du JDK 1.3 il y a de quoi outiller son code...
mais cela va alourdir le code pour fournir une information qui ne peut
etre necessaire à tes classes metier (donc du debug/optim ou autre)

Jerome


Avatar
Nicolas Repiquet
"Emmanuel Puybaret" a écrit dans le message news:
BBBD94EC.C4D3%

il y a un moyen crade pour faire cela dans les API recentes (JDK 1.4)
c'est en parsant la stacktrace...
ignoble mais cela marche...
je te laisse consulter les archives de la ML de l'universite de
strasbourg ou il y a eut differents threads la dessus


Jérome, Armel ne veut pas retrouver la classe et la méthode de l'appelant
mais l'objet ayant appelé la méthode ! Et là, je sèche...


Avec AspectJ y a pas moyen de rajouter this dans les paramêtres à la volée
en catchant les appels à une méthode donnée, et en les forwardant sur la
même avec un paramêtre Object en plus ? ( question de quasi-ignorant en
aspect ).

Genre :

class MyClass {
void foo() {}
void foo( Object o ) {
System.out.println( "Caller is "+ o );
}
}

Ensuite on fait un pointcut sur les appels à foo() et on les forward sur
foo(Object) en rajoutant this ?

-- Nicolas Repiquet