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

Wildfly/JBoss Java Discussion :

problème d'injection (?) d'un session bean EJB3 dans une servlet


Sujet :

Wildfly/JBoss Java

  1. #1
    Membre confirmé Avatar de toomsounet
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 481
    Points : 576
    Points
    576
    Par défaut problème d'injection (?) d'un session bean EJB3 dans une servlet
    Bonjour j'ai un problème qui concerne netbeans 5.5, un EJB3 et l'AS Jboss 4.0.4 (d'où un problème pour savoir dans quelle section poster )

    Pour l'instant je fais juste un test c'est à dire que dans une servlet, j'appelle une méthode d'un session bean qui renvoie juste un "hello world", ce message sera ensuite envoyé sur une page web ou un mobile.

    Mais quand je l'invoque il me sort ce problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    java.lang.RuntimeException: javax.naming.NameNotFoundException: ejb not bound
    	HitServlet.lookupHelloSessionBean(HitServlet.java:85)
    	HitServlet.doGet(HitServlet.java:35)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
    	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    En fait le bug survient quand j'invoque le bean (plus précisement au moment du lookup) qui se trouve dans la même JVM que la servlet !

    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
    20
    21
    22
    23
    24
    25
    26
     
    avec les imports nécessaires..
     
    // JNDI
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    // SERVLET
    import javax.servlet.*;
    import javax.servlet.http.*;
    //EJB
    import sessionPackage.HelloSessionLocal;
    import javax.ejb.EJB;
     
    // le code de la servlet blabla
     
    private HelloSessionLocal lookupHelloSessionBean() {
            try {
                Context c = new InitialContext();
                return (HelloSessionLocal) c.lookup("java:comp/env/ejb/HelloSessionBean");
            }
            catch(NamingException ne) {
                Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught" ,ne);
                throw new RuntimeException(ne);
            }
        }

    Normalement il y a les bonnes annotations dans mes beans, ce qui permet de se passer d'un fichier de configuration (enfin je crois).

    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
    20
    21
    22
    23
    package sessionPackage;
     
    import javax.ejb.Stateless;
     
    /**
     *
     * @author toomsounet
     
     
     */
    @Stateless(name="HelloSessionBean")
    public class HelloSessionBean implements sessionPackage.HelloSessionLocal {
     
        /** Creates a new instance of HelloSessionBean */
        public HelloSessionBean() {
        }
     
        public String helloSession(){
     
            return "Hello World";
        }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    package sessionPackage;
     
    import javax.ejb.Local;
     
     
    /**
     * This is the business interface for HelloSession enterprise bean.
     */
    @Local
    public interface HelloSessionLocal {
        String helloSession();
     
    }
    quand je déploie mon projet, je peux lire entre autre les lignes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    15:02:33,171 INFO  [Ejb3Deployment] EJB3 deployment time took: 15
    15:02:33,171 INFO  [JmxKernelAbstraction] installing MBean: jboss.j2ee:ear=IHMDAMLUDO.ear,jar=IHMDAMLUDO-ejb.jar,name=HelloSessionBean,service=EJB3 with dependencies:
    15:02:33,187 INFO  [EJBContainer] STARTED EJB: sessionPackage.HelloSessionBean ejbName: HelloSessionBean
    15:02:33,187 INFO  [EJB3Deployer] Deployed: file:/C:/jboss-4.0.4.GA/server/default/tmp/deploy/tmp40632IHMDAMLUDO.ear-contents/IHMDAMLUDO-ejb.jar
    Tout parait correct mais encore une fois je débute.

    Je comprends pas pourquoi il n'arrive pas à trouver le bean.

    Help please
    "Most Java programs are so rife with concurrency bugs that they work only by accident"

  2. #2
    Membre confirmé Avatar de toomsounet
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 481
    Points : 576
    Points
    576
    Par défaut
    J'ai avancé, j'ai lu sur netbeans.org que le serveur jboss 4.0.4 n'étant pas compatible totalement avec J EE 5, il faut donc changer l'adresse pour référencer le bean de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     private HelloSessionLocal lookupHelloSession() {
            try {
                Context c = new InitialContext();
                HelloSessionLocal k = (HelloSessionLocal) c.lookup("IHMDAMLUDO/HelloSessionBean/local");
                return k;
            }
            catch(NamingException ne) {
                Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught" ,ne);
                throw new RuntimeException(ne);
    Maintenant dans ma servlet j'appelle cette méthode:
    HelloSessionLocal l = (HelloSessionLocal) lookupHelloSession();
    puis j'invoque une méthode du session bean
    String test = l.getHello();

    mais à l'exécution le serveur râle:
    java.lang.NoSuchMethodError: sessionPackage.HelloSessionLocal.getHello()I
    HitServlet.doGet(HitServlet.java:36)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

    Que manque t il d'après vous?
    "Most Java programs are so rife with concurrency bugs that they work only by accident"

  3. #3
    Membre confirmé Avatar de toomsounet
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 481
    Points : 576
    Points
    576
    Par défaut
    Dans un dernier geste désespéré j'ai viré tous les modules déployés sur le serveur (d'ailleurs j'ai remarqué des doublons le problème venait peut être de là) et j'ai fais un dernier deploy, ho miracle ça marche.

    Vive le Cobol......
    "Most Java programs are so rife with concurrency bugs that they work only by accident"

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/11/2014, 12h06
  2. Vérifier l'existence d'un Session Bean Statefull dans le pool, avec un Stateless
    Par Djaydjay13 dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 15/12/2010, 11h33
  3. Réponses: 1
    Dernier message: 28/04/2008, 15h26
  4. Réponses: 7
    Dernier message: 08/03/2007, 09h23
  5. [JSP] Problème pour accéder à un bean venant d'une servlet
    Par GLDavid dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 07/06/2006, 09h43

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