理解Java應用伺服器的七種「武器」

2021-02-15 CIO時代網

       在意識到軟體架構的重要性後,應用伺服器必然成為程式設計師的一件必不可少的"武器"。對應用伺服器技術的透徹理解可以為程式設計師提供認識軟體架構的更大的空間,這種方式影響著軟體工程學文化。它接下來會用一些有用的工具來武裝現代的IT人,提升價值鏈。

 

  本文標題中出現的數字七隻是能夠讓我們同時記住的條目數量--我不希望給讀者的壓力過大。

 

  第一種武器:信心——理解應用伺服器並不困難

 

  某些技術創造自己的傳奇的方法是很有趣的。我還記得自己在作為程式設計師時處理包含原始碼注釋(例如"不要放入此處"或者稍微文雅一點"此處危險")的產品。我們感覺非常複雜的代碼是不可管理的。應用伺服器也成了相似的情況,人們毫無理由地恐懼的領域。在市場上,很多僱主把人們對於應用伺服器的應用知識作為強制性的工作要求。實際上應用伺服器並不是很複雜。例如,Sun微系統公司在自己的基於J2EE的應用伺服器中包含了大量的文檔信息。你甚至於可以免費下載它,並在一個很基本的Windows XP專業版計算機上運行那些優秀的示例。

 

  Sun的教程記述了大量的代碼示例,演示了J2EE和該公司的應用伺服器產品的優勢和易用性。閱讀這些文檔是有價值的,因為它為我們洞察這種極其重要的軟體技術的工作情況提供了入口。Sun的競爭者還有BEA、IBM和開放原始碼應用伺服器JBOSS。

 

  BEA甚至於把應用伺服器作為它的"透明計算"的第一步。它具有面向服務的架構的優點,在面向服務的架構中,我們可以利用舊的和新的應用程式來簡化不斷增長的敏捷型組織對服務的需求。BEA的觀點是可能出現一種情況:公司改變它們的IT系統和業務流程可以像從一個應用程式中剪切數據然後粘貼到另一個應用程式中那樣簡單。其要點在於這種努力是基於應用程式伺服器技術的。

 

  很明顯,應用伺服器是成熟的軟體工業中的重要元素。它們內容豐富,並且依靠集中的應用程式管理,允許數據的集中存儲。這種技術是可以使用並且不難理解的。

 

  第二種武器 平臺性——應用伺服器是一種軟體平臺

 

  應用伺服器趨向於減少企業需要的中間件數量--因為它們是中間件!與包含了防火牆的Windows類似,應用伺服器可能吸收一些現有的中間件產品所扮演的角色。這是因為應用伺服器自身就是用於軟體部署以供多個客戶端使用的平臺。在應用伺服器中使用的軟體有截然不同的生命周期,包括:

 

  開發者建立應用程式或組件

  包裝成可部署的元素

  部署在應用伺服器平臺上

  被最終用戶使用

  在再次部署中由開發者更新特性或修補

  應用程式達到使用壽命後期的時候收回

 

  在很多情況下,它與"正常的"應用程式軟體的管理方式是不同的。這一點對於多層分布式軟體系統尤其突出(在這種情況下客戶端用戶與後端伺服器應用程式交互操作)。應用程式伺服器與多層軟體應用程式套件之間最主要的區別在於,應用伺服器提供了大量的軟體包裝支持。換句話說,應用伺服器為很多領域(例如線程管理、資料庫連接、網絡訪問等等)提供了運行時(runtime)支持。應用伺服器中的這些設施都是自由使用的,但是在傳統的軟體套件中,它們一般要求人們手動編寫代碼來實現。

 

  簡單的說,應用伺服器有效地分割了主機平臺與應用程式軟體的業務邏輯。通過提供對軟體的大量支持,應用伺服器技術允許軟體設計者和開發者將精力集中在解決自己特定領域的問題上。適當地使用應用伺服器技術可以減少軟體開發的費用。[page]

 

  在上面的軟體生命周期中,我們把標準的應用伺服器工具(例如基於ant的工具)當作專用工具來使用。其它的一些與J2EE應用伺服器部分綁定的應用程式還包括:

 

  管理控制臺

  部署工具

  調試工具

  J2EE兼容性檢測程序

 

  管理控制臺用於管理應用伺服器上執行的軟體,例如激活/不激活、列舉組件等等。部署工具用於為應用伺服器環境準備軟體。調試工具用於輔助解決那些發生的問題。J2EE兼容性檢查對於新軟體的作者來說是非常重要的,因為J2EE組件與標準的Java類是不同的。

 

  Sun的文檔表明應用伺服器軟體產品的生產事務是可以在專家之間進行分工的。程式設計師編寫和測試原始碼,接著把這些原始碼傳遞給部署人員。部署人員準備並包裝軟體供我們在應用伺服器上使用。在這個時候,軟體可能被傳遞迴程式設計師以供調試和集成測試。另一組專家可以檢測該軟體的J2EE兼容性。其要點是一個或多個稱職人員可以執行這麼多不同的複雜的事務。

 

  數據集中管理器對應用伺服器下運行的應用程式擁有更大的控制權。這意味著企業中運行的軟體可以在同一個平臺上集中地管理和部署。在某些方面,應用伺服器技術使我們"後退"到了大型機時代的軟體部署情形。反對的觀點認為這種模型使客戶端不需要寄宿和執行大量的代碼,但是在客戶端上執行比在一個或多個應用伺服器上執行的效率更高;同樣,由於帶寬的迅速擴大,帶寬的約束力也逐步縮小。

 

  第三種武器 技術傳承——應用伺服器是基於組件的

 

  J2EE應用程式遵循廣泛採用的面向組件的方法。它們被分割成運行在客戶端或伺服器上的應用程式。客戶端寄宿應用程式和applets,伺服器寄宿Java小伺服器程序、JavaServer頁面和企業級JavaBean(EJB)技術。

 

  可以在應用伺服器上部署的主要的組件文件類型有:Web檔案文件(WAR)和企業級jar(EAR)文件。客戶端應用程式都被打包成JAR文件。我們可以把組件準備好,在Sun應用伺服器上部署它,而大多數準備工作是在嚮導的幫助下或使用工具(例如部署工具、asant和管理控制臺等等)來自動地完成的。

 

  應用伺服器技術的面向組件的特性與軟體工程文化的趨勢是一致的。有趣的是,軟體架構的演化在描述給定架構的軟體元素的時候趨向於不使用組件這個單詞。作為代替的是,在某個組件不僅僅是運行時實體的時候,推薦使用元素來描述它。應用伺服器技術是否需要更多的架構細節也是很有意思的。

 

  第四種武器 團隊工作——應用伺服器提供了軟體協同工作的能力

 

  J2EE的根基之一是XML,它日益成為粘合各種應用程式的"膠水"。在網絡管理領域,由於XML允許我們簡單地定義服務並把它們轉換為軟體,從而顯得光芒耀眼。XML作為改善軟體(特別是寄宿在應用伺服器上的軟體)之間協同工作能力的一種途徑,其重要性還會不斷增加。

 

  J2EE還提供了對資料庫事務的支持。使用ATM取錢就是事務的一個例子。如果在事務的過程中出現電力中斷或網絡故障,你不希望帳號多次記入貸方,除非你中了彩票(哈哈)。因此,事務支持是應用伺服器基礎構造的一個重要的元素,它在J2EE中佔據著重要的位置。

 

  第五種武器 想像力——應用伺服器是高度抽象的

 

  我經常在想,軟體從業人員提升價值鏈的最好辦法就是使用抽象事務。我們不是在分散的和有限的事務上孤獨地工作,而是找出不太明確的抽象事務。抽象事務的例子包括建立存儲備份策略、定義某個重要的應用程式特性的需求等等。

 

  抽象事務是很大的挑戰,它強迫大腦分而治之。應用伺服器為運行在它上面的軟體使用了一個相當抽象的模型。例如,J2EE允許你的軟體訪問後臺的資料庫,用這種方法提供了抽象的支持。它同時還考慮資源情況,隱藏了特定數據源的複雜性。

 

  第六種武器 獨立性——J2EE與Sun的應用伺服器是獨立的、截然不同的

 

  這是一個很基本的觀點:J2EE本質上是一個高級的API,但是它的確包含了一些在應用伺服器環境之外運行部件。其中一個例子是XSLT,它允許我們把傳統的數據轉換為XML,反之亦然。

 

  J2EE的重要性還在持續增長;有些軟體架構專家甚至於把J2EE作為21世紀軟體工程文化首要的改造部分。它與環球網在90年代改變軟體工程文化的情況類似--這也是花費精力了解J2EE和相關技術的另一個原因。更深一層的原因是微軟和Sun目前在讓它們的產品協同工作方面積極地合作。

 

  第七種武器 發展——應用伺服器:軟體未來之窗

 

  應用伺服器對企業中的軟體集中執行的能力是強大的、引人注目的。它可能使IT業對已部署的軟體的控制能力提高了一個很高的層次。當主要的軟體組件基於應用伺服器的時候,我們可以應用體系結構方面的品質屬性,例如安全性、可修改性和可靠性。

 

  這樣,J2EE和應用伺服器技術無疑會成為軟體未來的橋梁。它還符合軟體架構專家和面向服務的架構典型。

 

  結論

 

  不要害怕應用伺服器技術!即使很便宜的PC也可以寄宿高級的軟體套件(例如Sun的J2EE和它的應用伺服器產品)。當然你也可以使用開放原始碼的。其要點是這種技術越來越流行,同時越來越易於使用。

 

  通過使用這種技術,你將了解軟體工程文化的發展趨勢,並會看到某些重要工作的產物。每個人都在談論Web服務,但是都沒有使用和建立自己的例子那麼全面。即使企業級JavaBeans、Servlets和其它的J2EE技術也是如此。使用J2EE免費評估版本或類似的產品可以很容易地實現所有這些事務。

