Bonjour à tous,
Je débute sur les ejb, je cherche à faire une application :ejb,jsf,jpa
D'abord j'ai constaté qu'avec les ejbs on confond la couche service et la couche dao(comparant avec une application web sans ejb)
ie:on attaque directement la couche dao depuis un managedBean de jsf par exemple!
Moi je cherche à respecter mon architecture habituelle:
Couche présentation:jsf
Couche service
Couche dao
Avec le managedBean de jsf qui appelle la couche service qui à son tour appelle le dao:
MON PROBLEME:
Toutes les injections ne fonctionnent pas!!!:
l'entity manager est à null!!! par exemple(@PersistenceContext(unitName = JPA_UNIT_NAME) ne marche pas
Aussi cette injection ne marche pas:
@EJB
private IGenericDao<Personne> daoPersonne;
Je me demande donc est ce que le fait que j'utilise les generics qui pose problème
Merci de me donner plus d'informations
Voici un apperçu de mes classes:
La couche dao:
//--------------------------------------
la couche service:
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 @Remote public interface IGenericDao<T> { public void create(T e) ;} public abstract class GenericDaoImpl<T> implements IGenericDao<T>{ protected Class<T> typeEntity; private static final String JPA_UNIT_NAME="java_project"; @PersistenceContext(unitName = JPA_UNIT_NAME) @SuppressWarnings("unchecked") public GenericDaoImpl(Class<T> typeEntity) { { this.typeEntity = typeEntity; } } public void create(T e) { em.persist(e); }} @Stateless public class DaoPersonne extends GenericDaoImpl<Personne>{ public DaoPersonne() { super(Personne.class); } }
//-------------------------------------
la couche ManagedBean de jsf:
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 @Remote public interface IServiceEJBRemote<T> { public void create(T t); } @Stateless public class ServicePersonneEJB implements IServiceEJBRemote<Personne> { @EJB public IGenericDao<Personne> daoPersonne; public ServicePersonneEJB() { super(); } @Override public void create(Personne e) { daoPersonne.create(e); } }
//-----------------------------------
//-----------------------------------
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 @ManagedBean @SessionScoped public class ControllerManager { @EJB IServiceEJBRemote<Personne> servicePersonne; public String create(){ servicePersonne.create(newPersonne); return ""; } }
Partager