IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Identifier l'objet appelant


Sujet :

avec Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par défaut Identifier l'objet appelant
    Est-il possible, dans une méthode publique A.doIt() :
    - d'identifier la classe de l'objet B qui appelle cette méthode ?
    - de récupérer la référence de l'objet B qui appelle cette méthode ?
    - de récupérer le nom de la méthode de l'objet B qui a appelé cette méthode ?

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 120
    Par défaut
    Salut,

    tu a sa dans la trace, maintenant savoir si c'est utilisable en temps que tel ...
    Je ne sais pas quel est le but de ta manoeuvre, mais a mon avis y a surement moyen de régler sa de manière plus jolie ....

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par défaut
    Disons qu'il s'agit de sécuriser l'accès à certaines méthodes sensibles, de s'assurer de l'identité de la "personne" qui tente d'accéder à cette méthode.
    En C++ j'aurais utilisé les déclarations d'amitié, c'est un peu ça que je voudrais.

  4. #4
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Je serais curieux de voir comment tu t'y prends en C++ avec un friend...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par défaut
    Comment je m'y prends pour faire quoi ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par défaut
    Si tu veux dire comment je m'y prends pour m'assurer de l'identité de l'objet qui tente d'accéder à ma méthode effectivement friend ne me sert à rien. En revanche je peux quand même réserver l'accès à Friend.needMoney() plutot qu'à Gangster.holdUp(), non ?

  7. #7
    Membre très actif
    Inscrit en
    Mars 2008
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 283
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class A {
    doIt(B appelant) {}
    }
     
    class B {
    public void maMéthode(Object... args) {
    ...
    A obj = new A();
    ...
    obj.doIt(this);
    ...
    }

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    class A {
    doIt(B appelant) {}
    }
     
    class B {
    public void maMéthode(Object... args) {
    ...
    obj.doIt(this);
    ...
    }
     
    class Usurpateur {
    public void maMéthode(Object... args) {
    ...
    B leurre = new B();
    ...
    A.doIt(leurre);
    ...
    }

  9. #9
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Voila comment tu px recuperer la reference de l'objet appelant et le nom de la
    méthode dans laquelle s'est fait l'appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    class B {
    public void trucB(Object  refObjetAppellant,String nomMethode) {
    ...
     
    ...
    }
     
    class A{
    private B b;
    public void trucA(...) {
    ...
     b.trucB(this,this.trucA.toString());
     
    ...
    }
    Et voila je crois que ca repond parfaitement à ta question , ou sinon n'hesites pas à la reposer.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par défaut
    Ta réponse repose sur la "sincérité" de la classe appelante.
    Moi je cherche un contrôle de cette sincérité dans la classe appelée.
    La classe appelante est-elle bien ce qu'elle prétend être ?

  11. #11
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Si l'authentification repose uniquement sur le type et non l'instance, la réponse t'as été donnée. Il faut utiliser la stack trace pour ainsi obtenir la classe appelante.

    Tu peux l'obtenir ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Thread.currentThread().getStackTrace()
    Si c'est l'instance que tu veux c'est beaucoup plus délicat, et dépend du contexte, car dans le cas d'une classe statique réalisant l'appel, comment déterminer l'instance appelante ?

    Néanmoins, tu peux t'en sortir en recourant à l'AOP. Une piste ici: http://dev.eclipse.org/mhonarc/lists.../msg01191.html

  12. #12
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Je pense que t'as tous les éléments de réponse à ta question,ou sinon nous l'avons peut etre pas bien comprise.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	public boolean control(String methodName){
    		Throwable t = new Throwable(); 
    		StackTraceElement[] stackTrace = t.getStackTrace();
    		if (stackTrace[2].toString().indexOf(methodName)==0) return true ;
    		System.err.println("Waited : "+methodName);
    		System.err.println("Found : "+stackTrace[2].toString());
    		fatalError("Bad origin") ;
    		return false ;
    		}
    Ca marche mais ça ralentit vachement le programme.

  14. #14
    Membre très actif
    Inscrit en
    Mars 2008
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 283
    Par défaut
    ou sinon nous l'avons peut etre pas bien comprise
    +1000

    Je vois mal à quoi ce bout de code peux servir !

Discussions similaires

  1. AfxBeginthread et objet Appelant
    Par -=zol=- dans le forum MFC
    Réponses: 2
    Dernier message: 29/11/2006, 15h12
  2. Connaitre l'objet appelant
    Par aurelien94 dans le forum Langage
    Réponses: 5
    Dernier message: 19/10/2006, 11h51
  3. [objet] appeler une méthode d'objets contenus dans un tableau (iterator ?)
    Par psychomatt dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/09/2006, 16h28
  4. [Object ID]Comment identifier un objet de facon unique
    Par bourbaki2003 dans le forum Langage
    Réponses: 14
    Dernier message: 09/07/2006, 20h00
  5. base de données objet appelée ozone
    Par enti dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 01/03/2004, 08h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo