3

我试图让 Spring 数据 JPA 与 EJB 和 CDI (Java EE 7) 一起使用。好吧,我按照文档(http://docs.spring.io/spring-data/jpa/docs/1.4.2.RELEASE/reference/html/jpa.repositories.html#jpd.misc.cdi-integration),但仍然无法在无状态 ejb 中 @inject 我的存储库。以下是代码:

@Configuration
@EnableJpaRepositories
public class EntityManagerFactoryProducer {

@Produces
@ApplicationScoped
public EntityManagerFactory entityManagerFactory() {
    return Persistence.createEntityManagerFactory("mypu");
}

public void close(@Disposes EntityManagerFactory entityManagerFactory) {
    entityManagerFactory.close();
}
}

$

public interface TipoFolhaRepository extends JpaRepository<TipoFolha, Long> {

List<TipoFolha> findByNome(String nome);

TipoFolha findByTipo(String tipo);
}

$

@Stateless
public class TipoFolhaFacade extends AbstractFacade<TipoFolha> {

@Inject
TipoFolhaRepository tpRepo;

@Override
public  List<TipoFolha> findAll(){
    return tpRepo.findAll();
}
}

跟随错误。WELD-001408 在注入点 [[BackedAnnotatedField] @Inject com.mycompany.ejb.TipoFolhaFacade.tpRepo] 具有限定符 [@Default] 的类型 [TipoFolhaRepository] ​​的依赖关系不满足

我错过了什么?=S

4

1 回答 1

3

您需要bean-discovery-mode="all"在存储库类所在的模块中启用 CDI。这意味着在 META-INF 文件夹中创建一个 beans.xml,其内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
       http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       bean-discovery-mode="all">
</beans>

可以在此 Oracle 博文中找到对不同发现模式的简短说明

于 2017-01-03T11:22:08.453 回答