2008-09-29 66 views
4

在我剛完成的項目中,我正在使分佈式事務工作。用Spring分離演示文稿和業務層

我們使用JBoss的Arjuna事務管理器和Spring的聲明式事務邊界來實現這個功能。

我們的請求序列看上去像:

browser -> secured servlet -> 'wafer-thin' SLSB -> spring TX-aware proxy -> request-handler POJO 

這是什麼意思是,我們有一個WAR服務於我們的安全的servlet和一個EAR爲我們的SLSB。

我們的SLSB有一個靜態初始化塊來引導我們的Spring應用程序上下文。

我不喜歡混合的技術,但我確實喜歡將演示文稿和業務層分開,這些層可能位於不同的物理位置。

我很想知道其他人在使用Spring時如何分層?

+0

SLSB爲您做了什麼?你可以在他們的地方使用http://static.springframework.org/spring/docs/2.0.x/reference/beans.html#beans-factory-scopes會話bean嗎? – MetroidFan2002 2008-09-30 22:30:03

回答

2

要求一個EJB3應用程序服務器僅用於作爲門面的SLSB,似乎不值得爲此付出努力。沒有理由不能刪除它,並讓你的servlet直接與Spring一起工作。您可以將ContextLoaderListener添加到WAR以加載您的ApplicationContext,然後加載WebApplicationContextUtils來獲取它。另外,如果你需要做的比Servlet自己允許的更多,你可以使用SpringMVC,Struts或其他Web技術。

2

一個非常典型的方法是定義一個Web層,一個服務層和一個DAO層,並將事務語義附加到服務層。例如,服務層可能是一羣使用@Transactional註釋的POJO。 Web層可能是Spring Web MVC控制器。在這種方法中,Web層基本上將服務層調整爲HTTP。良好的分離和無需SLSB在這裏。

儘管一個領域的爭論是關於域對象,比如Employee或PurchaseOrder或其他。這些跨越應用程序層和一個似乎與註釋有關的事情是域對象獲得與特定層綁定的註釋。因此,您可能在此處具有ORM註釋,但隨後使用相同的域對象作爲表單支持bean,以避免並行域/表單對象類。有些人反對說這違反了關注的架構分離。