该项目在一个 JVM 上运行前端 Web 服务器,在另一个 JVM 上运行后端。为了让 web 在后端调用任何 biz-logic 方法,它必须通过 web 服务 (JAX-WS) 进行调用。
我可以理解,对于需要与其他系统集成的应用程序部分,通过使用 web 服务分发服务是一个好主意,但我还没有看到一个系统,其中每个biz 逻辑调用都暴露为 web服务.
表现?交易?总的来说是个好主意吗?
该项目在一个 JVM 上运行前端 Web 服务器,在另一个 JVM 上运行后端。为了让 web 在后端调用任何 biz-logic 方法,它必须通过 web 服务 (JAX-WS) 进行调用。
我可以理解,对于需要与其他系统集成的应用程序部分,通过使用 web 服务分发服务是一个好主意,但我还没有看到一个系统,其中每个biz 逻辑调用都暴露为 web服务.
表现?交易?总的来说是个好主意吗?
一般来说,如果您的“后端”(我称之为“服务”)旨在被其他应用程序重用,那么这种方法是一个好主意。
不过请注意,Web 服务只是系统之间的实际传输/消息接口。这里还有很多其他选项可以处理两者之间的接口——Java RMI、Spring 远程处理、REST 等。设计良好的服务解决方案将不知道您使用哪种消息传递技术(并且应该能够支持多个) .
我是 KISS 原则(保持简单愚蠢)的忠实粉丝。在 JVM 之间拆分应用程序并创建 WS 接口层需要有一个令人信服的理由。可能的原因包括需要以不同于业务层的方式扩展表示层。JVM 调优差异,例如不同的垃圾收集算法。或者需要一个 DMZ。
如果不存在令人信服的理由,那么分离会增加不必要的复杂性,这很可能会导致从开发到运营的麻烦。
将业务逻辑暴露给其他应用程序的需求并不代表在 JVM 之间拆分层的令人信服的理由。业务逻辑仍然可以通过 WS 为外部应用程序公开,而您的表示层物理上驻留在同一个 JVM 中,并通过业务服务的 POJO 实现直接引用业务层。虽然将有一个围绕 POJO 实现的 Web 服务包装器,将业务服务公开为 Web 服务。
您拆分应用程序的想法并不少见。当您的大多数服务都打算被重用时,最好将它们部署为单独的应用程序并将其解耦,以便其他系统可以轻松访问它们。它肯定会对性能产生一些影响,但从技术上讲,它不应该对事务产生任何影响(除非您需要在可以使用 WS-Reliability 的服务调用中进行事务处理)。