在EJB中注入Spring Data Repository

时间:2015-08-28 22:45:27

标签: java jpa dependency-injection ejb spring-data

我正在构建一个在Weblogic 12c(EE 6)中运行的Web项目,是一个Web App,我用以下项目配置了项目:

JSF 2 + EJB 3 + Spring Data

我有一些这样的回购:

public interface ColectorRepository extends JpaRepository<PEBTable, Integer>{

    @Query("select t from PEBTable t where t.id >= ?1 and t.id <= ?2")
    public List<PEBTable> findByRange(Integer a, Integer b);    

}

我也有这种方式在EJB中调用repo,我没有问题这样调用它,它工作正常,我喜欢它:

@Stateless
public class PEBGenericParser implements PEBGenericParserLocal {

    @PersistenceContext(unitName = PEBCons.PEB_PU)
    private EntityManager emPeb;

    @Override   
    public List<PEBTable> getData() {       
        JpaRepositoryFactory jrf = new JpaRepositoryFactory(emPeb); 
        ColectorRepository repo = jrf.getRepository(ColectorRepository.class);
        return repo.findAll();
    };

}

我在找什么?好吧,我想以一种优雅的方式调用存储库,使用CDI注释,Spring注释或其他避免使用spring xml(spring-config.xml等)的东西,我喜欢Spring数据,但我更愿意避免所有那些xml配置,只是像我一样保留我的persistence.xml。

我想这样做,如:

@Stateless
public class PEBGenericParser implements PEBGenericParserLocal {

    @PersistenceContext(unitName = PEBCons.PEB_PU)
    private EntityManager emPeb;

    @Inject
    private ColectorRepository repo;

    @Override   
    public List<PEBTable> getData() {       
        return repo.findAll();
    };

}

我将不胜感激任何建议。

1 个答案:

答案 0 :(得分:0)

要在Java EE环境中完成此工作,您需要配置CDI容器以提供访问容器管理的EntityManager的方法。

这可以通过以下简单的配置类来完成:

public class CdiConfig {     
    @Produces
    @Dependent
    @PersistenceContext(unitName = "db_unit")
    public EntityManager entityManager;     
}