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 :

[Glassfish 3.1.1] Problème Injection EJB avec Richfaces-3.3.3


Sujet :

Glassfish et Payara Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Par défaut [Glassfish 3.1.1] Problème Injection EJB avec Richfaces-3.3.3
    Bonjour, je développe une application JEE avec les composants suivants:
    • Glassfish 3.1.1 avec Mojorra 2.1.3
    • EJB 3.1
    • Hibernate 3.6
    • Richfaces 3.3.3

    J'ai d'abord testé avec Richfaces 4, mais il ne me semble pas encore suffisamment mature (manque des composants, bug rapidement rencontré, ...). L'injection des EJBs fonctionnait très bien, sans faces-config.xml et en annotant les backing-beans avec @ManagedBean.

    Par contre, depuis que je suis passé sous Richfaces 3.3.3, impossible d'injecté mes EJBs (avec @EJB) dans mes backing-beans! Je dois faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Context ctx = new InitialContext();
    xxxEjb = (xxxEJB) ctx.lookup("java:global/xxx/YyyEJB/XxxEJB");
    J'ai essayé ceci, en adaptant le sun-web.xml en glassfish-web.xml http://www.developpez.net/forums/d10...nterexception/
    Mais j'ai toujours le même problème.
    Merci de votre aide.

  2. #2
    Membre Expert
    Avatar de alexismp
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 503
    Par défaut
    Il s'agit bien d'EJB, pas de ManagedBeans?
    Que se passe-t-il avec @EJB ? Rien (NullPointerException) ou stacktrace?

    As-tu essayé de remplacer @EJB par @Inject (avec un beans.xml pour que CDI soit enclenché)?

    Il faudrait que tu donnes plus de code (EJB, injection, structure appli, ...)

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Par défaut
    J'ai un BackingBean, annotée comme suit:
    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
     
    @ManagedBean(name = "ofCtrl")
    @SessionScoped
    public class OrderController extends Controller
    {
            @EJB
    	private OrderEJB ofEjb;
            ...
            public List<Order> getOfItems()
    	{
    		if(ofItems.size() <= 0)
    		{
    			ofItems.addAll(ofEjb.findOrders());
    		}
    		return ofItems;
    	}
    }
    Mon EJB
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    @Stateless
    public class OrderEJB
    {
    ...
    }
    Voici un extrait d'une page JSF, qui utilise ce BackingBean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    <rich:extendedDataTable rowKeyVar="row" id="orderTable" 
       var="order" value="#{ofCtrl.ofItems}" 
       width="1000px" height="500px">
    ...
    Lors du déploiement de l'EAR, j'ai ceci qui s'affiche dans la console
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    Portable JNDI names for EJB OrderEJB : [java:global/Xxx/XxxEJB/OrderEJB, java:global/Xxx/XxxEJB/OrderEJB!xx.yyy.zzz.stateless.OrderEJB]
    ...
    Mais quand j'appelle la page JSF, j'ai un NullPointerException sur mon EJB. En débuggant, on voit qu'il est à NULL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    javax.el.ELException: /liste_ordre.jsp @36,93 value="#{ofCtrl.ofItems}": java.lang.NullPointerException
    	at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:76)
    ...
    J'ai essayé de remplacer l'annotation @EJB par @Inject et avec un fichier beans.xml vide, comme mentionné dans mon premier post.

    Je précise que ce code marchait sans problème avec Richfaces4. Pour que ça marche avec Richfaces 3.3.3, je dois utiliser une méthode annotée avec @PostConstruct et initialiser les EJBs comme mentionné dans mon premier post.

  4. #4
    Membre Expert
    Avatar de alexismp
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 503
    Par défaut
    je ne vois pas de référence à @Inject dans le premier post. La différence avec @EJB c'est qu'une erreur d'injection est relevée au déploiement et pas au runtime avec un NPE.

    Le code du managed beans JSF ne peut-il vraiment pas retourner 'null' ? Comment 'ofItems' est-il déclaré, initialisé?
    Sinon il devrait y a voir une clause du genre "... caused by NullPointerException at line: ofItems.addAll(ofEjb.findOrders());"

    Je ne vois pas comment un changement de bibliothèque JSF sans changement de conteneur (version JSF, version GF) peut causer des problèmes d'injection.

  5. #5
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Par défaut
    J'ai trouvé le problème!
    J'ai recopié le fichier web.xml d'un projet EAR qui tourne sous Glassfish 2.1.1. La ligne qui posait problème était la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <context-param>
      <param-name>com.sun.faces.injectionProvider</param-name>
      <param-value>com.sun.faces.vendor.WebContainerInjectionProvider</param-value>
    </context-param>
    Je l'ai enlevé et maintenant l'injection se passe correctement!
    Merci alexismp d'avoir passé du temps sur mon problème

  6. #6
    Membre Expert
    Avatar de alexismp
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 503
    Par défaut
    Cool

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

Discussions similaires

  1. [DisplayTag] problème d'utilisation avec glassfish dans un projet EJB
    Par wl1979 dans le forum Taglibs
    Réponses: 0
    Dernier message: 14/04/2009, 12h35
  2. Problème de rafraîchissement avec RichFaces
    Par maVariable dans le forum JSF
    Réponses: 5
    Dernier message: 03/06/2008, 19h52
  3. [EJB2] Problème de connection avec mon premier EJB..
    Par gelinp dans le forum Java EE
    Réponses: 7
    Dernier message: 02/05/2007, 17h06
  4. Réponses: 5
    Dernier message: 04/07/2006, 00h11
  5. [Ant] [Ejb] Probléme de création d'ejb avec Genic
    Par rivierem dans le forum JOnAS
    Réponses: 7
    Dernier message: 25/06/2004, 16h21

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