如何使用Grizzly / JAX-RS创建DAO / Service层

时间:2013-02-14 14:55:01

标签: java jax-rs grizzly

我在这个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;
    }
}

DAO

@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;
    }
}

1 个答案:

答案 0 :(得分:1)

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

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

修改

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