选择技术栈构建通用平台
Java社區(qū)中有很多關(guān)于Spring vs Java EE的話題。 一群人會(huì)爭(zhēng)辯說(shuō)您應(yīng)該使用一個(gè)而不是其他。等等。當(dāng)我看到這一點(diǎn)時(shí),我不禁要想為什么我們不能同時(shí)使用它們呢? 實(shí)際上,我認(rèn)為有效地使用它們會(huì)為構(gòu)建基礎(chǔ)架構(gòu)創(chuàng)建一個(gè)偉大的技術(shù)堆棧,例如對(duì)于一家大型公司而言,該公司希望提供一個(gè)可以托管和運(yùn)行許多不同應(yīng)用程序和項(xiàng)目的通用平臺(tái)。
為什么將Spring和Java EE結(jié)合在一起?
在編寫軟件時(shí),我們創(chuàng)建和構(gòu)建可重復(fù)使用的庫(kù)/框架,并幫助我們更快地完成工作。 Spring是一個(gè)像瑞士軍刀一樣的庫(kù),它允許以一種非侵入性的方式構(gòu)建應(yīng)用程序,并具有許多更簡(jiǎn)單的包裝器和幫助器類。 這就是我所說(shuō)的“對(duì)開發(fā)人員友好”的庫(kù)。
但是,許多人沒(méi)有意識(shí)到Spring只是一個(gè)包含對(duì)許多可以簡(jiǎn)化開發(fā)工作的包裝器的庫(kù)。 例如,Spring具有一個(gè)Web框架層,可讓您編寫MVC Web應(yīng)用程序,但是您仍然需要Servlet容器(服務(wù)器)。 Spring提供的數(shù)據(jù)層主要包裝了其他JPA / Hibernate / JDBC,這些JPA / Hibernate / JDBC很好地集成在了它們的IoC容器中,但是實(shí)際的ORM實(shí)現(xiàn)不在Spring之外(例如:Hibernate)。 Spring包裝了JMS甚至JNDI進(jìn)行開發(fā),但是您仍然需要JMS服務(wù)器或JNDI提供程序。 Spring具有事務(wù)管理器抽象層,但它只是一個(gè)包裝器(對(duì)于單個(gè)數(shù)據(jù)庫(kù),實(shí)際上是數(shù)據(jù)庫(kù)供應(yīng)商提供了交易保證的ACID屬性,而不是Spring)。 如果要在多個(gè)資源(例如JMS和數(shù)據(jù)庫(kù),或多個(gè)數(shù)據(jù)庫(kù))上進(jìn)行原子事務(wù),則仍然需要“真實(shí)”事務(wù)管理器(JTA)!
所以現(xiàn)在您看到,要構(gòu)建成功的企業(yè)應(yīng)用程序,您需要在許多供應(yīng)商提供的功能之上使用Spring。 如果您不小心,可能會(huì)陷入難以集成和部署的許多專有服務(wù)中。 這就是Java EE的用武之地。這是規(guī)范布局,供應(yīng)商必須以標(biāo)準(zhǔn)方式提供大多數(shù)這些服務(wù)。 因此,任何JEE法規(guī)遵從性服務(wù)器都將提供帶有標(biāo)準(zhǔn)API的服務(wù),該標(biāo)準(zhǔn)API應(yīng)該以類似的方式工作。
現(xiàn)在必須保持平衡。 根據(jù)我的經(jīng)驗(yàn),您執(zhí)行的標(biāo)準(zhǔn)越多,獲得的“對(duì)開發(fā)人員友好的”就越少。 但是,與此同時(shí),如果沒(méi)有標(biāo)準(zhǔn),則很難提供通用的基礎(chǔ)結(jié)構(gòu),例如API,運(yùn)行時(shí)服務(wù)器甚至OS環(huán)境進(jìn)行部署。 這就是為什么我認(rèn)為將Spring與Java EE相結(jié)合將為IT社區(qū)帶來(lái)一個(gè)更實(shí)用和有效的平臺(tái)的原因。
選擇技術(shù)棧
并非每個(gè)項(xiàng)目的創(chuàng)建都是平等的,他們的需求在很大程度上不同。 因此,不可能提供一個(gè)滿足所有項(xiàng)目需求的通用技術(shù)堆棧。 但是我們當(dāng)然可以嘗試創(chuàng)建一個(gè)可以滿足大多數(shù)項(xiàng)目需求的通用工具。 另外,選擇一個(gè)具體的庫(kù)/堆棧是非常有根據(jù)的,無(wú)論選擇哪種實(shí)際實(shí)現(xiàn),總是會(huì)有利弊的。 考慮到這一點(diǎn),我將嘗試提出自己對(duì)技術(shù)棧的個(gè)人選擇,我認(rèn)為它將為承載各種項(xiàng)目和應(yīng)用程序提供最靈活的平臺(tái)。 特別是在大型公司環(huán)境中。
我將選擇Java EE應(yīng)用程序服務(wù)器作為通用平臺(tái)。 從中,我將選擇一些“對(duì)開發(fā)人員友好”的庫(kù)來(lái)替換(或在頂部添加)一些現(xiàn)有的EE標(biāo)準(zhǔn),以提高生產(chǎn)率。 我認(rèn)為EE已經(jīng)走了很長(zhǎng)一段路,并且在每次規(guī)范迭代中都變得更好,但是我仍然覺得將POJO服務(wù)連接在一起時(shí),使用Spring作為IoC容器比使用CDI有更大的靈活性。 另外,Spring框架帶有非常靈活的MVC層,與普通的Servlet API相比,該層有效且易于開發(fā)。
使用Java EE 6,服務(wù)器必須提供兩個(gè)配置文件。 因此,讓我們從這兩個(gè)視圖開始探索堆棧。
JEE Web配置文件–基于Web的更輕便的應(yīng)用程序
- 使用Spring MVC(控制器,表單,驗(yàn)證,ModelAndView和IoC配置)代替普通的Servlet API編程。
- 使用盡可能多的POJO編寫后端業(yè)務(wù)服務(wù)邏輯,并使用Spring IoC進(jìn)行連接。 不要濫用這個(gè)。 我個(gè)人認(rèn)為,與CDI相比,Spring IoC更靈活,更易于使用。
- 將JPA用于數(shù)據(jù)服務(wù)層而不是JDBC API編程。
- 使用JSON數(shù)據(jù)交換格式。 根據(jù)經(jīng)驗(yàn),與XML相比,JSON更加高效且易于使用。
- 視圖選項(xiàng):
- 使用格式正確的xhtml / Bootstraps / jquery / AJAX->如果您只需要靜態(tài)頁(yè)面和一些客戶端交互
- Servlet 3.0現(xiàn)在支持異步請(qǐng)求。 這解決了Web域中的許多難題。 如果需要,可以利用它! (最新的Spring MVC已經(jīng)對(duì)此提供支持。)
JEE 6完整個(gè)人資料–完整EE功能應(yīng)用程序
- 在Web配置文件中上述所有內(nèi)容之上。
- 將JMS用于屬于點(diǎn)對(duì)點(diǎn)或發(fā)布/訂閱域的任何消息傳遞需求。
- 當(dāng)您需要原子事務(wù)進(jìn)行多個(gè)數(shù)據(jù)庫(kù)和/或JMS交付時(shí),請(qǐng)使用JTA。
- 使用標(biāo)準(zhǔn)的JAX-RS(RESTful Web服務(wù)API)公開外部服務(wù)。 使用JSON數(shù)據(jù)交換格式。
- 使用一致的Spring IoC進(jìn)行服務(wù)注入。 與CDI相比,它更靈活,更易于使用。
- 如果可能的話,使用POJO服務(wù)并通過(guò)Spring代替EJB進(jìn)行連接。 我發(fā)現(xiàn)它們更易于測(cè)試和開發(fā)。
- 加上它所支持的其他任何EE規(guī)范,例如(JavaMail和JCA等。通常,Spring也會(huì)為這些API提供更簡(jiǎn)單的包裝。)
Apache Camel –輕量級(jí)ESB
Camel項(xiàng)目不是EE標(biāo)準(zhǔn)。 但是,我的經(jīng)驗(yàn)是,使用簡(jiǎn)單的駱駝路線/工作流程可以輕松完成許多常見的IT工作。 Camel的開發(fā)和樣式易于理解且易于測(cè)試。 它可以作為獨(dú)立的應(yīng)用程序/服務(wù)運(yùn)行,也可以作為Web應(yīng)用程序的一部分運(yùn)行。 我相信,在上面的通用平臺(tái)之上添加一個(gè)巨大的價(jià)值。 您將在需要以下各項(xiàng)時(shí)使用它:
- 對(duì)于任何類似工作流流程的集成模式(例如:將文件輪詢器橋接到Web服務(wù),將JMS隊(duì)列橋接到數(shù)據(jù)庫(kù)等)
- 用于創(chuàng)建業(yè)務(wù)工作流程。
- 適用于任何ETL工作流程。
- 為了輕松將業(yè)務(wù)需求工作流映射到代碼邏輯流程
使用哪個(gè)EE應(yīng)用程序服務(wù)器
我認(rèn)為這也是主觀的,但是我們需要選擇適合我們業(yè)務(wù)需求的產(chǎn)品。 我個(gè)人更喜歡JBoss,因?yàn)樗情_源的,但是他們提供了其應(yīng)用服務(wù)器的商業(yè)支持版本。 作為基于開源的產(chǎn)品,它使開發(fā)人員在學(xué)習(xí)和探索平臺(tái)方面具有更大的靈活性。 我也看到了他們內(nèi)部項(xiàng)目的許多好處,例如開放的測(cè)試工具和庫(kù),這些都使平臺(tái)開發(fā)人員受益。
Tomcat服務(wù)器呢?
Tomcat是一個(gè)非常著名的Servlet容器。 但是,它只是一個(gè)支持Servlet / JSP應(yīng)用程序的Web容器。 它不提供Java EE服務(wù)器提供的JMS或JTA功能。 事實(shí)上,僅使用一個(gè)簡(jiǎn)單的Tomcat服務(wù)器就可以滿足許多Web應(yīng)用程序的需求。 但是,在大型IT環(huán)境中,您經(jīng)常需要僅由Java EE服務(wù)器提供的其他服務(wù)。 在許多情況下,人們將只需要運(yùn)行Tomcat webapp并在需要時(shí)橋接到其他Java EE服務(wù)器。
使用JEE6,可以將Web配置文件簡(jiǎn)化為大多數(shù)Web容器功能,這應(yīng)該使服務(wù)器啟動(dòng)更快(加載更少的額外服務(wù))。 但是,如果應(yīng)用程序需要額外的EE功能,我們提供的平臺(tái)將能夠支持它們。
翻譯自: https://www.javacodegeeks.com/2013/06/choosing-technology-stack-to-build-a-common-platform.html
總結(jié)
以上是生活随笔為你收集整理的选择技术栈构建通用平台的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 蜜爱直播安卓版(安卓蜜播)
- 下一篇: 新电脑第一次装机怎么装系统新电脑第一次装