2013-03-28 99 views
6

我們必須開發和維護許多不同大小,範圍和壽命的基於Java Web應用程序(對於同一家公司)。其中一些是巨大的,而其他的只是簡單的頁面,可能只存活幾個月(或幾天),一些已經實現並需要重構。如何在多個應用程序之間共享業務邏輯

雖然有一個共同點,但它們需要訪問(幾乎)相同的信息。

問題

由於公司處理數據的複雜性,我們必須處理許多不同的來源,有些是從古代繼承。我們的域對象可以映射到這些源中的很多。例如,合同域對象映射到我們的主數據庫,但其相關的(物理)文件存儲在文檔服務器中,並且與其相關的活動存儲在NoSQL數據庫中。因此,添加,刪除,搜索這些對象都涉及許多內部操作。

我們的數據來源是(儘管它可以是任何):

  • AS400(使用DB2數據庫)
  • Documentum的文檔管理器
  • 蒙戈DB
  • 外部Web服務
  • 其他傳統來源

我們通常使用格拉斯sfish作爲應用程序服務器,maven作爲我們的構建工具。

目標

我們的目標是創建一個業務層或庫,我們所有的應用程序都可以訪問,它是:

  • 緊湊
  • 使用方便
  • 易於維護
  • 無障礙從人Ÿ不同客戶

我們迄今

發現我們一直在掙扎周,我們仍然找不到任何完全令人滿意。一些解決方案:

  • 包在一個或多個罐子所有的業務邏輯:很容易共享,但所有的應用程序必須包含所有依賴的JAR文件和配置文件和照顧的安全性,緩存和其他的東東。難以維護(當有變化時,我們必須更新每個項目的罐子)。

  • 創建一個包含所有邏輯的EJB項目和遠程訪問:易於維護,安全性,緩存和配置只實施一次。我們害怕遠程通話的處罰。正如我們在研究中注意到的那樣,這似乎是一種不好的做法(我們對ejbs沒有多少經驗)。

  • 創建一個耳內項目,並使用本地訪問:嗯,這比遠程版本更快,但它是一個地獄來維護。

  • 去OSGI:我們有點害怕這個,因爲它不像Ejb那麼受歡迎,我們從來沒有認真對待它。

這種問題有沒有常見的做法?

非常感謝!

+0

這樣的工具,因爲我做了一些EJB。你能解釋爲什麼你需要單獨的BL。對於數據方面,你使用的是DAO模式?是否有可能通過這些映射到多個來源?應該可以管理多個數據源。 – 2013-03-28 09:50:22

+0

感謝您的超快速答案!這實際上是主要想法。我們想使用DAO來封裝所有的髒東西。問題是如何從'客戶'應用程序訪問這些DAO。 – danielsan 2013-03-28 09:55:53

+0

如果您正在構建一個全新的應用程序,我會推薦一種osgi方法。但是我不會推薦它,如果你打算移植很多東西,並且如果這個團隊是osgi的新手。 – techuser 2013-03-29 04:43:58

回答

2

我不建議把所有的邏輯放到1個EAR項目中並使用本地訪問。如果你在一個地方有很多代碼,它將很難保持,測試,部署等。

我會創建具有公共依賴項的mutlti-module maven項目。其中一個依賴 - 具有業務邏輯和DAO訪問的服務,它將公開API。藉助Maven項目,您可以輕鬆控制POM文件的版本。不同的項目可能適用於不同版本的通用服務。 Maven將爲您處理版本控制。但是這需要一些配置和實施工作。

您提到的另一個選項 - 獨立的EAR與遠程EJB應該也可以正常工作。不要擔心遠程通話的性能和數量,除非您負擔過重。簡單地在客戶端緩存遠程EJB存根,以避免不必要的JNDI查找。

我個人更喜歡Maven管理的共享依賴項的第一個選項。它清晰易維護,易於管理版本,部署和配置。有了Maven,你不需要爲每個項目手動更改jar文件,你可以簡單地使用像Nexus

+0

謝謝安東。到目前爲止,我們有一個由6個模塊組成的多模塊maven項目(所有業務邏輯和域對象)。我理解你的意思是我們可以將每個客戶端應用程序作爲另一個獨立的Maven項目並將Business API作爲依賴項調用,對嗎?在這種情況下,這意味着我們將爲每個客戶端應用程序部署一個Business API,在這種情況下,我們必須使用不同的應用程序服務器。 – danielsan 2013-03-28 10:29:27

+0

是的,如果您提取業務邏輯來分離Maven項目,則可以將其作爲依賴項包含在所有應用程序中。在這種情況下,如果需要,可以使用不同的應用程序服務器 – Anton 2013-03-28 10:42:04

相關問題