相關焦點

  • 安卓動態調試七種武器之長生劍 - Smali Instrumentation
    目錄如下:安卓動態調試七種武器之長生劍 - Smali Instrumentation安卓動態調試七種武器之孔雀翎 - Ida安卓動態調試七種武器之碧玉刀 - Hooking安卓動態調試七種武器之多情環 - Customized DVM安卓動態調試七種武器之離別鉤 - Customized Kernel
  • K8S實戰之部署java應用
    1.最小的部署單元,2.一組容器的集合3.一個pod中的容器共享網絡命名空間4.生命周期是短暫的Controllers:1.Deployment:部署無狀態應用2.Statefulset:部署有狀態應用3.Replicaset:確保預期的Pod副本數量4.Daemonset: 確保node運行同一個pod5.Job:一次性任務6.Cronjob:定時任務更高級層次對象,部署和管理podService:
  • 陳虎:財務共享的七種武器
    古龍筆下的《七種武器》主要講的並不是這種武器表象上的威力,而更多著筆於武器背後的武林哲學和江湖道義,畢竟武器終歸要為使用者所駕馭。同樣,從中興通訊在1999年大膽創新開始嘗試使用網上報銷系統來重構企業財務組織體系以來,財務共享中心早已經超越了單純的財務作業工具變革範疇,成為一種全新的組織生態。
  • R七種武器之網絡爬蟲RCurl
    《R七種武器之網絡爬蟲RCurl》是R七種武器系列的第5門課程。
  • 英特爾的七種武器
    在第三屆架構日上,英特爾一口氣祭出七種武器:全新的多核性能混合架構、硬體線程調度器、獨立遊戲圖形處理器(GPU)架構、數據中心GPU架構(Ponte Vecchio),更新的數據中心架構(Sapphire Rapids)、基礎設施處理器(IPU)以及oneAPI。七種武器力出一孔,都指向一個宏偉目標:英特爾期待在2025年時,實現千倍工作負載處理能力提升。
  • 如何成為一個牛掰的Java大神?
    使用工具嘗試解決以下問題,並寫下總結當一個Java程序響應很慢時如何查找問題當一個Java程序頻繁FullGC時如何解決問題,如何查看垃圾回收日誌當一個Java應用發生OutOfMemory時該如何解決,年輕代、年老代、永久代解決辦法不同,導致原因也不同1.1.7.
  • Java類加載器 — classloader 的原理及應用
    >classloader的整個加載過程還是非常複雜的,具體的細節可以參考《深入理解java虛擬機》進行深入了解。我們常用基礎庫,例如java.util.**,java.io.**,java.lang.**等等都是由根加載器加載。
  • PHP程序猿必備的七種武器
    本文就著重介紹對於程序猿來說,居家旅行編程泡妞的七種必備武器,以及若干實(zhuang)用(bi)必選。1開發環境:最隆重推薦:XAMPP有win版本、mac版本、linux版本等等,全部都齊備了。推薦理由:方便、專業化,基本上別人能做的,他都能做,包括編程、調試等,還集成了SVN管理和自動上傳到網站伺服器的功能等等。光說,肯定說不完。需要說明的是,這是一個商業軟體,也就是需要人民幣的。什麼,你沒破解過軟體……是真的程式設計師嗎?
  • 自動化-Appium-常用API(Java版)
    driver.openNotifications();在設備上安裝應用。driver.installApp("appPath");卸載設備上的應用。context可以理解為可進入的窗口,如果是native則為native_app,如果是webview為對應webview。driver.getContextHandles();獲得應用的字符串。
  • 七種武器之孔雀翎
    七種武器之孔雀翎——IT運維之管理體系「花開兩朵,各表一枝」。上回講的是七種武器之首的長生劍,今回講的是七種武器的第二件武器——孔雀翎。孔雀翎是最成功、最可怕的武器,沒有人能躲過孔雀翎的襲擊,擁有了孔雀翎,就有了必勝的信心,所以說孔雀翎代表著信心。
  • 磁共振「七種武器」系列—霸王槍
    霸王槍是著名武俠小說家古龍著名作品《七種武器》裡面的武器之一,七種武器非一般江湖武器,件件精妙絕倫,令人聞風喪膽、不可思議
  • 【行山走水】嶗山的七種武器
    嶗山有七種神奇的植物,耐冬、銀杏、竹、木蘭、書帶草、篆葉楸和家喻戶曉的嶗山茶。 還有什麼全真七子、七真洞、七傷拳、七宗罪、七種武器,七星海棠,不一而足。 最神奇的是青島竟然有七個嶗山!咋一聽嚇一跳,怎麼這麼多?且聽我慢慢道來,這七個嶗山分別是流清、巨峰、太清、仰口、華嚴、九水、華樓。
  • 深入理解 Java 虛擬機(第一彈) - Java 內存區域透徹分析
    計數器為空(Undefined),因為native方法是java通過JNI直接調用本地C/C++庫,可以近似的認為native方法相當於C/C++暴露給java的一個接口,java通過調用這個接口從而調用到C/C++方法。由於該方法是通過C/C++而不是java進行實現。
  • 泡妞七種武器(新材料篇)
    《七種武器》為著名武俠小說家古龍著名作品代表作之一,共分為六個故事:長生劍、孔雀翎、碧玉刀、多情環、離別鉤
  • 理解Java和Android虛擬機
    將源碼編譯成字節碼class字節碼java的字節碼文件是通過java編譯器來生成的,我們下載jdk後,通過javac命令,就可以將一個java源文件生成java字節碼文件,這個字節碼文件就可以直接在JVM上面運行了。
  • 推薦:排查Java應用線上問題工具匯總.
    因此不加live的堆大小要大於加live堆的大小 )-permstat : to print permanent generation statistics-F : 當-dump沒有響應時,強制生成dump快照5、JHATjhat(JVM Heap Analysis Tool)命令是與jmap搭配使用,用來分析jmap生成的dump,jhat內置了一個微型的HTTP/HTML伺服器
  • Java工程師成神之路~
    object等的含義、泛型各種用法單元測試junit、mock、mockito、內存資料庫(h2)正則表達式java.lang.util.regex.實現客戶端緩存功能,支持返回304 實現可並發下載一個文件 使用線程池處理客戶端請求 使用nio處理客戶端請求 支持簡單的rewrite規則 上述功能在實現的時候需要滿足「開閉原則」了解nginx和apache伺服器的特性並搭建一個對應的伺服器用Java實現FTP、SMTP協議進程間通訊的方式什麼是CDN?
  • 夯實Java基礎系列14:深入理解Java枚舉類
    枚舉類-語法enum 與 class、interface 具有相同地位;可以繼承多個接口;可以擁有構造器、成員方法、成員變量;1.2 枚舉類與普通類不同之處默認繼承 java.lang.Enum 類,所以不能繼承其他父類;其中 java.lang.Enum 類實現了 java.lang.Serializable 和 java.lang.Comparable 接口;
  • 爭奇鬥豔 香料的「七種武器」
    古龍先生更在《七種武器》中列出武林中赫赫有名的武器:長生劍、孔雀翎、碧玉刀、多情環、霸王槍、離別鉤和拳頭。    而在美食界中,各路香料也在爭奇鬥豔,勢要奪得"香料名譜"第一的寶座。冥冥之中,香料與兵器有著絲絲縷縷的聯繫,不妨就讓我們來一個"對號入座",數出香料界中的"七種武器"。
  • Java 故障處理工具
    如果是遠程虛擬機進程,則對應的格式應該是:[protocol:][//] vmid[@hostname[:port]/servername]遠程機器上的服務進程需要支持RMI,使用jstad工具可以很方便的簡歷RMI伺服器。參數interval和count表示間隔和次數。