0

设想:

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

所有 3 个应用程序都使用相同的数据库并在应用程序级别具有映射和实体管理器。

问题:

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

我的解决方案:

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

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

4

1 回答 1

0

Ganesh,如您所描述的将您对数据库的更新集中在一个地方将在这种情况下为您提供帮助。您没有描述的是如何公开 Web 服务以及理解表关系的真正工作发生在哪里。

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

一个典型的简化示例:

    业务采购订单 = 餐桌采购订单
                            + 表采购订单行
                            + 可用库存按订单数量减少

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

如果您将 Web 服务公开视为对象的组合,如下所示,那么您可能会考虑是否要重新考虑 Web 服务真正在做什么以及是否需要另一层抽象,但这是一个更长的讨论。

                    网络服务
               +-------------------+
               | 服务合同 |
               +---------+---------+
    留言 -> | 留言 | 核心 |
               + 解析 | 服务 | <-> 后端 <-> 持久存储
    消息 <- + 逻辑 | 逻辑 | + 其他
               +---------+---------+ 服务

我希望我没有只是说显而易见的,这会有所帮助。祝你好运。

于 2013-04-30T23:42:07.820 回答