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

Servlets/JSP Java Discussion :

Utiliser les injections @EJB pour invoquer les EJB d'un autre module ?


Sujet :

Servlets/JSP Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 9
    Points : 3
    Points
    3
    Par défaut Utiliser les injections @EJB pour invoquer les EJB d'un autre module ?
    Bonjour,

    Je suis confronté à une erreur de niveau, je pense, débutant.

    J'ai déjà créé un projet de type EJB+web (et donc avec une archive EAR à déployer, en l'occurrence sur Glassfish), mais maintenant j'effectue de manière parallèle le développement de mes EJB (module EJB-JAR) et de mon module web (module WAR).
    Problème : je n'arrive pas à utiliser @EJB. Mes objets restent décidément null.

    Peut-on utiliser les injections @EJB dans les servlets pour faire référence aux EJB d'une autre application au sens Glassfish du terme ? Si les deux modules sont sur le même domain Glassfish et sur la même machine, ils tournent dans la même JVM, non ?
    Si oui, y'a t-il des manipulations spéciales à faire ?

    Question bonus : si je veux mettre mes deux modules sur deux serveurs Glassfish physiquement différent, puis-je toujours utiliser les injections @EJB ou bien suis-je dans l'obligation de passer par la méthode InitialContext et ctx.lookup ?

    Merci de vos éclaircissements !

    François

  2. #2
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut
    ton module EJB-JAR que tu essayes d'appeler fais partie d'un autre EAR que celui du WAR sur lequel tu fais ta Servlet ?

    Si oui, tu vas devoir passer (je pense) par du Remote et le nom JNDI pour accéder à ton EJB.
    Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ...

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Pas besoin de remote si tes ejbs et ton war sont déployés dans la même Jvm.

    Essaie de référencer tes ejbs dans le web.xml de ton war via l'annotation ejb-ref.

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Merci de vos réponses, j'étudie la question !

    J'ai l'impresion que mon sun-web.xml ne sert à rien... Dans la console Glassfish, je n'ai comme seul descripteur de déploiement qui remonte mon web.xml.

    Pourtant, pour mon EJB-JAR, je visualise depuis l'interface d'admin mon sun-ejb-jar.xml, sans problème...

    Sinon, comme je l'ai dit, il ne s'agit pas d'un EAR, mais bien d'un EJB-JAR et d'un WAR dissociés. Ils tournent sur le même domain Glassfish sur la même machine, et je dois utiliser, quoi qu'il arrive, l'interface Remote dans un premier temps.

    Que faire ?

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    As-tu regardé de la balise ejb-ref de ton web.xml pour référencer ton EJB comme expliqué dans mon précédent post ?

    Le fait que tu aies un war et un jar au lien d'un ear n'a rien à voir avec le fait de faire un ejb remote ou local.
    La notion de remote ou local intervient seulement si tes composants ne sont pas sur la même machine virtuelle (serveur d'application) et qu'il y a besoin de sérialisation.

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Voici ce que j'ai :

    sun-ejb-jar :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD GlassFish Application Server 3.0 EJB 3.1//EN" "http://www.sun.com/software/appserver/dtds/sun-ejb-jar_3_1-0.dtd">
    <sun-ejb-jar>
      <enterprise-beans>
        <name>monApp-ejb</name>
        <ejb>
          <ejb-name>monBean</ejb-name>
          <jndi-name>monBean</jndi-name>
        </ejb>
      </enterprise-beans>
    </sun-ejb-jar>
    Dans mon web.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <ejb-ref>
            <ejb-ref-name>monBean</ejb-ref-name>
            <ejb-ref-type>Session</ejb-ref-type>
           <remote>package.module.ejb.monBeanRemote</remote>
        </ejb-ref>
    Servlet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @EJB(name="monBean", mappedName="monBean")
        private monBeanRemote bean;
    Qu'est ce qui n'est pas bon ?

  7. #7
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Et rien dans les logs, à part un deploy successful

  8. #8
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    D'après mes lectures, si le war et l'ejb ne sont pas regroupés dans un EAR, il faut utiliser une interface remote. L'implémentation choisie par le serveur d'application peut proposer l'utilisation de l'interface locale mais ça ne fait pas partie de la norme.

    Pour ton problème d'injection, est-ce que cela fonctionne avec un lookup ?
    Peut-être que l'utilisation de l'injection ne fonctionne qu'avec des composants packagés dans la même archive...

  9. #9
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut
    Citation Envoyé par fr1man Voir le message
    D'après mes lectures, si le war et l'ejb ne sont pas regroupés dans un EAR, il faut utiliser une interface remote

    oui c'est exactement ce que je disais qqs réponses plus haut

    Citation Envoyé par fxrobin
    ton module EJB-JAR que tu essayes d'appeler fais partie d'un autre EAR que celui du WAR sur lequel tu fais ta Servlet ?

    Si oui, tu vas devoir passer (je pense) par du Remote et le nom JNDI pour accéder à ton EJB.
    Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ...

  10. #10
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Faut pas se vexer, je n'ai pas relu ta réponse quand j'ai rédigé mon dernier commentaire.

    A l'époque, je suis quasiment certain que j'utilisais l'interface local pour un ejb et un war déployés dans deux archives différentes. (avec JBoss)
    Donc je pensais que c'était la norme.
    Et surtout que pour moi, remote voulait dire sérialisation, et passage d'une JVM à une autre, sinon local devait suffire.

  11. #11
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut
    Je ne suis pas vexé
    Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ...

  12. #12
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Qu'importe, j'utilise de toute façon des interfaces remote.

    Il faut que j'essaye de faire un lookup, ce que j'avais (difficilement) réussi à faire pour un client lourd exploitant le même module EJB.

Discussions similaires

  1. Réponses: 10
    Dernier message: 06/02/2008, 17h35
  2. utiliser une seule servlet pour toutes les jsp
    Par DoubleU dans le forum Servlets/JSP
    Réponses: 13
    Dernier message: 20/09/2007, 19h30
  3. [EJB3] Conférence vidéo sur EJB 3 et les APIs Java pour la persistance
    Par Mickael Baron dans le forum Java EE
    Réponses: 0
    Dernier message: 21/06/2007, 12h00
  4. [MySQL] besoin d'aide pour comprendre les injections sql
    Par cassy dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 28/01/2007, 14h21
  5. Réponses: 1
    Dernier message: 16/11/2006, 14h01

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