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 :

acces à une interface locale à partir d'un managed bean


Sujet :

Java EE

  1. #1
    Membre du Club Avatar de trin86
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 171
    Points : 63
    Points
    63
    Par défaut acces à une interface locale à partir d'un managed bean
    Bonjour,

    Voilà j'ai un projet web contenant une page JSF qui fait appel à un managed bean, qui fait lui meme appel à des EJB avec acces local (tout dans le meme projet). Mon souci c comment faire le lookup vers mes nterfaces en local, sachant qu'en essayant d'écrire ce code dans le managed bean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @EJB(name="DaopJpa", beanInterface=Dao.class)
    public class EBBean {
    ...
    Context context = new InitialContext();
    Dao dao = (Dao) context.lookup("java:comp/env/DaoJpa");
    ...
    }
    Lors du déploiement, j'ai l'exception suivante :
    java.lang.IllegalStateException: Resolution should not happen via injection container

    où est l'erreur et comment la résoudre svp?

    Merci.
    Cherchez le savoir jusqu'en Chine !

  2. #2
    Membre confirmé Avatar de Lordsephiroth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 199
    Points : 494
    Points
    494
    Par défaut
    Bonjour à toi,

    Tu n'as malheureusement pas utilisé correctement l'annotation @EJB. @EJB permet de faire de l'injection de ressource.

    Je te conseille de voir le mini-exemple que je viens de poster :

    http://www.developpez.net/forums/d98...onctionnement/

    Ca présente un EJB tout simple dénoté par @Stateless et qui appelle un autre EJB qui est injecté par l'annotation @EJB.

    Bonne chance !
    Always code as if the guy maintaining your application is a violent psychopath!
    Site personnel sur la saga Final Fantasy : http://www.final-fantasy.ch

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2008
    Messages : 79
    Points : 70
    Points
    70
    Par défaut
    Bonjour,

    Je rebondi sur ce boss parce que j'ai à peu près le même problème. Dans mon exemple (je me suis inspiré de Java Pet Store) j'ai un Session bean :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    @Local
    public interface ItemServiceLocal {
     
        String getTitle();
     
    }
    Son implémentation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    @Stateless
    public class ItemServiceBean implements ItemServiceLocal {
     
        public String getTitle() {
            return "Test !!!";
        }
     
    }
    Voilà un session bean tout bête qui retourne une chaine de caractère. Je l'utilise donc dans un managed bean (le projet war et jar son dans même le .ear) :

    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
     
    public class TestBean {
     
        @EJB
        private ItemServiceLocal service;
        private String title;
     
        /** Creates a new instance of TestBean */
        public TestBean() {
            title = service.getTitle();
        }
     
        public String getTitle() {
            return title;
        }
     
        public void setTitle(String title) {
            this.title = title;
        }
     
    }
    Le souci c'est que lorsque j'utilise le session bean la jvm me sort une exception du type : java.lang.NullPointerException au niveau du constructeur. C'est très explicite, l'EJB n'a pas été rapatrié et je ne sais pas comment le faire. Je pourrais faire un lookup, mais dans les sources de Java pet store ils n'en font pas. Ils ont utilisé la même manière.
    Je vois pas trop comment faire, et j'ai pas spécialement envie d'utiliser des session bean en remote, sinon je vois pas trop l'intérêt des session bean local.

    Merci d'avance,

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2008
    Messages : 79
    Points : 70
    Points
    70
    Par défaut
    Ok j'ai trouvé :

    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
    27
    28
     
    @ManagedBean
    @RequestScoped
    public class TestBean {
     
        @EJB(mappedName="ejb/stateless/Test")
        private ItemServiceLocal service;
        private String title;
     
        /** Creates a new instance of TestBean */
        public TestBean() {
     
        }
     
        @PostConstruct
        private void init(){
            title = service.getTitle();
        }
     
        public String getTitle() {
            return title;
        }
     
        public void setTitle(String title) {
            this.title = title;
        }
     
    }
    L'injection se fait après instanciation du managed bean, il faut donc utiliser l'annotation @PostConstruct pour que l'injection se fasse correctement.

Discussions similaires

  1. Accès aux librairies locales à partir d'une applet
    Par maverick5051 dans le forum Applets
    Réponses: 55
    Dernier message: 22/11/2012, 12h33
  2. problème d'accès à une interface utilisateur
    Par alphonse62 dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 02/06/2007, 03h33
  3. Réponses: 1
    Dernier message: 29/12/2006, 10h42
  4. Accéder à une interface swing à partir d'un thread
    Par bart64 dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 15/10/2006, 15h54
  5. générer une interface graphique à partir d'un fichier XML
    Par chaval dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 15/03/2006, 10h32

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