Estoy trabajando en un proyecto empresarial que tiene un módulo EJB y un proyecto web ejecutándose en GlassFish v3.1, Weld v1.1 y Jersey. En el EJB he definido una clase de entidad Manufacturer
y he generado una sesión de fachada ManufacturerFacade
.Jersey (REST) Sub-recurso CDI
En el proyecto web deseo exponer Manufacturer
instancias a través de REST. Para hacerlo, creé los siguientes recursos:
El ManufacturersResource
es un recurso contenedor que devuelve una lista de todos los fabricantes almacenados en la base de datos. Lo hace inyectando el ManufacturerFacade
y llamando al método findAll()
. código abreviado:
@RequestScoped
@Path("/manufacturer")
public class ManufacturersResource {
@Inject
private ManufacturerFacade manufacturerFacade;
@GET
@Produces("application/xml")
public List<Manufacturer> getManufacturers() {
return manufacturerFacade.findAll();
}
}
Este recurso también tiene un sub-recursos:
@Path("{id}")
public ManufacturerResource getManufacturer(@PathParam("id") String id) {
return ManufacturerResource.getInstance(id, manufacturerFacade);
}
El ManufacturerFacade
es el siguiente:
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);
}
}
Estamos en una clase diferente sin embargo, y el marco ManufacturerResource
no está siendo instanciado por nosotros no tenemos el ManufacturerFacade
inyectado.
Sé que puedo simplemente pasan a la fachada del recurso contenedor (ManufacturersResource
) al recurso material (ManufacturerResource
) a través del constructor pero ¿es posible conseguir de alguna manera DI trabajando en ellos tan bien o está pasándolo a través del constructor de una solución perfectamente bien aquí?
Gracias!
Siento que la clase 'ManufacturersResource' sería más clara nombrada como' ManufacturersResourceController'. – stratwine
Tienes razón. Me estoy mojando los pies en REST, así que aún no he estado refabricando, pero lo haré. ¡Gracias por la sugerencia! – Laurens