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 :

Problème d'accès EJB nullPointerException


Sujet :

Java EE

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 62
    Points : 96
    Points
    96
    Par défaut Problème d'accès EJB nullPointerException
    Bonjour,

    J'utilise l'IDE netbeans avec comme serveur Glassfish
    J'ai créé un projet j2ee avec une partie web et une seconde partie EJB.
    Je problème c'est que je n'arrive pas à les faire communiquer entre eux...
    Code coté projet EJB :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    package session;
     
    import javax.ejb.Remote;
     
    @Remote
    public interface GestionAgencesRemote {
        String bonjourEJB();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Stateless
    public class GestionAgences implements GestionAgencesRemote
    {  
        @Override
        public String bonjourEJB()
        {
            return "Bonjour depuis EJB";
        }
    }
    Code coté projet web:

    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
    package bean;
     
    import javax.annotation.ManagedBean;
    import javax.ejb.EJB;
    import session.*;
     
    /**
     *
     * @author guillaume
     */
    @ManagedBean
    public class GestionAgence 
    {
        @EJB GestionAgencesRemote lesAgences;
     
        public GestionAgencesRemote gelLesAgences()
        {
            return lesAgences;
        }
        public String bonjour()
        {
            return "Bonjour depuis le Bean ; "+lesAgences.bonjourEJB();
        }
    }

    appel dans la servlet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	private void doListAgences(HttpServletRequest request, HttpServletResponse response)
    	throws ServletException, IOException 
    	{
    		//+ Récupérer la listes des Agences disponibles
                    GestionAgence agences = new GestionAgence();
                    request.setAttribute("Bonjour", agences.bonjour());
                    //request.setAttribute("agences", agences.gelLesAgences().getListAgences());
     
    		//+ On affiche la vue list.jsp
    		getServletContext().getRequestDispatcher((String)params.get("urlListAgences")).forward(request, response);
    	}
    Cordialement,

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 53
    Points : 64
    Points
    64
    Par défaut
    Salut,

    ton code parait correct. Regarde du cote de tes fichiers de configuration (web.xml, beans-face.xml et les autres)

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 62
    Points : 96
    Points
    96
    Par défaut
    J'ai instancié l'objet EJB et cela fonctionne.

    Voici le code du bean partie projet web.
    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
    @SessionScoped
    public class GestionAgence 
    {
        @EJB GestionAgencesRemote lesAgences;
     
        public GestionAgencesRemote gelLesAgences()
        {
            lesAgences = new GestionAgences();
            return lesAgences;
        }
        public String bonjour()
        {
            lesAgences = new GestionAgences();
            return "Bonjour depuis le Bean ; "+lesAgences.bonjourEJB();
        }
    }
    Je ne sais pas si c'est normal qu'il faut l'instancier...Mais bon si ça marche...
    Du coup j'ai un nouveau problème je souhaite accéder aux données de ma base de données mais j'ai de nouveau l'exception nullPointerException

    voici le code du bean session :
    De plus si je crée un objet de type agence que je le retourne cela fonctionne(ce qui est retourné en commentaire).

    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
    @Stateless
    public class GestionAgences implements GestionAgencesRemote
    {
        EntityManager persistance;
     
        private Collection<Agence> lesAgences;
     
       public Collection<Agence> getListAgences()
        {
           Collection<Agence> laListe = new ArrayList<Agence>();
     
            Agence a = new Agence(1);
            a.setAdresseAgence("10 rue du fion");
            a.setCodePostalAgence("00000");
            a.setVilleAgence("ZeroVille");
            laListe.add(a);
            //return laListe;
            return persistance.createNamedQuery("Agence.findAll").getResultList();
        }
     
        @Override
        public String bonjourEJB()
        {
            return "Bonjour depuis EJB";
        }
    }
    de l'interface :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @Remote
    public interface GestionAgencesRemote {
        String bonjourEJB();
     
        public Object getListAgences();
    }
    et enfin de l'entité(générée automatiquement):
    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
    29
    @Entity
    @Table(name = "agence")
    @NamedQueries({
        @NamedQuery(name = "Agence.findAll", query = "SELECT a FROM Agence a"),
        @NamedQuery(name = "Agence.findByIdAgence", query = "SELECT a FROM Agence a WHERE a.idAgence = :idAgence"),
        @NamedQuery(name = "Agence.findByIdDirecteur", query = "SELECT a FROM Agence a WHERE a.idDirecteur = :idDirecteur"),
        @NamedQuery(name = "Agence.findByAdresseAgence", query = "SELECT a FROM Agence a WHERE a.adresseAgence = :adresseAgence"),
        @NamedQuery(name = "Agence.findByCodePostalAgence", query = "SELECT a FROM Agence a WHERE a.codePostalAgence = :codePostalAgence"),
        @NamedQuery(name = "Agence.findByVilleAgence", query = "SELECT a FROM Agence a WHERE a.villeAgence = :villeAgence")})
    public class Agence implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Basic(optional = false)
        @Column(name = "idAgence")
        private Integer idAgence;
        @Column(name = "idDirecteur")
        private Integer idDirecteur;
        @Column(name = "adresseAgence")
        private String adresseAgence;
        @Column(name = "codePostalAgence")
        private String codePostalAgence;
        @Column(name = "villeAgence")
        private String villeAgence;
     
        public Agence() {
        }
    .........
    }
    sus-ressouce.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE resources PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Resource Definitions //EN" "http://www.sun.com/software/appserver/dtds/sun-resources_1_3.dtd">
    <resources>
        <jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="mysql_gestionbancaire_rootPool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
            <property name="serverName" value="localhost"/>
            <property name="portNumber" value="3306"/>
            <property name="databaseName" value="gestionbancaire"/>
            <property name="User" value="root"/>
            <property name="Password" value=""/>
            <property name="URL" value="jdbc:mysql://localhost:3306/gestionbancaire"/>
            <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        </jdbc-connection-pool>
        <jdbc-resource enabled="true" jndi-name="getionbancaire" object-type="user" pool-name="mysql_gestionbancaire_rootPool"/>
    </resources>
    persistence.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
      <persistence-unit name="Gestion-Bancaire-ejbPU" transaction-type="JTA">
        <jta-data-source>getionbancaire</jta-data-source>
        <properties/>
      </persistence-unit>
    </persistence>

  4. #4
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Je ne sais pas si c'est normal qu'il faut l'instancier...Mais bon si ça marche...
     Du coup j'ai un nouveau problème je souhaite accéder aux données de ma base de données mais j'ai de nouveau l'exception nullPointerException
    Le fait de créer les objets par vous même revient à utiliser une classe JAVA normal, ce qui fait que vous n'utiliser la particularité des EJB.

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 62
    Points : 96
    Points
    96
    Par défaut
    Le fait de créer les objets par vous même revient à utiliser une classe JAVA normal, ce qui fait que vous n'utiliser la particularité des EJB.
    Je comprend bien mais avez vous une idée pour résoudre mon problème sans rien instancier?

    J'ai mis le projet en pièce jointe pour plus de facilité.

    J'utilise Netbeans avec Glassfish comme serveur d'applications

    Merci de votre aide.
    Fichiers attachés Fichiers attachés

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    lesAgences = new GestionAgences();
    ...
    ???
    Il ne faut pas faire ça !

    L'annotation @EJB est là pour injecter l'objet qui va bien.

    Si, dans le code, ton objet "lesAgences" est null, c'est un problème JNDI.

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 62
    Points : 96
    Points
    96
    Par défaut
    Si, dans le code, ton objet "lesAgences" est null, c'est un problème JNDI.
    Si c'est un problème de JNDI, que dois-je faire pour le vérifier? Dois-je changer de serveur d'application??

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par guillaumerivière7 Voir le message
    Si c'est un problème de JNDI, que dois-je faire pour le vérifier? Dois-je changer de serveur d'application??
    Ben oui, pourquoi pas... ça parait normal comme action...

    Blague à part, en fonction du serveur, de sa version, il peut y avoir des petites modifications à faire.
    Je sais pour avoir eu le problème que GlassFish v3.1 pose problème sur certaines méthodes de déploiement.
    Dans ton cas, si tu déploies via un EAR, ça devrait fonctionner.

Discussions similaires

  1. [EJB3.1] Injection avec @ejb et problème de java.lang.NullPointerException
    Par ensatTetouan dans le forum Java EE
    Réponses: 1
    Dernier message: 04/03/2012, 04h00
  2. Réponses: 0
    Dernier message: 30/01/2012, 19h30
  3. Réponses: 1
    Dernier message: 18/10/2010, 15h04
  4. [EJB3] Problème acces EJB distants
    Par denis13 dans le forum Java EE
    Réponses: 1
    Dernier message: 03/12/2009, 13h41
  5. [EJB] Problème d'accès de Tomcat vers EJB
    Par pedro_tryo dans le forum Weblogic
    Réponses: 9
    Dernier message: 01/08/2008, 15h26

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