CDI : WELD-001408 Unsatisfied dependencies
Bonjour,
Je fais un petit projet de test avec CDI. Mon application est un EAR composée d'un EJB et d'un WAR le tout déployé sur Glassfish 4. J'utilise Hibernate 4.3.4 pour l'accès à la base de donnée.
Mon but est de vérifier qu'une classe dans un EJB ( DAO ) puisse recevoir une injection d'un EntityManager.
Le pattern SessionBean + EJB n'est pas fantastique mais je vais devoir modifier une application déjà créer donc je n'est pas trop le choix.
Voici mon code de l'EJB :
DAOTest.java
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
| @Namedpublic class DAOTest implements Serializable {
private static final long serialVersionUID = 1L;
@PersistenceContext(unitName="CDI-ejb")
private EntityManager em;
public void test(){
//em.getClass();
}
public EntityManager getEm() {
return em;
}
public void setEm(EntityManager em) {
this.em = em;
}
public DAOTest() {
// TODO Auto-generated constructor stub
}
} |
Service.java
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| @Stateless
@LocalBean
public class Service implements ServiceLocal {
@Inject DAOTest test;
/**
* Default constructor.
*/
public Service() {
// TODO Auto-generated constructor stub
}
@Override
public void test() {
test.test();
}
} |
et ServiceLocal.java
Code:
1 2 3 4 5
|
@Local
public interface ServiceLocal {
void test();
} |
Dans mon WAR j'ai :
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 28 29 30 31 32
|
@WebServlet("/Test")
public class Test extends HttpServlet {
private static final long serialVersionUID = 1L;
@Inject private ServiceLocal service;
/**
* @see HttpServlet#HttpServlet()
*/
public Test() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
service.test();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
} |
J'ai testé en annotant le DAOTest avec l'annotation @Stateless. Tout ce passe comme il faut. Donc CDI fonctionne bien. Mais avec juste @Named cela ne veux pas fonctionner.
Une idée?
La stacktrace :
Code:
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [DAOTest] with qualifiers [@Default] at injection point [[BackedAnnotatedField] @Inject test.Service.test]