我正在使用EJB3,JPA和JSF开发应用程序,我想使用CDI将我的DAO注入EJB:
这是我的DAO代码:
public class ZoneDao {
@PersistenceContext(unitName = "wabApp3PU")
private EntityManager em;
/* Functions */
}
这是我的EJB代码:
@Stateless
public class ZoneFacade{
@Inject
private ZoneDao zoneDao;
/* Functions*/
}
这是我得到的错误:
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [ZoneDao] with qualifiers [@Default] at injection point [[BackedAnnotatedField] @Inject private fr.si.metier.ZoneFacade.zoneDao]
注意:我正在使用glassfish 4应用服务器
答案 0 :(得分:1)
JAVA EE 6 - CDI组件,给DAO @ApplicationScoped,然后它将允许注入persistentcontext
答案 1 :(得分:0)
将@Stateless
添加到您的ZoneDao
班级,或者将此Bean作为范围,例如@SessionScoped
。
如果使用Java EE 6,请确保您有beans.xml。对于版本7,不再需要它。
答案 2 :(得分:0)
ZoneDao未标记为托管bean,因此它不会像使用CDI那样工作。使用@Named注释ZoneDao,并使用@RequestScope,@ SessionScop,...等选择它的范围,或者你需要的范围,只有这样才能使用CDI注入托管bean。
答案 3 :(得分:0)