Я работаю над корпоративным проектом, в котором есть модуль EJB и веб-проект, работающий на GlassFish v3.1, Weld v1.1 и Jersey.В EJB я определил класс сущности Manufacturer
и сгенерировал фасад сеанса ManufacturerFacade
.
. В веб-проекте я хочу представить Manufacturer
экземпляры через REST.Для этого я создал следующие ресурсы:
ManufacturersResource
- это контейнерный ресурс, который возвращает список всех производителей, хранящихся в базе данных.Это делается путем введения ManufacturerFacade
и вызова метода findAll()
.Сокращенный код:
@RequestScoped
@Path("/manufacturer")
public class ManufacturersResource {
@Inject
private ManufacturerFacade manufacturerFacade;
@GET
@Produces("application/xml")
public List<Manufacturer> getManufacturers() {
return manufacturerFacade.findAll();
}
}
Этот ресурс также имеет подресурс:
@Path("{id}")
public ManufacturerResource getManufacturer(@PathParam("id") String id) {
return ManufacturerResource.getInstance(id, manufacturerFacade);
}
ManufacturerFacade
выглядит следующим образом:
public class ManufacturerResource {
@Inject
private ManufacturerFacade manufacturerFacade;
private long id;
private ManufacturerResource(String id) {
this.id = Long.parseLong(id);
}
public static ManufacturerResource getInstance(String id,) {
return new ManufacturerResource(id);
}
@GET
@Produces("application/xml")
public Manufacturer getManufacturer() {
return manufacturerFacade.find(id);
}
}
Однако мы находимся в другом классе, и ManufacturerResource
не создается в фреймворке и поэтому не вводит ManufacturerFacade
.
Я знаю, что могу просто пропустить фасад изресурс контейнера (ManufacturersResource
) для ресурса элемента (ManufacturerResource
) через конструктор, но возможно ли как-то заставить DI работать и над ними, или здесь его передача через конструктор является идеальным решением?
Спасибо!