将数据库操作公开为Web服务

时间:2013-04-30 05:24:45

标签: web-services spring hibernate web-applications architecture

情景:

在我的项目中,我们有一个Web服务(Apache CXF,Hibernate和Spring)向第三方公开一些服务,Portal(Spring MVC,Portal和Hibernate)用于开发前端Web应用程序和一些Batch(Spring Batch) ,Hibernate)分开运行。

所有3个应用程序使用相同的数据库并具有映射&应用程序级别的实体经理。

问题:

上面的场景产生了几乎在3个地方更新相同映射的问题,我们也无法启用缓存,因为同一个实体将在多个应用程序中更新,每个应用程序都有独立的实体管理器。

我的解决方案:

我计划引入一个Web服务,它将负责所有数据库操作,并将被其他3个应用程序使用。所以它将避免上述问题。

您能帮助我微调我的解决方案或帮助我们获得最佳方法吗?

1 个答案:

答案 0 :(得分:0)

Ganesh,如您所述,在一个地方集中更新数据库将在这种情况下帮助您。您没有描述的是您如何公开Web服务以及理解表关系的实际工作。

通过进行更改可以获得的真正优势是在同一Web服务(或可能在其他位置)集中关于表更新的业务逻辑。然后,Web服务可以公开业务对象。

典型的简化示例:


    Business Purchase Order = Table Purchase Order
                            + Table Purchase Order Lines
                            + Stock Available reduced by Order Quantity

我想要的最后一件事是多个应用程序必须管理这些表更新,或者必须以紧密绑定的关系调用Stock应用程序以减少可用库存。但是,暴露业务采购订单并担心新Web服务中的相关表更新将确保每次提高系统的可维护性时都以相同的方式发生。

如果您将Web服务暴露视为对象组合,如下所示,那么您可能会考虑是否要重新考虑Web服务的实际操作以及是否需要另一层抽象,但这是一个较长的讨论


                    WEB SERVICE
               +-------------------+
               | Service Contract  |
               +---------+---------+
    Message -> | Message | Core    |
               + Parsing | Service | <-> Backend <-> Persistent Storage
    Message <- + Logic   | Logic   |     + other 
               +---------+---------+     Services

我希望我没有说明显而且这有帮助。祝你好运。