Partage
  • Partager sur Facebook
  • Partager sur Twitter

JPA - NullPointerException sur un bean local

bean local injecté par l'annotation @EJB mais nullPointerException

Sujet résolu
20 juin 2017 à 18:29:07

Salut à tous, 

J'ai un projet JEE qui tourne sur Wildfly et qui doit insérer des données d'un excel en base de données. 

Pour ce faire j'ai suivi le tuto JPA de OpenClassRoom et je me retrouve avec une erreur sur mon objet de DAO que j'ai injecté grâce à `@EJB`. En voici le code : 

@Stateless
@LocalBean
public class ColisDao {

    public static final String SELECT_ALL_COLIS = "select * from Colis;";

    @PersistenceContext(unitName="bdd_colis")
    private EntityManager em;

    public ColisDao() {

    }

    public void creer(Colis colis) {
        ...
    }

    public void remove(Colis colis) {
        ...
    }
}

A présent j'utilise cette DAO dans ma classe qui lit le fichier excel et qui souhaite remplir les objets en base.

public class RecoveryImpl  {
    @EJB
    private ColisDao colisDao;

    public void fillDataBase() throws IOException {
         ...
         some code 
         ...
         colisDao.creer(c); //here's my error NullPointer
    }
}

L'erreur intervient à la ligne colisDao.creer(c); ce qui n'est pas censé se produire car j'ai injecté le code.

Voici mon fichier `persistence.xml` si jamais : 

<?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="bdd_colis" transaction-type="JTA">
        <jta-data-source>java:/bdd_colis</jta-data-source>
        <class>data.Colis</class>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
        </properties>
    </persistence-unit>

</persistence>

Si jamais vous avez des suggestions, je suis preneur. 

Bonne soirée



  • Partager sur Facebook
  • Partager sur Twitter
etudiant en école d'ingénieur
21 juin 2017 à 9:11:00

Je pense que tu n'instancies jamais colisDao.
  • Partager sur Facebook
  • Partager sur Twitter
21 juin 2017 à 10:13:17

J'ai trouvé une solution alternative qui n'explique pas en quoi j'ai fait faux sur mon poste de départ, mais qui semble contourner le problème. Voici mon nouveau code pour RecoveryImpl :

@EJB(name="ejb/colisDao", beanInterface=ColisDao.class)
public class RecoveryImpl  {

    public static void fillDataBase() throws IOException {
        try {         
            colisDao = (ColisDao) new InitialContext().lookup("ejb/colisDao");
        }
        colisDao.creer(c);
    }
}



  • Partager sur Facebook
  • Partager sur Twitter
etudiant en école d'ingénieur