2017-02-19 35 views
0

Я относительно новичок в вселенной JEE, поэтому, пожалуйста, несите меня.
Я не могу получить свою голову вокруг исключения, которое бросает мой локальный wildfly (версия 10.1.0) сервер.

за исключением состояния:

Не удается установить пакет < > .beans.ApplicationBean поле < пакет > .service.rest.ApplicationService.applicationBean в < пакет > .beans.ApplicationBean $ Proxy $ _ $$ _Weld $ EnterpriseProxy $

Фактическое развертывание на сервере приложений успешно завершено, но вызов REST вызывает это исключение.
Странная часть: Если я разворачиваю тот же пакет во второй раз, вызванный вызов REST не генерирует исключение, и приложение работает по назначению.

Классы в вопросе являются:

< пакет > .beans.ApplicationBean

@Stateless 
@LocalBean 
public class ApplicationBean { 
    @Inject 
    private ApplicationDao applicationDao; 

    ... some methods ... 
} 


< пакет > .service.rest.ApplicationService

@Path("/applications") 
@Stateless 
@LocalBean 
public class ApplicationService { 
    @Inject 
    private ApplicationBean applicationBean; 

    ... methods which use the applicationBean field ... 
} 

Мои рассуждения позади моего использования аннотаций в отношении КДИ/EJB являются:

  • @Stateless потому что мне нужно транзакции в моем классе DAO (класс DAO приведена ниже по соображениям полноты)
  • @LocalBean потому что я пытаюсь внедрить конкретные классы реализации и никаких интерфейсов


< пакет > .daos.ApplicationDao

@Stateless 
@LocalBean 
public class ApplicationDao { 
    @PersistenceContext 
    private EntityManager em; 

    @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 
    ... method ... 
} 

Я не уверен, если он не имеет ничего общего с ним, но классом ApplicationService находится в другом модуле, чем боб и дао. В итоге вместе они образуют файл уха, где общий модуль (bean и daos) - это ejbModule, а служба - это веб-приложение.

Я был бы очень признателен за понимание - ура!

ответ

0

Это может быть несколько вещей, но вот моя догадка:

попробуйте изменить @Inject к @EJB

@Stateless 
@LocalBean 
public class ApplicationBean { 
    @EJB 
    private ApplicationDao applicationDao; 

    ... some methods ... 
} 

< пакет > .service.rest.ApplicationService

@Path("/applications") 
@Stateless 
@LocalBean 
public class ApplicationService { 
    @EJB 
    private ApplicationBean applicationBean; 

    ... methods which use the applicationBean field ... 
} 

Если это исправлено, проблема в том, что файл jar, содержащий класс, не имеет beans.xml-файла, поэтому он не получает КДИ.

+0

Вы абсолютно правы. В сервисном модуле отсутствовал файл beans.xml. По какой-то причине я подумал, что это будет достаточным, если бы у него был только один модуль, поскольку все они упакованы в один файл уха. Спасибо, что доказали, что я ошибаюсь. – olada