【问题标题】:How to create a DAO/Service layer with Grizzly/JAX-RS如何使用 Grizzly/JAX-RS 创建 DAO/Service 层
【发布时间】:2013-02-14 14:55:00
【问题描述】:

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

【问题讨论】:

    标签: java jax-rs grizzly


    【解决方案1】:

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

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

    编辑

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

    【讨论】:

    • 为了回答您更新的问题,我在之前的回答中添加了 Spring。此外,您可以选择在您的 JAXRS 实现中实例化您的服务,并使您的 DAO 成为单例。
    • 当它们在我的 JAXRS 实现中被实例化时,你能提供一个代码示例吗?例如,我知道我可以做workflowservice = new WorkflowService();,但我如何将EntityManager 映射到DAO?我会将 @Singleton 添加到我的 DAO
    • 您可以只使用单例模式来使您的 DAO 成为单例;)请参阅 en.wikipedia.org/wiki/Singleton_pattern#Eager_initialization
    • 您能否提供有关我应该如何映射EntityManager 的任何见解?
    • 你可以使用EntityManagerFactory,虽然我不记得使用它的确切语法。
    猜你喜欢
    • 2023-03-09
    • 2016-01-24
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 2016-02-14
    相关资源
    最近更新 更多