代码之家  ›  专栏  ›  技术社区  ›  Ben

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

  •  0
  • Ben  · 技术社区  · 11 年前

    对于这个JAX-RS应用程序,我使用Grizzly而不是Glassfish。我是这项技术的新手,所以我一直在谷歌上搜索,似乎找不到如何在应用程序中设置Service/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;
        }
    }
    
    1 回复  |  直到 11 年前
        1
  •  1
  •   user1706698 user1706698    11 年前

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

    灰熊不是其中之一(相比之下,玻璃鱼是其中之一)。

    编辑

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