带有DTO和DAO的示例Java EE Web服务

时间:2016-02-09 11:18:42

标签: java java-ee ejb

我正在寻找实现DTO层和DAO层的J2EE Web服务的示例。我对所涉及的概念很熟悉,但我正在努力以有意义的方式将项目整合在一起。目前我有:

  • 一个Web服务(WAR)项目,它包含Web资源并具有 参考远程项目。
  • 具有EJB远程接口的远程(JAR)项目
  • EJB(JAR)项目,它具有EJB的实现以及DAO对象 - 实体和帮助程序DAO类。以及在DAO和DTO之间映射的映射器类。这引用了远程项目。

EJB执行从DAO到DTO的映射,并将DTO返回到Web服务类。

我一直在考虑将映射器类移动到Web服务项目中,因为这似乎是一种很好的做法 - 它释放了EJB来处理业务对象而不是DTO。

类的示例如下:

Web服务项目中的

PersonResource类:

@Path("/person")
@Stateless
public class PersonResource {
    @EJB
    private IPersonManagerRemote ejb;

    @GET
    @Produces("application/json")
    @Path("/{id}")
    public PersonDTO get(@PathParam("id") Long id) {
        return ejb.get(id);
    }
远程项目中的

IPersonManagerRemote接口:

@Remote
public interface IPersonManagerRemote  {
    public PersonDTO get(long id);
}
EJB项目中的

PersonManager实现:

@LocalBean
@Stateless
public class PersonManager implements IPersonManagerRemote {
    @Inject
    private IPersonDAO dao;

    @Override
    public PersonDTO get(Long id) {
        return PersonMapper.getInstance().map(dao.get(id));
    }
EJB项目中的

PersonMapper单例类:

public class PersonMapper {
    // Singleton creation code...

    public PersonDTO map(Person dao) {
         //Mapping code here to copy fields
    }
}

我排除了IPersonDao界面及其实施PersonDao,因为它们非常标准。

我试图将对mapper的调用移动到web资源,但是我需要在web项目和远程项目中引用EJB项目(对于DAO对象),这会导致循环引用,因为EJB项目引用Remote项目。

我的EJB类应该返回DTO或DAO对象吗?如果DAO那么映射代码应该在哪里?

1 个答案:

答案 0 :(得分:1)

您不希望移动dao并将代码映射到webapp。关注点分离。 webapp应该只需要知道服务api,其中dto是其中的一部分。