私はEJBモジュールとGlassFish v3.1、Weld v1.1およびJerseyで動作するWebプロジェクトを持つエンタープライズプロジェクトに取り組んでいます。 EJBでは、エンティティクラスManufacturer
を定義し、セッションファサードManufacturerFacade
を生成しました。ジャージー(REST)サブリソースCDI
ウェブプロジェクトでは、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
はフレームワークによってインスタンス化されておらず、th私たちはManufacturerFacade
を注射していません。
私は単にコンストラクタでアイテムリソース(ManufacturerResource
)にコンテナリソース(ManufacturersResource
)からファサードを渡すことができますが、それは何とかDIは、同様にそれらの作業を取得するか、コンストラクタAを通過させている可能です知っています完璧な解決策はここにありますか?
ありがとうございます!
私はクラス 'ManufacturersResource'が' ManufacturersResourceController'と明確に名付けられていると思います。 – stratwine
あなたは正しいです。私はまだ足を濡らしてRESTに入れているので、私はまだリファクタリングしていませんが、私は行います。提案していただきありがとうございます! – Laurens