[英]Java, configure enterprise application and web application with spring: should they share the spring context?
我有一個基於彈簧集成的事件驅動的應用程序。 該應用程序由4個模塊組成:域(模型對象),持久性(dao),核心(基於spring-integration的biz邏輯)服務(MDB)。
每個模塊都是一個Maven項目。 該應用程序打包在EAR中,並部署在weblogic上。
Spring上下文在所有模塊之間共享。
現在,我必須開發一個Web應用程序以公開域的子集:因此我的控制器應使用一些dao和某些域對象。 解決此問題的最佳實踐是什么? Web應用程序是否應該共享所有的彈簧上下文? 還是在我重新定義我需要的所有東西的基礎上創建一個“臨時” Web應用程序春季上下文更好? (例如daos)。
似乎您將從功能分層中受益,例如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
,並在可以包含/導入到Webapp中的內容上具有更大的靈活性。
例如,你甚至可以創建一個broker.war
從單獨的product.war
。 這也意味着您可以在不降低product.war
情況下重新部署 broker.war
。 您可能不需要在您的業務領域中使用它,但這是一種很好的能力,只有根據業務需求/領域(而不是技術堆棧)對事物進行分層時才能實現。
順便說一句,不需要只為MDB使EAR
復雜化,您可以使用Spring的消息驅動POJO ,它可以由Spring容器簡單地控制。
通常,您為每個DispatcherServlet創建一個特定的WebApplicationContext,並在其中放置所有與Web相關的內容,例如控制器,處理程序映射,視圖解析器等。其余應用程序上下文(例如服務,Dao等)在/所有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中的上下文層次結構”以獲取概述和更多詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.