繁体   English   中英

无法使用CDI将DAO注入EJB

[英]Can't Inject DAO into EJB using CDI

我正在使用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应用程序服务器

JAVA EE 6-CDI组件,给DAO @ApplicationScoped,然后它将允许注入持久性上下文

添加@StatelessZoneDao类或给这个Bean的一个范围如@SessionScoped

如果使用Java EE 6,请确保您具有bean.xml。对于版本7,不再需要它。

ZoneDao没有被标记为托管bean,因此它不能像使用CDI那样工作。 用@Named注释ZoneDao,并使用@RequestScope,@SessionScop,... etc或您需要的任何范围来选择它的作用域,然后它才是可以使用CDI注入的托管bean。

  1. 您正在使用哪个IDE? 如果是Netbeans,请检查它是否已在META-INF / WEB-INF文件夹中生成beans.xml。 如果有,请检查以确保未将默认的bean发现模式设置为带注释,如果是,则使用@Dependent注释DAO。
  2. 您不能使用@PersistenceContext将entitymanager注入CDI Bean中(直到CDI家伙,或者服务器供应商对此进行更改)。 看来您正在学习的简单解决方案是将entitymanager注入无状态Bean中(并且,如果在战争应用程序中使用ejb,则可以注入无状态EJB)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM