2012-08-09 39 views
1

我想知道我的項目是否應作爲單個應用程序部署,或者由RMI進行通信的單獨應用程序。對此有一個普遍的共識,或者是否達到個人要求或項目?我想單獨的應用程序方法是更靈活/可擴展的,但是從很多方面來看,這意味着犧牲一些相當基礎的技術,如事務和延遲加載。鬆耦合模塊/單獨部署是否可以提高可伸縮性?

這可能是有用的描述項目結構作爲談論的焦點:

目的:農業分析Web應用程序

動物項目 管理一切周圍的動物,他們的名字,花多少錢,這場裏他們一直住在

拖拉機項目:拖拉機擁有類型的發動機,維護工作進行

員工的項目:在農場,工資,假期的員工,員工等級

farm-project:迄今爲止具有任何依賴性的第一個項目。取決於所有3個以上的項目,將哪些動物在哪些拖拉機上行駛,哪些員工可以駕駛哪些拖拉機,以及何時他們已經計劃好這樣做,哪些員工管理哪些動物

farm-web-app:front-最終呈現可以從上述任何項目中獲得的任何信息。

目前這是我有的結構,其中前4個項目作爲獨立的jar運行,farm-web-app部署在tomcat中。所有應用程序都通過rmi進行通信,除了農場項目和動物項目以外,因爲動物項目中的域對象被存儲在農場項目的實體中。值得注意的是我使用Spring而不是Java EE。

我很確定這是一個非常低效的結構 - 通過rmi查詢的域對象必須放入dto中或不使用延遲加載。

任何意見/經驗將不勝感激

回答

0

我認爲,邏輯師!=物理師。
您仍然可以在不同的模塊中使用相同的應用程序運行不同的「項目」。
原因是這些模塊的責任是代表問題域的對象和邏輯;他們的責任不是溝通,應用程序生命週期管理等。他們不應該關心他們在哪裏運行,由誰,以及在什麼機器/線程上。

如果您遵循模塊中的單一責任規則,您會發現可以在同一應用程序中將它們全部運行,而不會增加耦合級別。

+0

我的目標之一是最大限度地減少停機時間,所以我覺得有用的是能夠重新啓動拖拉機項目,而無需重新啓動farm-project和farm-web-app。這是可能的,如果他們在一個部署? – James 2012-08-10 08:08:52

+0

我不這麼認爲。但是如果你能夠更詳細地描述你的場景(例如你期望什麼樣的停機時間),也許我們可以想出一些東西。 – 2012-08-10 14:49:18

+0

一個示例是tractor-project偵聽電子郵件帳戶以檢索附件並加載到數據庫中。他的電子郵件鏈接有一種傾向,我沒有時間來解決它。爲了再次使用它,我只需重新啓動拖拉機項目應用程序。這意味着在Web應用程序中沒有任何會話丟失,沒有人更聰明。 另一個例子是,服務器A上可能有一個託管拖拉機項目的部署,而服務器B和C上可能有兩個其他項目的部署。這意味着電子郵件只能在一個地方加載。 – James 2012-08-10 16:28:05