恕我直言,REAL軟件模塊至少應具有用于業務邏輯,持久性,用戶界面和配置的部件。 在理想情況下,軟件模塊應該能夠在運行的應用程序中輕松插入和拔出,而無需重新啟動它。 例如,在J2EE應用程序服務器(例如Jboss或GlassFish)中,正在運行的應用程序(核心系統)是.war文件。 開發了核心系統的其他一些模塊(包含上述部分),并將其打包在單獨的jar文件中。 這些jar文件應該部署在應用服務器中,并與核心系統集成(通過業務邏輯和用戶界面中的某些擴展點),而無需重新部署它。 我們可以做這樣的事情嗎?
讓我們看看相關技術對此有何建議。 自從JBoss Modules邁出第一步以來,我一直是它的粉絲,而在最近發布的JBoss AS最新版本之后,我希望看到它們的實際應用。 說實話,JBoss模塊提供了一種非常簡單方便的方法來定義模塊之間的依賴關系。 糟糕! 我寫了“模塊”嗎? 這些是什么樣的模塊? 它們可以包括業務邏輯,配置,數據模型,但是用戶界面呢? 不幸的是,沒有任何提及,經過一番研究,我發現JBoss模塊中的模塊化概念不包含任何用戶界面。
OSGI呢? 構建模塊化應用程序的最有前途的方式。 如今, OSGI已獲得許多應用程序服務器的支持,盡管其配置看起來像是工業革命時代的恐龍,但它似乎是一種非常不錯的方法。 大量可用的服務,使用的許多框架,當然也沒有引用任何用戶界面功能。 另一方面,正如相關文章所暗示的, Vaadin與OSGI很好地集成(?)以構建模塊化的Web應用程序。 我想知道是否有使用OSGI和Vaadin開發的真實/生產性模塊化企業應用程序。
Spring是SpringSource的獨立框架, SpringSource目前是開發Java企業應用程序的領導者。 與OSGI結合使用的Spring動態模塊被認為是構建動態和模塊化Web應用程序的最復雜的方法,但是我仍然感到即使Spring也無法解決我提出的問題。 根據我的研究經驗,將上述技術集成到模塊化系統中是一項艱巨的任務。
最后但并非最不重要的是J2EE。 Web的最新版本和完整的配置文件規范已將J2EE轉換為非常強大的框架集。 JSF2和CDI以及所有新功能極大地提高了它在Java開發人員中的知名度。 當我第一次閱讀本文時 ,我相信最終我找到了模塊化Web應用程序的標準解決方案。 盡管每個jar可以包含所有不同的部分:使用EJB和CDI的業務邏輯,使用JPA及其實現的持久性,使用JSF及其實現的配置和用戶界面),根據此問題 ,無法將帶有JSF組件的jar作為單獨的組件來處理模塊。 再一次失望。 J2EE中的模塊應該是一次打包的jar。 太接近了!! 我猜,我們必須等到JSF 2.2的發布以及幾個月后才能獲得最知名的應用程序服務器的支持。
由于沒有用于構建模塊化系統的標準,因此許多知名項目都基于上述框架之一或從頭開始開發了自己的模塊系統。 SonarSource的Jenkins , Atlassian的Jira和Sonar都是基于Java的應用程序,具有強大的模塊/插件系統。 您按照一些準則開發插件(包括用戶界面),然后通過模塊/插件管理器將其部署為單個jar。 在大多數情況下,您需要重新啟動系統,但是我認為這不會打擾任何管理員,因為您可以輕松地增加軟件的功能。
所以我的困境仍然有效。 我應該開始構建自己的模塊/插件系統還是應該等待標準出臺并促進全球模塊化Web應用程序的開發? 我不知道為什么這種標準化尚不可用,為什么我們不得不在所有這些技術和框架中最終嘗試(仍然沒有資源)! 我們是否接近開發真正的模塊化企業Web應用程序的標準?
參考: 為什么沒有用于開發真正的模塊化Web應用程序的標準? 從我們的JCG合作伙伴 Patroklos Papapetrou在Only Software Matters博客上獲得 。
相關文章 :
- OSGi將Maven與Equinox結合使用
- Tomcat中的零停機部署(和回滾); 演練和清單
- Java Code Geeks Andygene Web原型
- Java最佳實踐系列
- Java教程和Android教程列表
翻譯自: https://www.javacodegeeks.com/2011/09/real-modular-web-applications-why-there.html