是否有一个开源工具,用于将现有数据库公开为一组WebServices

时间:2009-09-04 14:48:51

标签: java service crud

我有一个现有的数据库(在我的情况下是PostgreSQL),并希望通过SOAP Web服务访问其数据(创建,读取,更新,删除,查询)。 我们现在正在做的是,每个实体都有JPA实现,并且具有通用CRUD接口的实现。然后我们将这些bean公开为JaxWS Web服务。 这种设置的问题在于JaxWS在通用接口上表现得很奇怪。

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

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

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

谢谢你的建议

2 个答案:

答案 0 :(得分:3)

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

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

其次,也许你不应该这样做?它几乎是一种架构反模式,可以直接将您的实体层公开为Web服务。粒度趋向于使服务效率低下并且难以长期维护。大型Web服务往往更好,因为它具有相当粗糙的业务意义的服务。例如,创建保险单可能需要多次更新并插入到多个不同的表中。将原始表访问功能公开为Web服务意味着evey客户端需要确切知道要执行的操作。而是公开一个Web服务CreatePolicy()并让这个实体拥有粗糙的东西。

答案 1 :(得分:2)

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

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

我不想花5年时间,并寻找一个现成的解决方案。目前我们有半自动化的任务,其中包括代码生成,最大的问题是JaxWS与通用接口不兼容。

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

我正在寻找的,实际上是一个数据访问抽象协议,可以通过数据库或其他东西来支持,最终导出自己作为Web服务(soap / restful / json无论如何)

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