Мое приложение разворачивается в IBM WebSphere. У меня есть простой сервис, и я хотел бы знать, как в этом случае работает внедрение зависимостей.
// stateless EJB
@Stateless
public class UserService {
private UserDAO userDAO;
// btw, UserDAO is stateless EJB as well
@Inject
public UserService(UserDAO userDAO) {
this.userDAO = userDAO;
}
// biz methods ...
}
Сбой из-за следующей ошибки:
[ОШИБКА] CWWKZ0002E: Возникла исключительная ситуация при запуске
приложение my-app. Сообщение об исключении было:
com.ibm.ws.container.service.state.StateChangeException:
com.ibm.ws.cdi.CDIException:
com.ibm.wsspi.injectionengine.InjectionException:
com.ibm.ejs.container.EJBConfigurationException: класс EJB
com.demo.app.UserService должен иметь
открытый конструктор, который не принимает параметров
Я помню, что в спецификации EJB было что-то, что говорит: the class must have a public constructor that takes no parameters
, и для меня имеет смысл, что экземпляр компонента сначала создается контейнером, а затем выполняется внедрение зависимостей .
С другой стороны, я нашел это в WELD документах:
Во-первых, контейнер вызывает конструктор бина (по умолчанию
конструктор или аннотированный @Inject), чтобы получить экземпляр
боб.
И я немного запутался, почему мой EJB не может быть создан.
Как создается экземпляр EJB и внедряются зависимости, когда у нас есть точка внедрения конструктора?
Есть идеи? :)