4

我有一个现有的数据库(在我的例子中是 PostgreSQL),并且想通过 SOAP Web 服务访问它的数据(创建、读取、更新、删除、查询)。我们现在正在做的是,每个实体都有 JPA 实现,并且有一个通用 CRUD 接口的实现。然后我们将这些 bean 公开为 JaxWS Web 服务。这个设置的问题是 JaxWS 对通用接口的行为很奇怪。

由于这是一个常见问题,通过 WS 访问 DB,我想知道是否有开源解决方案,它将所有实体表公开为 Web 服务。这样的工具将需要一组 JPA 类(或一些其他数据描述),甚至一个 JDBC 连接(以拉出 SQL 模式)作为输入,并将生成一组 CRUD Web 服务。

理想情况下,这样的工具主要由一个 Servlet 组成,可以嵌入到任何 Web 应用程序中。

请告诉我您对此类工具的建议,如果您有任何使用它的经验,请分享。

谢谢你的建议

4

2 回答 2

3

很抱歉没有回答这个问题,而是说“你不想那样做”,但是......

首先,您可能不需要这样做。您的数据库是否已经直接公开了 Web 服务?例如,DB2 UDB 及其工具可以为您完成这项工作。根本不需要编写Java。

其次,也许你不应该这样做?将实体层直接公开为 Web 服务几乎是一种架构反模式。粒度往往会使服务效率低下并且难以长期维护。总体而言,Web 服务作为相当粗粒度的具有业务意义的服务往往会更好。例如,创建保险单可能需要对几个不同的表进行多次更新和插入。将原始表访问能力公开为 Web 服务意味着每个客户端都需要确切地知道要做什么。而是公开一个 Web 服务 CreatePolicy() 并让实现拥有粗糙的东西。

于 2009-09-04T16:46:39.460 回答
2

在我们的例子中,我们有一个多层架构,其中一个部分是存储。我不想丢失交易,但如果我必须通过 Web 服务插入新客户,并且我有客户服务及其架构定义,则可以自动生成。还要注意的是,据我所知,BPEL 2.0 支持事务,因此这些数据服务可以是事务感知的,即参与分布式事务。

创建新的 BLOG 条目是可以在专用事务中执行的操作。我们的项目中还有很多其他情况(几乎每个表),我们确实需要将它们暴露给外部系统。为什么要手写100遍。正如 ANTLR 的作者所说,如果你可以在 5 天内手动完成某件事,为什么不花 5 年时间来自动化它。

我不想花 5 年时间寻找现成的解决方案。目前我们已经完成了包括代码生成在内的半自动化任务,最大的问题是 JaxWS 不能很好地与泛型接口配合使用。

这种架构有它的优势,因为您可以做很多很酷的事情,例如: - 在您的实体类之上有一组注释,以检查 ROLE 权限。无论您如何访问您的实体、Web 服务或直接 java 调用,都会发生这种检查。您还可以定义钩子,例如为特定表上的所有操作生成 RSS/Atom 提要。- 有很多 GUI 工具支持 XSD 中描述的实体类型,用于自动创建表单。我不想生成所有的表单,但至少有一个默认实现,可以替换。

我正在寻找的实际上是一个数据访问抽象协议,它可以由数据库或其他东西支持,最终导出为 Web 服务(soap/restful/json 等等)

有这个 Apache 孵化项目,EmpireDB,它们的酷之处在于它们不使用注释并javaclasses定义模型,因此可以更轻松地使用元数据来创建 XSD 和表单。我没有使用非行业标准项目的乐趣,所以正在寻找基于标准技术的现成解决方案:JPA(例如休眠)、JaxWS。

于 2009-09-04T17:38:50.167 回答