簡體   English   中英

如何在多個應用程序之間共享業務邏輯

[英]How to share business logic among multiple applications

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

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

問題

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

我們的數據來源(盡管可能是任何數據源):

  • AS400(使用DB2作為數據庫)
  • Documentum文檔管理器
  • Mongo DB
  • 外部Web服務
  • 其他遺留資源

我們通常使用Glassfish作為應用程序服務器,maven作為構建工具。

目標

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

  • 緊湊
  • 易於使用
  • 易於維護
  • 可從許多不同的客戶訪問

到目前為止我們發現了什么

我們已經掙扎了幾個星期,但我們仍然找不到任何完全令人滿意的東西。 一些解決方案

  • 將所有業務邏輯打包在一個或多個jar中:非常容易共享,但所有應用程序都必須包含所有jar依賴項和配置文件,並負責安全性,緩存和其他內容。 難以維護(當有變化時,我們必須更新每個項目的罐子)。

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

  • 創建一個包含所有內容的Ear項目並使用本地訪問:嗯,這比遠程版本更快,但它是一個地獄維護。

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

這種問題是否存在常見做法?

非常感謝!

我不建議將所有邏輯放入1個EAR項目並使用本地訪問。 如果你在一個地方有很多代碼,那么維護,測試,部署等將會更加困難。

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

您提到的另一個選項 - 帶有遠程EJB的獨立EAR也應該可以正常工作。 除非您負載過重,否則不要擔心遠程呼叫的性能和數量。 只需在客戶端緩存遠程EJB存根,以避免不必要的JNDI查找。

我個人更喜歡Maven管理的共享依賴的第一個選項。 它易於維護,易於管理,部署和配置。 使用Maven,您無需為每個項目手動更改jar文件,您只需使用Nexus等工具即可

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM