Spring Data JPA в CDI - ResourceLoader не должен быть нулевым

После первоначальной борьбы с получением EntityManager с использованием следующей установки я получил IllegalArgumentException: ResourceLoader must not be null, который я не могу понять. spring-data-jpa 2.1.1.RELESE, JBoss EAP 7.1. Я что-то упускаю?

Caused by: java.lang.IllegalArgumentException: ResourceLoader must not be null
    at org.springframework.util.Assert.notNull(Assert.java:115)
    at org.springframework.core.io.support.ResourcePatternUtils.getResourcePatternResolver(ResourcePatternUtils.java:62)
    at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.setResourceLoader(ClassPathScanningCandidateComponentProvider.java:265)
    at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.<init>(ClassPathScanningCandidateComponentProvider.java:150)
    at org.springframework.data.repository.config.CustomRepositoryImplementationDetector.findCandidateBeanDefinitions(CustomRepositoryImplementationDetector.java:122)
    at org.springframework.data.repository.config.CustomRepositoryImplementationDetector.lambda$detectCustomImplementation$1(CustomRepositoryImplementationDetector.java:107)
    at java.util.Optional.orElseGet(Optional.java:267)
    at org.springframework.data.repository.config.CustomRepositoryImplementationDetector.detectCustomImplementation(CustomRepositoryImplementationDetector.java:107)
    at org.springframework.data.repository.cdi.CdiRepositoryContext.getCustomImplementationClass(CdiRepositoryContext.java:143)
    at org.springframework.data.repository.cdi.CdiRepositoryBean.getCustomImplementationBean(CdiRepositoryBean.java:457)
    at org.springframework.data.repository.cdi.CdiRepositoryBean.getRepositoryFragments(CdiRepositoryBean.java:372)
    at org.springframework.data.repository.cdi.CdiRepositoryBean.create(CdiRepositoryBean.java:344)
    at org.springframework.data.jpa.repository.cdi.JpaRepositoryBean.create(JpaRepositoryBean.java:72)
    at org.springframework.data.repository.cdi.CdiRepositoryBean.create(CdiRepositoryBean.java:216)
    at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:96)
    at org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.get(ContextualInstanceStrategy.java:100)
    at org.jboss.weld.bean.ContextualInstance.get(ContextualInstance.java:50)
    at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:99)
    at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:99)
    at au.com.cba.reporting.db.JpaRepository$ReportingParameterRepository$845402535$Proxy$_$$_WeldClientProxy.findAll(Unknown Source)
    at au.com.cba.reporting.ReportingBean.findAll(ReportingBean.java:25)
...

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"/>

Cdi Config

@ApplicationScoped
public class CdiConfig {

    @Produces
    @Dependent
    @PersistenceContext(unitName = "jdbc-tx")
    private EntityManager entityManager;
}

persistence.xml

<?xml version = "1.0" encoding = "UTF-8"?>
<persistence version = "2.0" xmlns = "http://java.sun.com/xml/ns/persistence" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name = "jdbc-tx" transaction-type = "JTA">
        <jta-data-source>java:/JDBC_TX_DATASOURCE</jta-data-source>
    </persistence-unit>
</persistence>

Можете ли вы проверить в своем собственном репозитории какой-нибудь метод с необязательным классом. Может быть, это причина проблемы.

Dhiren 26.10.2018 08:36

Я не знал, что вы можете внедрить компонент CDI в компонент Spring

Kukeltje 26.10.2018 12:44

@Kukeltje OP не использует Spring (фреймворк DI), просто Spring Data JPA напрямую с CDI, который поддерживается проектом Spring (что здорово!)

Nikos Paraskevopoulos 26.10.2018 15:40

Хорошо, приятно знать (не очень ;-)). Сам использую deltaspike data / jpa и универсальность

Kukeltje 26.10.2018 17:19

@Dhiren нет, это еще не метод расширения JpaRepository интерфейса. Нет необязательного где-нибудь рядом

Kousalik 27.10.2018 11:30
1
5
963
1

Ответы 1

Проблема была вызвана несоответствием версии зависимости. Все библиотеки Spring, извлеченные транзитивно, были версии 5.1.1.RELEASE, только spring-core по какой-то причине была 4.2.5.RELEASE.

Разобрались, введя управление зависимостями для задействованных библиотек и согласовав их все с 5.1.1.RELEASE.

Другие вопросы по теме