当客户端从服务器调用Web服务时,如何在共享库中使用服务器项目和客户端项目中的jpa实体类?

时间:2013-03-17 20:53:25

标签: java web-services jpa client-server

我正在使用netbeans并使用它从数据库生成实体类。

我有一个在服务器计算机上运行的项目,并使用此实体类提供Web服务。这些类在其他使用和转换实体类信息的管理器类中使用。

我必须在服务器项目和客户端项目中使用这些管理器类。如果我创建一个包含manager和entity类的库,我可以在两个项目中使用它们。问题是在Web服务客户端调用的客户端项目中生成了一个新类,因此我将在客户端中具有重复的逻辑 - 两个类将对应于一件事 - 首先是来自库的实体类,其次是从中生成的类网络服务客户端。

我怎样才能优雅地解决这个问题?

2 个答案:

答案 0 :(得分:0)

不确定它是否是最优雅的解决方案,但您可以创建DTO对象层(抽象层)。然后,您将在您的库中包含和使用这些DTO以及您的经理类。您可能需要将服务器端的实体类映射到这些DTO对象。并且还将客户端生成的对象映射到这些DTO对象 优势在于您的经理人现在独立于数据来源。应该是因为您使用它们一次使用来自DB的Entity类,一次使用从Web服务返回的对象。这样对我来说似乎更干净。

答案 1 :(得分:0)

首先,您应该针对接口编写与客户端相关的代码,而不是类。 See this reference, which demonstrates how to specify an explicit interface that both the client and server must implement

那就是说:如果你必须(重新)在客户端使用服务器端的JAXB类,那么你将无法利用生成的客户端工件的优势。这并不意味着您不能使用JAXB类。

使用JAX-WS Dispatch API直接使用JAXB工件(WSDL可选!)从客户端发送Web服务请求。

以下是参考describing the requirements

以下是一些例子: