使用MyEclipse開發(fā)Java EE應(yīng)用:創(chuàng)建Java EE企業(yè)應(yīng)用程序
1.企業(yè)應(yīng)用項(xiàng)目模型
MyEclipse提供了一個(gè)Enterprise Application項(xiàng)目模型(即EAR項(xiàng)目模型),以及用于創(chuàng)建Java EE企業(yè)應(yīng)用程序的管理工具。由圖標(biāo)標(biāo)識(shí)的EAR項(xiàng)目是Web、Application Client、Connector和EJB項(xiàng)目的邏輯容器,它產(chǎn)生一個(gè)服務(wù)器端部署單元(稱為Java EE Enterprise Archive(EAR))。EAR項(xiàng)目的文件夾結(jié)構(gòu)中沒有子項(xiàng)目,而是EAR項(xiàng)目維護(hù)對(duì)其組件模塊的引用。
Java EE規(guī)范將企業(yè)應(yīng)用程序的運(yùn)行時(shí)結(jié)構(gòu)定義為Java EE模塊和模塊所需的基本文件資源的集合。
Java EE模塊的常見類型是:
Web模塊–通常表示為Web存檔(WAR)
EJB模塊–通常表示為EJB JAR歸檔文件
EAR項(xiàng)目必須至少包含一個(gè)模塊項(xiàng)目。因此,在EAR項(xiàng)目開發(fā)期間,只要包含一個(gè)模塊項(xiàng)目,就可以根據(jù)需要添加和刪除模塊項(xiàng)目。部署企業(yè)項(xiàng)目時(shí),引用的模塊項(xiàng)目以其各自的存檔格式打包,并作為企業(yè)存檔的模塊進(jìn)行部署。
通常,Web模塊提供Web用戶界面服務(wù)以及用戶對(duì)由一個(gè)或多個(gè)EJB模塊提供的業(yè)務(wù)服務(wù)的訪問。Java EE規(guī)范定義了EAR,如THE標(biāo)準(zhǔn)的Java EE部署單元。此外,該規(guī)范允許(但不要求)應(yīng)用程序服務(wù)器供應(yīng)商支持其他部署形式,例如獨(dú)立的WAR和EJB JAR。下圖為MyEclipse項(xiàng)目模型架構(gòu):
MyEclipse項(xiàng)目模型通過以下方式與Java EE Enterprise Application模型并行:
MyEclipse Web模塊項(xiàng)目–設(shè)計(jì)時(shí)等效于Java EE Web模塊。Web模塊項(xiàng)目與基本的MyEclipse Web項(xiàng)目相同,只是增加了內(nèi)部元數(shù)據(jù)和可選的項(xiàng)目依賴項(xiàng)。
MyEclipse EJB模塊項(xiàng)目–設(shè)計(jì)時(shí)等效于Java EE EJB模塊。EJB模塊項(xiàng)目與基本的MyEclipse EJB項(xiàng)目相同,只是增加了內(nèi)部元數(shù)據(jù)和可選的項(xiàng)目依賴項(xiàng)。
MyEclipse Enterprise項(xiàng)目–設(shè)計(jì)時(shí)等效于Java EE企業(yè)應(yīng)用程序。維護(hù)與模塊項(xiàng)目的關(guān)聯(lián),不包含任何Web或EJB項(xiàng)目代碼。
所有使用JavaEE版本低于5.0的EAR項(xiàng)目都是使用META-INF根文件夾和空的META-INF/application.xml部署描述符創(chuàng)建的。對(duì)于使用Java EE 5或更高版本的項(xiàng)目,不需要此文件,但可以選擇生成此文件,并根據(jù)需要修改application.xml文件。
注意:對(duì)于需要application.xml文件的Java EE版本,請(qǐng)勿移動(dòng)或重命名此文件或META-INF文件夾。這樣做會(huì)導(dǎo)致部署失敗。除項(xiàng)目的元數(shù)據(jù)文件以外的所有資源都被視為部署的一部分。
下圖顯示了MyEclipse Web項(xiàng)目的Resource透視圖,該視圖顯示項(xiàng)目的部署信息??梢允褂庙?xiàng)目的Deployment Assembly屬性來自定義項(xiàng)目部署。
2.項(xiàng)目組織、依賴性和類解析
Java EE規(guī)范為企業(yè)應(yīng)用程序定義了分層的Java類解析策略,下圖描述了這種自下而上的搜索策略。當(dāng)任何模塊引用Java類時(shí),其本地類加載器首先會(huì)在該模塊的代碼庫中搜索該類。如果在模塊本地找不到該類,這個(gè)模塊會(huì)向其上一級(jí)的類加載器發(fā)出搜索請(qǐng)求。這個(gè)過程一直持續(xù)到找到該類或到達(dá)頂層Java引導(dǎo)類加載器為止(圖中沒有顯示)。
了解Java EE企業(yè)應(yīng)用程序的類裝入器策略很重要,因?yàn)轭愌b入策略會(huì)影響您選擇如何在Web和EJB模塊項(xiàng)目之間分配類。例如,如果您有一個(gè)或多個(gè)業(yè)務(wù)數(shù)據(jù)對(duì)象在Web模塊的用戶界面元素和EJB模塊的服務(wù)之間傳遞,通過定位EJB模塊中的數(shù)據(jù)對(duì)象,它們將變得可見Web模塊和EJB模塊。
導(dǎo)致類加載問題的兩個(gè)常見項(xiàng)目組織錯(cuò)誤是:
將數(shù)據(jù)對(duì)象類放置在Web模塊中,這會(huì)導(dǎo)致運(yùn)行時(shí)ClassNotFoundExceptions
將共享類復(fù)制到Web和EJB模塊項(xiàng)目中。這種方法通常導(dǎo)致難以診斷序列化和與類不兼容相關(guān)的錯(cuò)誤,這使得實(shí)踐比第一點(diǎn)更加困難。
MyEclipse Java EE項(xiàng)目模仿這種分層的類加載器策略,在構(gòu)建時(shí)準(zhǔn)確地洞察MyEclipse企業(yè)項(xiàng)目及其組成的Web和EJB模塊項(xiàng)目的類裝入器可視性。如下圖所示,這是使用Eclipse項(xiàng)目依賴關(guān)系完成的。將Web或EJB項(xiàng)目添加到MyEclipse EAR項(xiàng)目時(shí),將相應(yīng)地設(shè)置項(xiàng)目依賴項(xiàng)。建議不要手動(dòng)修改這些項(xiàng)目依賴項(xiàng),因?yàn)檫@樣可能會(huì)引入不必要的編譯問題。
注意: MyEclipse開發(fā)團(tuán)隊(duì)認(rèn)為,支持類加載器仿真是最重要的要求,可幫助開發(fā)人員識(shí)別難以解決的由類加載器可見性問題引起的運(yùn)行時(shí)錯(cuò)誤。這就是MyEclipse不支持在EAR項(xiàng)目中物理嵌入模塊代碼的原因之一。相反,EAR項(xiàng)目以模塊的形式維護(hù)與單個(gè)Web和EJB項(xiàng)目的關(guān)聯(lián)。下圖展示了項(xiàng)目依賴項(xiàng)來模擬Java EE EAR類加載器行為:
12月,慶圣誕,迎元旦,上“慧都網(wǎng)”小程序簽到兌軟件商城無門檻抵價(jià)券>>> 購MyEclipse/CodeMix享折上折>>>
想進(jìn)一步了解MyEclipse?知你所需,解你所惑!
想與更多人聊MyEclipse?加入MyEclipse中國(官方2):742336981暢所欲言吧!
想及時(shí)獲取MyEclipse資訊?掃描下方二維碼,MyEclips信息跟你走!