J'ai un JAR avec EJB 3.1 que j'ai besoin d'utiliser dans WAR. JAR et WAR sont déployés séparément sur le même JBoss (AS 7.1). Lorsque j'injecte EJB dans l'un des haricots CDI dans WAR je suis arrivé cette erreur:WELD-001408: try @Inject EJB de JAR à WAR
16:45:19,003 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC00001: Failed to start service jboss.deployment.unit."TEST_WEB.war".WeldService: org.jboss.msc.service.StartException in service jboss.deployment.unit."TEST_WEB.war".WeldService: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [TestSessionEJBLocal] with qualifiers [@Default] at injection point [[field] @Inject cz.pfreiberg.test.view.portlet.ViewPortlet.testBean]
at org.jboss.as.weld.services.WeldService.start(WeldService.java:83)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_79]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_79]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_79]
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [TestSessionEJBLocal] with qualifiers [@Default] at injection point [[field] @Inject cz.pfreiberg.test.view.portlet.ViewPortlet.testBean]
at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:275)
at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:244)
at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:107)
at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:127)
at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:346)
at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:331)
at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:366)
at org.jboss.as.weld.WeldContainer.start(WeldContainer.java:83)
at org.jboss.as.weld.services.WeldService.start(WeldService.java:76)
De mon point de vue actuel de la @Inject ne voit pas l'EJB, mais si j'utiliser la recherche manuelle JNDI (de la guerre) est possible pour moi d'obtenir l'instance de ce haricot. Est-il possible d'injecter un EJB à partir d'un autre JAR avec l'annotation @Inject?
classe WAR (CDI Bean) qui @Inject EJB du JAR:
@Model
public class ViewPortlet implements Serializable {
@Inject
TestSessionEJBLocal testBean;
}
classe EJB JAR que je suis en train de @Inject avec interface locale et à distance:
@Stateless
public class TestSessionEJBBean implements TestSessionEJB, TestSessionEJBLocal
Merci pour vos idées.
Avez-vous un beans.xml dans votre JAR et votre WAR? – jpkrohling
Oui, j'ai (un à META-INF pour JAR, un à WEB-INF pour WAR). Selon la spécification, il est même facultatif. –