2017-01-25 9 views
0

Моя текущая работа - перенести приложение Java EE с сервера Jboss 7 на Wildfly 10. У меня проблема с интеграцией CDI и Spring-Data. Я использую ту же конфигурацию, которая работала на Jboss 7. Когда я пытаюсь развернуть мое приложение на сервере Wildfly, я получаю ошибки, связанные с добавлением репозиториев Spring данных в некоторые компоненты CDI и EJB.WELD-001408: Неудовлетворенные зависимости для хранилищ от данных Spring

Ошибки выглядеть следующим образом:

org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type StudentExtTrainingRepository with qualifiers @Default 
    at injection point [BackedAnnotatedField] @Inject private pl.mynetwork.mylearning.logic.historyTraining.HistoryTrainingService.studentExtTrainingRepository 
    at pl.mynetwork.mylearning.logic.historyTraining.HistoryTrainingService.studentExtTrainingRepository(HistoryTrainingService.java:0) 

    at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:359) 
    at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:281) 
    at org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:134) 
    at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:155) 
    at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:518) 
    at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:68) 
    at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:66) 
    at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:63) 
    at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:56) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
    at org.jboss.threads.JBossThread.run(JBossThread.java:320) 

Я настроил мое приложение в соответствии с пружинным руководством по конфигурации данных, что я нашел здесь https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpd.misc.cdi-integration но wildfly он не работает.

У меня есть класс производителя для Entity менеджера как этот

@Dependent 
public class SpringDataConfigurationProducer { 


    @Produces 
    @ApplicationScoped 
    public EntityManagerFactory createEntityManagerFactory() { 
    return Persistence.createEntityManagerFactory("base-pu"); 
    } 

    @Produces 
    @RequestScoped 
    public EntityManager createEntityManager(EntityManagerFactory entityManagerFactory) { 
    return entityManagerFactory.createEntityManager(); 
    } 
} 

Конечно у меня есть файлы beans.xml в своих проектах в директории META-INF.

Repository, что им пытаются придать вид:

@Repository 
@Transactional 
@Dependent 
public interface StudentExtTrainingRepository extends JpaRepository<StudentExtTraining, Long> { 
} 

Service, где я хочу, чтобы ввести Repository выглядит:

@Service 
public class HistoryTrainingService { 

    @Inject 
    private StudentExtTrainingRepository studentExtTrainingRepository; 
} 

У меня есть отдельный проект для хранилищ данных пружинных и отдельных служб/EJBs. Оба упакованы в один EAR. Есть ли у кого-нибудь какие-либо ошибки в том, что случилось? Я провел много часов с этой проблемой, и я не могу найти решение.

+0

Drop Spring полностью и вместо этого использует Apache Deltaspike. Никаких проблем с этим. Существуют внутренние мосты, которые объединяют Spring Data и CDI. И они на самом деле написаны не очень хорошо. Не смешивайте Java EE, а Spring - мой совет. Весна запатентована и не работает с ней. –

ответ

0

Добавить этот класс.

class CdiConfig {  
    @Produces 
    @RequestScoped 
    @PersistenceContext 
    public EntityManager entityManager; 
} 
+0

Я пробовал этот подход, но эффект был тот же. – user2514376

+0

Вы пытались удалить SpringDataConfigurationProducer и только с CdiConfig? для меня это работало в weblogic. Также добавьте здесь @PersistenceContext (unitName = "base-pu"). – mhshimul

+0

Не работает. Когда я это сделал, я получил ошибку 'Ошибка установки непрерывности инъекции в управляемый бин CDI. Не удается найти блок персистентности с именем base-pu в развертывании mylearning-scheduler.ear для точки впрыска javax.persistence.EntityManagerFactory pl.mynetwork.mylearning.springdata.config.CdiConfig.customerDatabasePersistenceUnit' – user2514376

0

Интересно, может быть, проблема связана с моей структурой проекта?

У меня есть файл persistence.xml внутри jar, который добавляется в каталог lib в services.ear. У меня есть другое ушко - scheduler.ear, которое имеет зависимость от services.ear в файле манифеста. Знает кого-нибудь, должен ли он работать в этой конфигурации?

Это выглядит следующим образом:

--services.ear 
       ----lib 
        -----domain.jar 
            ---persistence.xml 
        -----jdbc.jar 
--scheduler.ear 
       ----META-INF 
          ----Manifest.mf 

Внутри файл манифест у меня есть строка, как это:

зависимости: deployment.mylearning-сервисы app.ear

репозиториев классы, которые я могу `t вводят внутри jdbc.jar. Развертывание не выполнено на стадии развертывания scheduler.ear

Смежные вопросы