Java 是否有开源工具,用于将现有数据库公开为一组Web服务

Java 是否有开源工具,用于将现有数据库公开为一组Web服务,java,service,crud,Java,Service,Crud,我有一个现有的数据库(在我的例子中是PostgreSQL),并且希望通过SOAP Web服务访问它的数据(创建、读取、更新、删除、查询)。 我们现在所做的,是每个实体的JPA实现,以及通用CRUD接口的实现。然后,我们将这些bean公开为JaxWS web服务。 这种设置的问题在于,JaxWS在使用通用接口时的行为异常 由于这是一个常见的问题,通过WS访问DB,我想知道是否有一个开源解决方案,它将所有实体表作为web服务公开。 这种工具需要输入一组JPA类(或其他一些数据描述),甚至需要一个JD

我有一个现有的数据库(在我的例子中是PostgreSQL),并且希望通过SOAP Web服务访问它的数据(创建、读取、更新、删除、查询)。 我们现在所做的,是每个实体的JPA实现,以及通用CRUD接口的实现。然后,我们将这些bean公开为JaxWS web服务。 这种设置的问题在于,JaxWS在使用通用接口时的行为异常

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

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

请告诉我你对这种工具的建议,如果你有使用它的经验,请分享


感谢您的建议

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

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


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

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

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

我不想花5年时间去寻找现成的解决方案。目前,我们已经实现了任务的半自动化,其中包括代码生成,最大的问题是JaxWS不能很好地处理通用接口

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

我要寻找的实际上是一个数据访问抽象协议,它可以由数据库或其他东西作为后端,并将自身导出为web服务(soap/restful/json等)


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

我同意。将实体层公开为web服务是个坏主意。您将失去数据库的一个主要功能—事务的ACID属性的功能。WS-AtomicTransaction允许您创建分布式事务,而不需要BPEL。它是否会表现良好是一个完全不同的问题。完全同意,如果您要这样做,那么工具就是最好的选择。您使用的是哪个数据库?没有对WS的本地和本地支持?你能用它自己生成代码吗?如果您正在生成的内容有一个常规模式,那么这可能非常容易。感谢您指出BPEL太多了。PostgreSQL,但我不知道它会自动进行WS-exposition。我确信甲骨文做到了。无法找到将JET嵌入标准maven build cicle的方法,因此我编写了一组groovy脚本,用于遍历模型类,并为JaxWS生成非通用接口/类。T