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

Glassfish et Payara Java Discussion :

Appel d'un EJB à partir d'une Action Struts


Sujet :

Glassfish et Payara Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 187
    Points : 65
    Points
    65
    Par défaut Appel d'un EJB à partir d'une Action Struts
    Bonjour

    J'ai GlassFish 3.1 et Struts 2. J'essaye, à partir de la couche action, de faire appel à un EJB mais ça ne fonctionne pas.

    Voici le code couche action tout simple :

    J'ai trois classes voici la structure :

    projet :
    | src
    |--action
    |----Action.java
    |--Service
    |----BookEJB.java
    |----BookEJBRemote.java

    Classe action
    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
    package action;
     
    import javax.naming.InitialContext;
     
    import service.BookEJBInterface;
     
    import com.opensymphony.xwork2.ActionSupport;
     
    public class Action extends ActionSupport {
     
        public String execute() throws Exception {
            InitialContext context = new InitialContext();
            BookEJBRemote book = (BookEJBRemote ) context.lookup("BookEJBRemote");
            book.sayHello();
            return "SUCCESS";
        }
    }
    BookEJBRemote :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    package service;
     
    import javax.ejb.Remote;
     
    @Remote
    public interface BookEJBRemote {
     
        public abstract void sayHello();
     
    }
    BookEJB.java :
    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 service;
     
    import javax.ejb.Stateless;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
     
    @Stateless
    public class BookEJB implements BookEJBRemote {
     
        @Override
        public void sayHello() {
            System.out.println("Salut !!!!");
        }
    }
    Quelqu'un saurait-il m'indiquer comment faire ?

    Merci d'avance pour votre aide.

  2. #2
    Membre actif Avatar de fahdijbeli
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 281
    Points : 240
    Points
    240
    Par défaut
    bonjour,
    tu peux SVP indiquer l'erreur affiché dans la console ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    Bonjour,

    GlassFish 3.1, cela veut dire que tu es dans un environnement Java EE 6, alors je te conseille de prendre déjà la bonne habitude de développer suivant la philosophie prônée par Java EE 6.

    Là en l'occurrence, tu n'as pas besoin de toute cette complexité avec des interfaces Remote et lookup JNDI.

    CDI doit devenir ton nouvel ami pour l'injection de dépendance, gestion des scopes de tes objets, etc.

    Pour en revenir au code, tu as juste besoin d'ajouter le jar du plugin struts2-cdi-plugin dans ton WEB-INF/lib. Ce jar devrait se trouver dans ta distribution Struts2, sinon il faudrait juste le télécharger.

    Ensuite ton code pourrait se réduire à ceci:

    BookEJB.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    package service;
     
    import javax.ejb.Stateless;
     
    @Stateless
    public class BookEJB { 
     
        public String sayHello() {
            return "Salut !!!!";
        }
    }
    Classe action :
    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
     
    package action;
     
    import service.BookEJB;
     
    import javax.inject.Inject;
     
    import com.opensymphony.xwork2.ActionSupport;
     
    public class Action extends ActionSupport {
     
       @Inject BookEJB bookEjb;
     
        public String execute() throws Exception {         
            bookEjb.sayHello();
            return "SUCCESS";
        }
    }
    Voilà! Les choses sont beaucoup plus simples maintenant avec les versions récentes de Java EE 6/7
    SCJP 5 / SCBCD 1.3 Certified

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 187
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par fahdijbeli Voir le message
    bonjour,
    tu peux SVP indiquer l'erreur affiché dans la console ?
    Je n'ai pas d'erreur mais mon objet bookEJB est null donc null pointer exception en gros.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par amira Voir le message
    Je n'ai pas d'erreur mais mon objet bookEJB est null donc null pointer exception en gros.
    ça c'est sûrement parce que le nom JNDI que tu utilises n'est pas le bon. Les noms jndi en EJB 3.1 ont été standardisés.

    Essaie peut-être:
    java:module/BookEJB!service.BookEJBRemote

    ou tout simplement: java:module/BookEJB.

    Mais comme je l'ai dit plus haut, tout ceci n'est pas nécessaire, surtout quand on débute. Il vaut mieux avoir des interfaces locales, ou pas d'interfaces du tout, et ensuite utiliser de l'injection de dépendances pour laisser le container s'occuper de toute la plomberie, ce qui te laisserait t'occuper beaucoup plus de l'aspect métier de ton application.
    SCJP 5 / SCBCD 1.3 Certified

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 187
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par manblaizo Voir le message
    Bonjour,

    GlassFish 3.1, cela veut dire que tu es dans un environnement Java EE 6, alors je te conseille de prendre déjà la bonne habitude de développer suivant la philosophie prônée par Java EE 6.

    Là en l'occurrence, tu n'as pas besoin de toute cette complexité avec des interfaces Remote et lookup JNDI.

    CDI doit devenir ton nouvel ami pour l'injection de dépendance, gestion des scopes de tes objets, etc.

    Pour en revenir au code, tu as juste besoin d'ajouter le jar du plugin struts2-cdi-plugin dans ton WEB-INF/lib. Ce jar devrait se trouver dans ta distribution Struts2, sinon il faudrait juste le télécharger.

    Ensuite ton code pourrait se réduire à ceci:

    BookEJB.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    package service;
     
    import javax.ejb.Stateless;
     
    @Stateless
    public class BookEJB { 
     
        public String sayHello() {
            return "Salut !!!!";
        }
    }
    Classe action :
    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
     
    package action;
     
    import service.BookEJB;
     
    import javax.inject.Inject;
     
    import com.opensymphony.xwork2.ActionSupport;
     
    public class Action extends ActionSupport {
     
       @Inject BookEJB bookEjb;
     
        public String execute() throws Exception {         
            bookEjb.sayHello();
            return "SUCCESS";
        }
    }
    Voilà! Les choses sont beaucoup plus simples maintenant avec les versions récentes de Java EE 6/7
    Désolé j'ai mis du temps à te répondre mais j'ai essayé d'implémenter ça mais malheuresement ça ne marche absolument pas voici l'erreur que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    cannot Deploy EJB
    deploy is failing=Error occurred during deployment: Exception while preparing the app : Unable to load the EJB module. DeploymentContext does not contain any EJB. Check the archive to ensure correct packaging for C:\glassfish4\glassfish\domains\domain1\eclipseApps\EJB.
    If you use EJB component annotations to define the EJB, and an ejb or web deployment descriptor is also used, please make sure that the deployment descriptor references a Java EE 5 or higher version schema, and that the metadata-complete attribute is not set to true, so the component annotations can be processed as expected. Please see server.log for more details.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par amira Voir le message
    Désolé j'ai mis du temps à te répondre mais j'ai essayé d'implémenter ça mais malheuresement ça ne marche absolument pas voici l'erreur que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    cannot Deploy EJB
    deploy is failing=Error occurred during deployment: Exception while preparing the app : Unable to load the EJB module. DeploymentContext does not contain any EJB. Check the archive to ensure correct packaging for C:\glassfish4\glassfish\domains\domain1\eclipseApps\EJB.
    If you use EJB component annotations to define the EJB, and an ejb or web deployment descriptor is also used, please make sure that the deployment descriptor references a Java EE 5 or higher version schema, and that the metadata-complete attribute is not set to true, so the component annotations can be processed as expected. Please see server.log for more details.
    Etrange, le message d'erreur n'est pas très explicite, mais il me semblerait que ce soit lié à l'activation de CDI.

    J'avais oublié d'indiquer qu'il te faut avoir un fichier nommé beans.xml dans le WEB-INF pour activer CDI. Ce fichier peut être vide au début.
    SCJP 5 / SCBCD 1.3 Certified

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/10/2013, 12h19
  2. Envoyer un mail à partir d'une action Struts 2
    Par ifsera dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 03/09/2012, 10h46
  3. Appel d'EJB à partir d'une JSP
    Par couse1 dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 10/03/2011, 11h21
  4. [ASP][D8] Appel WebForm2.aspx a partir d'une WenForm1.aspx
    Par pop bob dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 12/09/2005, 15h06
  5. [SERVLET]Appel d'un fichier à partir d'une servlet
    Par fchafia dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 17/03/2005, 12h21

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