Problème association EJB3 / Weblogic / JPA / JSF
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:
//--------------------------------------
Code:
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 service:
//-------------------------------------
Code:
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);
}
} |
la couche ManagedBean de jsf:
//-----------------------------------
Code:
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 "";
}
} |
//-----------------------------------
Problème association : ejb3,weblogic,jpa,jsf
Bonjour,
Merci pour ton retour,
Mais même si pour l'exemple les deux couches font la même chose,en réalité,ce n'est pas vrai,car si on a des codes
métiers on doit le mettre dans la couche service et non dans le DAO.
Cordialement