我有一个基于 spring 集成的事件驱动应用程序。 该应用程序由4个模块组成:领域(模型对象)、持久化(daos)、核心(基于spring集成的业务逻辑)服务(MDB)。
每个模块都是一个 Maven 项目。该应用程序打包在 EAR 中并部署在 weblogic 上。
spring 上下文在所有模块之间共享。
现在我必须开发一个 Web 应用程序来公开域的子集:因此我的 Controller 应该使用一些 daos 和一些域对象。 处理这个问题的最佳实践是什么? Web 应用程序是否应该共享所有耳簧上下文? 或者最好创建一个“临时”Web 应用程序 spring 上下文,在其中重新定义我需要的所有内容? (例如 daos)。
最佳答案
似乎您会从功能分层中受益,例如而不是
|- persistence (daos)
|- domain (model objects)
|- core (biz logic based on spring-integration)
|- services (MDB)
您可以以功能性的方式对您的应用程序进行分层。假设您的应用程序进行交易:
|- broker
|- product
|- underlying
|- option
|- future
|- forward
|- ..
|- feed
|- valuation
|- ...
在broker
下,您将拥有broker-persistence
、broker-service
等。当然,您应用程序的业务领域可能是不同,这是一个简单的例子,但它说明了这一点。
这样,您仍然可以将所有内容包含在您的 EAR
中,并且对于可以包含/导入到您的 Web 应用程序中的内容具有更大的灵 active 。
例如,您甚至可以创建与 顺便说一句,仅对于 MDB,无需使用 product.war
分开的 broker.war
。这也意味着您可以重新部署broker.war
,而无需关闭product.war
。您的业务领域可能不需要它,但这是一项很好的能力,只有根据业务需求/领域而不是技术堆栈进行分层时才能实现。/p>
EAR
让事情变得复杂,您可以使用 Spring 的 Message Driven POJOs它将由 Spring 容器简单地控制。
关于Java,使用spring配置企业应用程序和Web应用程序: should they share the spring context?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7632699/