0

我有一个基于弹簧集成的事件驱动应用程序。该应用程序由 4 个模块组成:域(模型对象)、持久性(daos)、核心(基于 spring-integration 的 biz 逻辑)服务(MDB)。

每个模块都是一个 Maven 项目。该应用程序打包在 EAR 中并部署在 weblogic 上。

spring 上下文在所有模块之间共享。

现在我必须开发一个 web 应用程序来公开域的一个子集:所以我的控制器应该使用一些 daos 和一些域对象。处理这个问题的最佳实践是什么?Web 应用程序是否应该共享所有耳簧上下文?还是更好地创建一个“临时”Web 应用程序 Spring 上下文,在其中重新定义我需要的所有内容?(例如道)。

4

2 回答 2

1

似乎您会从功能分层中受益,例如instead of

|- 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 应用程序中,并且可以更灵活地包含/导入您的 webapp。

例如,您甚至可以broker.warproduct.war. 这也意味着您可以broker.war关闭product.war. 您可能在您的业务领域中不需要它,但它是一种很好的能力,只有在根据业务需求/领域而不是技术堆栈进行分层时才能实现。

顺便说一句,不需要EAR只为 MDB 复杂化,您可以使用 Spring 的消息驱动 POJO,它将由 Spring 容器简单地控制。

于 2011-10-03T13:52:11.523 回答
0

通常,您为每个DispatcherServlet创建一个特定的 WebApplicationContext,在其中放置所有与 Web 相关的东西,例如控制器、处理程序映射、视图解析器等。其余的应用程序上下文(例如服务、daos 等)是/配置在一个所有 servlet 共享的根 WebApplicationContext 。

示例web.xml

<web-app ...>

    <!-- Definition of the root web application context and shared by all servlets -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/dao-config.xml,/WEB-INF/other-config.xml</param-value>
    </context-param>

    <!-- Must be added to enable the configs above -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- Servlet specific application context that inherits bean definitions from the root application context. By convention, it is located in in /WEB-INF/[servlet-name]-servlet.xml -->
    <servlet>
        <servlet-name>yourservlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>yourservlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>

向下滚动到Spring MVC 参考文档中的图片“Spring Web MVC 中的上下文层次结构”以获取概述和更多详细信息。

于 2011-10-03T12:43:51.830 回答