真正的模塊化Web應用程序:為什么沒有開發標準?

OSGI , SpringSource , Jboss模塊 ,J2EE和清單永遠不會結束。所有這些技術都向他們的最終用戶/開發人員保證了相同的東西,或多或少是Java模塊化Web應用程序(?)。 但是,我們當中有多少人實際上已經嘗試過用Java開發REAL模塊化軟件系統? 我們中有多少人設法做到了? 您可能已經注意到,我已經將“真實”一詞大寫,但這并非偶然。 我將簡要解釋我的定義是什么:“真正的模塊化Java系統”。

恕我直言,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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374929.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374929.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374929.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言5-7習題

本題要求實現一個函數&#xff0c;用下列公式求cos(x)的近似值&#xff0c;精確到最后一項的絕對值小于e&#xff1a; #include <stdio.h> #include <math.h>double funcos( double e, double x );int main() { double e, x;scanf("%lf %lf", &…

JDBC批處理executeBatch

JDBC運行SQL聲明&#xff0c;有兩個處理接口&#xff0c;一PreparedStatement,Statement,一般程序JDBC有多少仍然比較PreparedStatement 只要運行批處理&#xff0c;PreparedStatement少一點Statement ps conn.prepareStatement(sql); for(int i 0;i<10;i){ ps.setString(…

BC div2補題以及 復習模除 逆元__BestCoder Round #78 (div.2)

第一題沒話說 智商欠費 加老柴輔導終于過了 需要在意的是數據范圍為2的63次方-1 三個數相加肯定爆了 四邊形的定義  任意邊小于其余三邊之和 換句話說就是  最長邊小于其余三邊之和 這樣的話問題轉化為 最長邊依次減其余三邊的結果是否小于等于0 還有一點是題目出現0邊 即最…

習題6-1 分類統計字符個數 (15 分)

本題要求實現一個函數&#xff0c;統計給定字符串中英文字母、空格或回車、數字字符和其他字符的個數。 函數接口定義&#xff1a; void StringCount( char s[] );其中 char s[] 是用戶傳入的字符串。函數StringCount須在一行內按照 letter 英文字母個數, blank 空格或回車…

Servlet 3.0異步處理可將服務器吞吐量提高十倍

Servlet是Java中處理服務器端邏輯的主要組件&#xff0c;新的3.0規范引入了一些非常有趣的功能&#xff0c;其中異步處理是最重要的功能之一。 可以利用異步處理來開發高度可伸縮的Web應用程序。 使用此功能可以有效地構建Web 2.0站點和AJAX應用程序。 我們的JCG合作伙伴之一To…

使用secureCRT連接VMware-Ubuntukylin虛擬機

使用SecureCRT連接VMware時總是提醒主機拒絕連接。這時可以使用sudo apt-get install openssh-server openssh-client&#xff0c;在主機上安裝ssh. 安裝成功后&#xff0c;可以連接到主機了。 如果顯示遠程主機拒絕連接。則可以使用如下方法。 VMware里面裝的是Ubuntukylin版本…

加載音頻Audio

var cameraAudio new Audio(); cameraAudio.src camera.wav;// 設置音頻對象的屬性,預加載視頻 var options_audio { preload : auto } for(var key in options_audio){ if(options_audio.hasOwnProperty(key) && (key in cameraAudio)){ cameraAudio[key] opti…

習題6-2 使用函數求特殊a串數列和 (20 分)

給定兩個均不超過9的正整數a和n&#xff0c;要求編寫函數求aaaaaa?aa?a&#xff08;n個a&#xff09;之和。 int fn( int a, int n ); int SumA( int a, int n );其中函數fn須返回的是n個a組成的數字&#xff1b;SumA返回要求的和。 我的代碼&#xff1a; int fn( int a, i…

Java中可怕的雙重檢查鎖定成語

本文討論的問題不是新問題&#xff0c;但即使是經驗豐富的開發人員也仍然很棘手。 單例模式是常見的編程習慣。 但是&#xff0c;當與多個線程一起使用時&#xff0c;必須進行某種類型的同步&#xff0c;以免破壞代碼。 Khangaonkar報告中的 JCG合作伙伴Manoj Khangaonkar在一篇…

國內有哪些好的刷題網站?

