この JAX-RS アプリケーションには、Glassfish の代わりに Grizzly を使用しています。私はこのテクノロジーに慣れていないので、いろいろと調べてみましたが、アプリケーションでサービス/DAO レイヤーをセットアップする方法の概要を見つけることができないようです。
以下は、私が持っている実用的なプロトタイプです。
マイ リソース
@Path("/helloworld")
@Stateless
public class MyResource {
@EJB //DOESN'T WORK - how do I map this service to this resource?
WorkflowService workflowService;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String TestRequest() {
Workflow workflow = new Workflow();
workflow.setName("test");
workflowService.save(workflow);
return "Workflow ID:";
}
}
マイダオ
public class WorkflowDao {
@PersistenceContext(unitName = "unit")
private EntityManager entityManager;
public int save(Workflow workflow) {
entityManager.persist(workflow);
return workflow.getId();
}
}
私のサービス
@Stateless
public class WorkflowService {
@EJB //I know EJB is probably wrong here, not sure what else to do yet.
WorkflowDao workflowDao;
public int save(Workflow workflow) {
int id = workflowDao.save(workflow);
return id;
}
}
更新- 私のセットアップでは EJB が動作しないことに気付きました。だから私の質問は、何をしますか? 自分のリソースでサービスにアクセスできるようにするにはどうすればよいですか?
-------------- 最終/作業コード --------------
リソース
@Path("/helloworld")
public class MyResource {
WorkflowService workflowService;
public MyResource() {
workflowService = new WorkflowService();
}
@GET
@Produces(MediaType.TEXT_PLAIN)
public String TestRequest() {
Workflow workflow = new Workflow();
workflow.setName("test");
workflowService.save(workflow);
return "Workflow ID:";
}
}
サービス
public class WorkflowService {
WorkflowDao workflowDao;
public WorkflowService() {
workflowDao = new WorkflowDao();
}
public int save(Workflow workflow) {
int id = workflowDao.save(workflow);
return id;
}
}
ダオ
@Singleton
public class WorkflowDao {
private EntityManager entityManager;
public int save(Workflow workflow) {
getEntityManager().persist(workflow);
return workflow.getId();
}
protected EntityManager getEntityManager() {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("unit");
EntityManager em = emf.createEntityManager();
return em;
}
}