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 :

EntityManager & NullPointerException


Sujet :

Java EE

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Par défaut EntityManager & NullPointerException
    Salut à tous

    Je sais que c'est loin d'être la première fois que ce genre de topic apparaît sur ce forum et je m'en excuse j'ai fait un bon tour sur le net, j'ai trouvé beaucoup de posts traitant de ce problème, mais aucun n'apportait de réponses précise et claire, voire même pas du tout

    Je débute avec Java EE et je ne compte plus le nombre de fois ou je tente de tout refaire à partir d'un projet vierge, le nombre de re-initialisations & reboot de Glassfish J'ai toujours l'objet EntityManager à NULL.

    Voici le code de ma Session Bean :

    Interface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @Remote
    public interface HellServiceRemote
    {
        List<User> GetUsers();
    }
    Bean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    @Stateless
    public class HellServiceBean implements HellServiceRemote
    {
        @PersistenceContext(unitName="Hell_EJBPU")
        private EntityManager em;
     
        @PostConstruct
        public List<User> GetUsers()
        {
            return em.createQuery("SELECT t FROM USERS AS t").getResultList();
        }
    }
    PersistenceUnit.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <persistence version="1.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_1_0.xsd">
      <persistence-unit name="Hell_EJBPU" transaction-type="JTA">
        <provider>oracle.toplink.essentials.PersistenceProvider</provider>
        <jta-data-source>jdbc/sample</jta-data-source>
        <properties>
          <property name="toplink.ddl-generation" value="create-tables"/>
        </properties>
      </persistence-unit>
    </persistence>
    Appel au service sur le projet Java Web
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dataService = new HellServiceBean();
    dataModel = new ListDataModel(dataService.GetUsers());
    Merci d'avance !

  2. #2
    Membre très actif
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 250
    Par défaut
    Utilise un objet de type EntityManagerFactory pour forcer l'initialisation de l'EntityManager de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    @PersistenceContext(unitName="Hell_EJBPU")
    private EntityManager em;
     
    public HellServiceBean()
    {
        em = Persistence.createEntityManagerFactory("Hell_EJBPU").createEntityManager();
    }
     
    @PostConstruct
    public List<User> GetUsers()
    {
        return em.createQuery("SELECT t FROM USERS AS t").getResultList();
    }

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     em = Persistence.createEntityManagerFactory("Hell_EJBPU").createEntityManager();
    Ce n'est pas nécessaire, l'entity manager sera créé et injecté par le serveur d'application.

    Tu n'as pas d'autres erreurs dans les logs de ton serveur ?

  4. #4
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    Ce n'est pas nécessaire, l'entity manager sera créé et injecté par le serveur d'application.
    Vrai, mais pas avec cet appel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataService = new HellServiceBean();
    Utilises @EJB sur l'interface locale de préférence si tu l'injecte depuis une servlet ou je ne sais quel objet web managé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @EJB
    private HellServiceLocal

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    @ Heimdal
    Tout à fait, tu as raison, je n'avais pas fait attention à son appel.

    Pour récupérer ton bean, il faut procéder de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Context ctx = new InitialContext();
    HellServiceRemote dataService = (HellServiceRemote)ctx.lookup("HellServiceBean /remote");
    A utiliser à partir d'une servlet par exemple, sinon, il faut configurer ton context.

    EDIT: ou en utilisant l'annotation, comme te l'a indiqué Heimdal

  6. #6
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    Si ton EJB et ta servlet se trouvent dans la même archive java (war ou ear), utilises toujours l'interface locale pour éviter le surcout inutile d'une sérialisation et puis d'une désérialisation.

    Sinon "HellServiceBean/remote" c'est du JBOSS il me semble.
    Sur Glassfish 2.1, c'est le nom de la classe (avec package), après je ne sais pas pour la V3, peut-être ce sont ils alignés.

Discussions similaires

  1. Nullpointerexception EntityManager Classe Converter
    Par Razielback dans le forum JSF
    Réponses: 3
    Dernier message: 10/06/2010, 16h24
  2. entitymanager et nullpointerexception
    Par isoman dans le forum Glassfish et Payara
    Réponses: 7
    Dernier message: 20/02/2009, 21h44
  3. [EJB3] EntityManager et NullPointerException
    Par BakaOnigiri dans le forum Java EE
    Réponses: 1
    Dernier message: 17/10/2008, 17h47
  4. [EJB3] EntityManager et NullPointerException
    Par bard123 dans le forum Java EE
    Réponses: 2
    Dernier message: 26/06/2008, 14h39
  5. NullPointerException quand j'injecte un EntityManager
    Par maxinf dans le forum Hibernate
    Réponses: 6
    Dernier message: 15/04/2008, 11h27

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