0

对于这个 JAX-RS 应用程序,我使用 Grizzly 而不是 Glassfish。我是这项技术的新手,所以我在谷歌上搜索了很多,似乎无法找到如何在我的应用程序中设置服务/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;
    }
}
4

1 回答 1

1

我不确定我能不能完全回答你的问题。但我可以告诉你,这@EJB是 JavaEE 6 的一部分,只能在 WebApplication Server 中运行。

Grizzly 不是其中之一(与 Glassfish 相比)。

编辑

如果要进行依赖注入,可以使用 Spring 框架。

于 2013-02-14T14:59:58.473 回答