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

Java EE Discussion :

Récupérer la classe d'un EJB [EJB]


Sujet :

Java EE

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut Récupérer la classe d'un EJB
    Bonjour,

    J'aimerai savoir comment je peux récupérer le nom de la classe d'un EJB présent sur un SA.
    J'explique un peu :
    1. je récupère la liste des objets ejb présent sur le serveur d'application pour cela je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    try {
                NamingEnumeration list = ctx.listBindings(locationObj);
                while (list.hasMore()) 
                {
                    Binding item = (Binding) list.next();
                     Object o = item.getObject();
                     c.add(item);//c est une collection (arraylist)
     
                }
            } catch (Exception ex) {
                throw ex;
            }
    2. a partir d'un objet de cette collection j'aimerai récupérer la classe de l'EJB pour pouvoir par la suite invoquer une de ses méthodes :
    je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Object objRef = ctx.lookup(name); //ctx correpond au contexte
     System.out.println(objRef.getClass()) //pour récupérer la classe de l'objet
    La seule chose est que la classe que j'obtiens est : com.sun.corba.se.internal.iiop.CDRInputStream_1_0$1
    ce qui ne correspond pas a mon EJB et je ne peux pas a partir de la récupérer les méthodes de l'EJB.

    Quelqu'un sait-il ce que je dois faire,svp?
    merci

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Tu vas récupérer auprès du Naming des interfaces Home de tes EJB.

    Le seul moyen de les retrouver en EJB c'est de recréer des instance Remote en utilisant la méthode standard à savoir !

    PortableRemoteObject.narrow(Object, Class).

    Mais pour celà, tu doit avoir les stubs de tes EJB sinon, plantage garanti !

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    Salut,

    Tout d'abord merci de ta réponse.
    Je ne comprends pas très bien ce que tu veux dire.
    Moi je pars du fait que je ne connais pas la nom de mon EJB. Donc je le récupère (avec listBinding etc...).
    Mais après je n'ai pas compris ce que tu voulais que je fasse :
    Naming des interfaces Home de tes EJB ? --> je fais ça comment?

    et pour faire : PortableRemoteObject.narrow(Object, Class), il faut bien que j'ai la Class de mon EJB mais comme quand je récupère l'objet en faisant
    Object objRef = ctx.lookup(name); et ensuite un getClass sur objRef, je n'obtiens pas la classe de l'EJB mais com.sun.corba.se.internal.iiop.CDRInputStream_1_0$1...

    Peux-tu me donner un exemple, peut-être je comprendrais mieux.

    Merci,

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Je ne peu pas te donner d'exemple non, car justement, sans l'interface de base et les stubs des EJB, tu ne pourras pas instancier les Homes.

    Ton object récupérer avec le lookup est un objet remote (distant). Tu ne peu donc pas le transtyper tel que. Tu doit passer par le narrow qui lui, nécessite la classe pour effectuer d'une part le transtypage et de l'autre part, l'instanciation des stubs.

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    tout d'abord question bête mais c'est quoi exactement les stubs des EJBs?

    Je ne comprends décidement pas grand chose désolée,
    Je ne peux pas instancier un EJB qui est distant si je ne connais pas par avance sa classe?? Mais si l'application cliente ne connaît pas les EJB et qu'on souhaite réaliser justement une application généraliste qui pourra invoquer des méthodes d'EJB sur un serveur d'application (sans connaître au paravant les EJBs.), on ne peut pas?

    on ne peut pas récupérer les stubs?

    merci de ton aide

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Avec Corba, il est possible de faire certaines choses si, comme de l'invocation dynamique de méthode, tout comme du chargement de stubs "à la volée" en utilisant les fonctionalitées "codebase" mais celà nécessite un niveau d'expertise que je n'ais pas et surtout, c'est assez dépendant de l'orb que tu vas utiliser étant donné que c'est du corba pur et dur

    Donc, sans aucune info sur un EJB, et sans mettre en oeuvre une usine à gaz, il est effectivement impossible d'invoquer des EJB que tu ne connais pas.

  7. #7
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    Ouhla, la je suis vraiment déprimée...

    On me demande de faire ça au taf alors ca m'embète beaucoup.
    On peut pourtant invoquer des méthodes RMI distantes non? sans savoir pour autant à l'avance les objets.
    Idem pour invoquer un message JMS.
    Du coup je comprends pas qu'on ne puisse pas le faire avec les EJBs. Ils sont pourtant stockés au niveau du SA donc on devrait pouvoir les récupérer pour ensuite les utiliser. C'est vrai qu'au début l'application cliente n'a pas d'info sur les EJBs mais par la suite, on récupère par exemple son nom déjà et de la on ne peut plus rien faire alors?
    arf... quand je vais devoir dire ca a ma chef!
    incroyable quand même... je sens qu'on va me faire chercher et chercher pour rien alors!

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Quand tu invoque une méthode RMI, tu as bien l'interface non ?
    Quand à JMS, tu n'accède pas à un EJB mais au broker de message simplement

  9. #9
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    j'avoue pour RMI je ne sais pas trop. et pour JMS c'est vrai tu as raison.

    mais la ce me désespère de ne pas pouvoir faire ce qu'on m'a demandé, sans en plus savoir très bien expliquer pourquoi on ne peut pas le faire.


  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    En admettant que tu ais les deux interfaces d'un EJB (home et remote), essaye d'instancier un EJB. Tu verras que si tu n'as pas les classes des stubs, celà ne fonctionneras pas.

    Dans ton cas, tu n'as que le nom jndi d'un EJB, même pas la classe.

    Un loockup te retourne une référence sur une interface home et pas une classe home !

    Comme tous les développements en java, il existe des dépendances entre les composants. Dans le cas des EJB, les dépendances sont allégées par l'utilisation d'un service de nommage mais quoi qu'il en soit, tu doit avoir dans le classpath de ton application les classes des objets que tu invoque !

    Il existe une solution pour "télécharger" dynamiquement les classes nécessaires (le codebase) mais quoi qu'il en soit, pour les EJB, tu ne passeras pas à coté du narrow qui lui, demande la classe de la Home et non une référence remote sur une home !

    Essaye de voir du coté des web-services et des annuaires UDDI peut etre

  11. #11
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    Merci, je vais essayer de regarder du côté des web-services et de UDDI mais la je ne connais rien et de regarder aussi la solution pour télécharger dynamiquement des classes...

    Je suis perdue dans tout ca, je pensais vraiment que c'était possible, ca me semblait même presque simple... bon bon si parfois tu ou quelqu'un d'autre a une super idée a me donner, je suis preneuse!


    merci de l'aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer des classes d'un projet MDI
    Par MoscoBlade dans le forum MFC
    Réponses: 2
    Dernier message: 10/12/2006, 16h25
  2. [RequestProcessor] récupérer la classe action type
    Par sylvainv18 dans le forum Struts 1
    Réponses: 4
    Dernier message: 02/11/2006, 14h45
  3. Récupérer la classe parente
    Par jagboys dans le forum MFC
    Réponses: 3
    Dernier message: 15/07/2006, 00h06
  4. [EJBQL] Récupérer une donnée dans un EJB avec EJB/QL
    Par pblb62 dans le forum Java EE
    Réponses: 3
    Dernier message: 28/03/2006, 11h53
  5. [VB6]Récupérer les classes d'un projet
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 08/01/2006, 10h26

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