http://www.zhihu.com/question/25574458 Luau Lawrence&#xff0c;Data Mining 弱雞 / PhDNTU 溫夢強、石一帆、知乎用戶 等人贊同 - Welcome To PKU JudgeOnline 北京大學的Online Judge。POJ上面的題目有點老了&#xff0c;但好處是做的人多&#xff0c;經典算法題多&…

IE版本判斷

我們常常會在網頁的HTML里面看到形如[if lte IE 9]……[endif]的代碼&#xff0c;表示的是限定某些瀏覽器版本才能執行的語句&#xff0c;那么這些判斷語句的規則是什么呢&#xff1f;請看下文&#xff1a; <!--[if !IE]><!--> 除IE外都可識別 <!--<![endif]…

Js 流程控制

流程控制 順序、分支、循環 順序結構 代碼一行一行從上往下執行并解析 分支結構 if語句 switch語句 if語句 單分支 if(條件表達式){ //語句塊 } 含義&#xff1a;當條件表達式為真的時候就執行里面的語句塊 示例&#xff1a; 雙分支&#xff1a; if(條件表達式){ //語句塊1 }el…

習題6-3 使用函數輸出指定范圍內的完數 (20 分)

本題要求實現一個計算整數因子和的簡單函數&#xff0c;并利用其實現另一個函數&#xff0c;輸出兩正整數m和n&#xff08;0<m≤n≤10000&#xff09;之間的所有完數。所謂完數就是該數恰好等于除自身外的因子之和。例如&#xff1a;6123&#xff0c;其中1、2、3為6的因子。…

速覽Java 7 MethodHandle及其用法

由于Java的Reflection API&#xff0c;我們已經能夠在運行時檢查和更改程序執行。 特別是&#xff0c;我們可以在運行時觀察接口/類/方法和字段&#xff0c;而在編譯時不知道它們的名稱。 JDK 7為這種動態/運行時檢查引入了一個新的參與者&#xff0c;即方法句柄&#xff08;即…

習題6-4 使用函數輸出指定范圍內的Fibonacci數 (20 分)

本題要求實現一個計算Fibonacci數的簡單函數&#xff0c;并利用其實現另一個函數&#xff0c;輸出兩正整數m和n&#xff08;0<m≤n≤10000&#xff09;之間的所有Fibonacci數。所謂Fibonacci數列就是滿足任一項數字是前兩項的和&#xff08;最開始兩項均定義為1&#xff09;…

SmartGWT入門,提供出色的GWT界面

SmartGWT簡介 我最近開始使用SmartGWT &#xff0c;它是一個基于GWT的框架&#xff0c;該框架為您的應用程序UI提供了一個全面的小部件庫&#xff0c;并為服務器端的數據管理提供了幫助。 您可以在SmartGWT展示柜上查看其漂亮的功能。 我準備了一個簡短的“入門”指南&#xf…

Android OpenGL ES(四)----調整屏幕的寬高比

1.寬高比問題 我們現在相當熟悉這樣一個事實&#xff0c;在OpenGL里&#xff0c;我們要渲染的一切物體都要映射到X軸和Y軸上[-1&#xff0c;1]的范圍內&#xff0c;對于Z軸也一樣。這個范圍內的坐標被稱為歸一化設備坐標&#xff0c;其獨立于屏幕實際尺寸或形狀。 不幸的是&…

使用Spring AOP進行面向方面的編程

面向方面的編程&#xff08;AOP&#xff09;是指將輔助功能或支持功能與主程序的業務邏輯隔離開來的編程范例。 AOP是用于分離橫切關注點的有前途的技術&#xff0c;這在面向對象的編程中通常很難做到。 以此方式增加了應用程序的模塊化&#xff0c;并且維護變得非常容易。 橫切…

面試題24 二叉搜索樹的后序遍歷序列

題目描述 輸入一個整數數組&#xff0c;判斷該數組是不是某二叉搜索樹的后序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。1 class Solution {2 public:3 bool VerifySquenceOfBST(vector<int> sequence) {4 if (seque…

習題6-5 使用函數驗證哥德巴赫猜想 (20 分)

本題要求實現一個判斷素數的簡單函數&#xff0c;并利用該函數驗證哥德巴赫猜想&#xff1a;任何一個不小于6的偶數均可表示為兩個奇素數之和。素數就是只能被1和自身整除的正整數。注意&#xff1a;1不是素數&#xff0c;2是素數。 函數接口定義&#xff1a; int prime( int…