2016-02-09 135 views
-2

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

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

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

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

的类的实例如下:

PersonResource类Web服务项目:

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

PersonManager在EJB项目实施:

在EJB项目

PersonMapper单例类:

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

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

我已经排除了IPersonDao接口和它的实现PersonDao,因为它们是非常标准。

我试图将调用映射到Web资源,但是随后我需要在Web项目和远程项目中引用EJB项目(对于DAO对象),这会导致循环引用,因为EJB项目引用远程项目。

我的EJB类应该返回DTO还是DAO对象,如果DAO应该在哪里映射代码驻留?

+0

谢谢,我试图改进它。 –

回答

1

你不想移动dao并将代码映射到webapp。关注点分离。 webapp应该只需要知道dto的部分服务api。

+0

不完全是我的意思。服务外观是否应该意识到DAO,并且DAO和DTO之间的映射是在那里还是在较低的层次上发生?我同意表示层不应该知道DAO。 –

+0

是的,我当然希望你的网络服务,你认为可以在PersonResource中调用dao和映射,但不在表示层:)你期望通过这样做达到什么目的? –