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 :

EJB introuvable via ManagedBean


Sujet :

Java EE

  1. #1
    Membre averti
    Inscrit en
    Février 2012
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 39
    Par défaut EJB introuvable via ManagedBean
    Bonjour à tous,

    je développe actuellement, sur Eclipse, une application JSF/EJB mais je rencontre un problème.

    pour ma partie couche métier, j'ai créé plusieurs projets :
    - JPA avec les entités
    - EJB avec les sessions Stateless (Patern Facade)
    - Interface avec les interfaces des facades (...facadeLocal)

    - EAR avec le .jar du projet Interface et celui du projet JPA
    Ce projet est déployé sur un serveur Glassfish (car je n'arrive pas à configurer JBoss).

    Et j'ai créé un projet Java standard avec un main qui manipule les données de la BD (CRUD).
    Jusque là tout marche bien.

    Maintenant je voudrais mettre en place une couche de présentation en JSF (avec Tomcat) pour manipuler ces données. j'ai donc créé un "Dynamic Web Project" en incluant le projet Interface et le projet JPA dans le build path (Je déploie ce projet là dans Tomcat). J'ai fait un premier test en saisissant un champ et en l'affichant sur une nouvelle page (appelé par un bouton). Cela marche correctement donc mon managedbean, faces-config, .xhtml... sont bien corrects.

    Maintenant, je voudrais vérifier que la saisie de mon champ correspond bien à un enregistrement de ma base et là j'obtiens une erreur java.lang.ClassNotFoundException indiquant que mon injection de dépendance n'est pas trouvée.

    Que dois-je ajouter pour que je puisse accéder aux classes de mon interface via @EJB ?

    Merci

  2. #2
    Membre Expert
    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
    Par défaut
    Si ton WAR est dans un TOMCAT distant, donc pas dans l'EAR, il te faudra faire des appels RMI-IIOP (EJB distant) avec l'interface Remote. Ca va traverser le réseau (sérialisation / désérialisation).

    de plus il faudra mettre l'EJB-JAR aussi côté Tomcat pour qu'il est est les classes. Enfin l'annotation @EJB ne fonctionnera pas dans Tomcat, puisque c'est une annotation JEE qui résoud sur du Local (même EAR).

    Je te conseille plutôt de mettre ton WAR dans ton EAR et de déployer le tout sur GlassFish. Comme ça tu seras en "Local".

    Cela étant, même si la première partie semble compliquée, cela peut se faire dans certains cas. Je te conseille vivement d'appliquer ma recommandation

  3. #3
    Membre averti
    Inscrit en
    Février 2012
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 39
    Par défaut
    Merci pour ta réponse mais j'utilise Glassfish pour le moment car je doit avancer coté développement. A terme, il sera remplacer par JBoss donc il vaut mieux que je garde cette structure.

    Je vais faire une recherche sur ta solution d'EJB Distant pour essayer de le mettre en place.
    Est-ce bien possible via les managedbean ?
    Coté WAR, je dois pas mettre plutôt le jar de l'interface ?

  4. #4
    Membre Expert
    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
    Par défaut
    GlassFish / Jboss ... tant que c'est JEE6 ou JEE5 c'est compatible.

    Tomcat n'est pas un serveur JEE ...

    tu t'embarques dans une solution "bancale" ... après tu fais ce que tu veux.

    Oui les interfaces pour des appels distants.

    Normalement une application JEE "classique" (que ce soit JBOSS ou GlassFish)
    c'est une EAR composé d'une EJB-JAR et un WAR, le tout déployé dans le même serveur.

    Mais pourquoi faire simple quand on peut faire compliquer ...

  5. #5
    Membre Expert
    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
    Par défaut
    Citation Envoyé par Hole_geek Voir le message
    Est-ce bien possible via les managedbean ?
    oui biensur, comme c'est aussi possible depuis une programme "console" ou encore "swing" ... c'est du JAVA pur.

    tiens c'est comme ça :
    http://www.codeproject.com/Articles/...on-Bean-Lookup

  6. #6
    Membre averti
    Inscrit en
    Février 2012
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 39
    Par défaut
    A la base je voulais utiliser JBoss pour ma couche métier et Tomcat pour ma couche présentation. Ayant, actuellement des soucis de configuration avec JBoss, j'ai décidé de remplacer JBoss par Glassfish (temporairement) pour avancer dans mon développement. J'aurais donc à la fin de mon projet, une solution stable je pense... avec JBoss/Tomcat. J'me trompe ?

    En fait, je désire réaliser ce tutoriel mais en remplaçant le client final par un "Dynamic web project" afin d'utiliser JSF.

    Citation Envoyé par fxrobin Voir le message
    Normalement une application JEE "classique" (que ce soit JBOSS ou GlassFish)
    c'est une EAR composé d'une EJB-JAR et un WAR, le tout déployé dans le même serveur.
    j'ai bien une EAR avec l'EJB-JAR (déployé sur Glassfish) et à coté de ça mon WAR mais qui est sur Tomcat...

    Citation Envoyé par fxrobin Voir le message
    Mais pourquoi faire simple quand on peut faire compliquer ...
    je pourrais tout passer sur Glassfish et tout serait bon je sais, je l'ai déjà fait mais là ce n'est pas ce que l'on m'a demandé... Et pour le coup, ça me permettrait de voir les EJBs distants

  7. #7
    Membre Expert
    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
    Par défaut
    Comme tu veux.
    Juste que je ne ferai pas comme ça, mais comme expliqué plus haut pour profiter de l'injection et des performances.

    il te faudra implémenter des caches côté WAR, sinon ça peut être pas très performant, par exemple quand tu iras récupérer des listes auprès de tes façades, il y aura récupération, instanciation côté ejb, sérialisation, passage réseau, déserialisation dans la jvm de tomcat, occupation mémoire là aussi ... et ça, pour toutes tes listes.

    Tu auras donc intérêt à mettre en place ehcache par exemple, par toi même.

  8. #8
    Membre Expert
    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
    Par défaut
    Si tu persistes dans ton choix, je pense que ceci devrait t'intéressait en complément du lien précédent que je t'ai donné :

    http://docs.oracle.com/cd/E18930_01/...418/beans.html

  9. #9
    Membre averti
    Inscrit en
    Février 2012
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 39
    Par défaut
    Merci bien, j'ai pu m'en sortir avec tes liens

  10. #10
    Membre Expert
    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
    Par défaut
    n'oublie pas de passer le post en résolu

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/05/2011, 16h34
  2. Lookup EJB via JNDI depuis un MBean
    Par -Bi30- dans le forum Glassfish et Payara
    Réponses: 0
    Dernier message: 14/04/2010, 18h26
  3. Récuperer response via un managedBean
    Par DevServlet dans le forum JSF
    Réponses: 3
    Dernier message: 18/08/2009, 11h20
  4. [EJB3] [JBoss] javax.ejb.Stateless introuvable
    Par pmartin8 dans le forum Java EE
    Réponses: 2
    Dernier message: 16/04/2007, 15h09

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