我正在開發一個企業項目,該項目具有在GlassFish v3.1,Weld v1.1和Jersey上運行的EJB模塊和Web項目。在EJB中,我定義了一個實體類Manufacturer
並生成了一個會話外觀ManufacturerFacade
。Jersey(REST)子資源CDI
在Web項目中,我希望通過REST公開Manufacturer
實例。爲此,我創建了以下資源:
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
沒有被框架實例化,而th我們沒有注入ManufacturerFacade
。
我知道我可以簡單地通過構造函數傳遞從容器資源(ManufacturersResource
)的項目資源(ManufacturerResource
)的門面,但它可能以某種方式得到DI對他們的工作,以及或將其通過構造一個這裏完美的解決方案?
謝謝!
我覺得'ManufacturersResource'類更清晰,命名爲'ManufacturersResourceController'。 – stratwine
你說得對。我只是在REST中弄溼了自己的腳,所以我還沒有重構過,但我會的。感謝您的建議! – Laurens