国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

EJB的編程限制

2019-11-18 12:36:54
字體:
供稿:網(wǎng)友

  EnterPRise javaBeans(EJB)是一個開發(fā)和部署分布式服務(wù)器端的、帶事務(wù)處理的、安全的商業(yè)組件的規(guī)范和結(jié)構(gòu)。EJB的體系結(jié)構(gòu)是J2EE的基礎(chǔ)和核心,J2EE定義了整個標(biāo)準(zhǔn)的應(yīng)用開發(fā)體系結(jié)構(gòu)和一個部署環(huán)境。在這個體系結(jié)構(gòu)中,應(yīng)用開發(fā)者的注重力集中在封裝商業(yè)邏輯和商業(yè)規(guī)則上,一切與基礎(chǔ)結(jié)構(gòu)服務(wù)相關(guān)的問題和底層分配問題都由應(yīng)用程序容器或服務(wù)器來處理。
  
  甚至,從屬于事務(wù)、持久化、安全等等方面的應(yīng)用組件的運(yùn)行時屬性都可以使用高度靈活的聲明方法在部署的環(huán)境中定制。這個體系結(jié)構(gòu)定義了一個容器和一個服務(wù)器模型--容器是應(yīng)用組件生存和執(zhí)行的環(huán)境,而這個容器卻又借居在一個服務(wù)器之中。J2EE平臺提供了一個簡化的開發(fā)模型,它具有工業(yè)強(qiáng)度的可擴(kuò)展性、支持合理的集成和靈活的部署,與開發(fā)商和應(yīng)用服務(wù)器無關(guān),這一切使得一些專用的應(yīng)用服務(wù)器和專用的分布式對象框架變得古舊了。
  
  EJB的角色和責(zé)任
  EJB規(guī)范定義了幾個標(biāo)準(zhǔn)的角色和責(zé)任者,如下:
  
  1.EJB服務(wù)器提供商提供的應(yīng)用服務(wù)器應(yīng)是一個在分布式事務(wù)處理、系統(tǒng)服務(wù)等方面的專家。
  
  2.EJB容器提供商提供EJB組件實(shí)例運(yùn)行環(huán)境和部署工具。EJB 服務(wù)器/容器提供商是典型的操作系統(tǒng)開發(fā)商、數(shù)據(jù)庫開發(fā)商或者是應(yīng)用服務(wù)器開發(fā)商。EJB的服務(wù)器和EJB的容器應(yīng)是同一個開發(fā)商提供,因?yàn)闊o論是在現(xiàn)在的EJB1.1規(guī)范(最終版)還是EJB2.0公共草稿版(正在修改)中都沒有定義兩者之間的接口。
  
  3.Bean的提供商或者EJB開發(fā)者開發(fā)的EJB組件都包涵商業(yè)邏輯及商業(yè)功能。EJB開發(fā)者提供的每一個EJB組件都應(yīng)滿足以下條件:EJB的實(shí)現(xiàn)中應(yīng)包括所有必須有的組件-容器合同方法(Contract method),如:ejbCreate(),ejbRemove()等等和一些商業(yè)方法(business method);Home接口;Remote接口;如需要還應(yīng)有幫助類。Home接口為創(chuàng)建、刪除和查找EJB實(shí)例的方法提供簽名,Remote接口定義了商業(yè)方法的簽名。
  
  4.應(yīng)用程序組裝器把一些由Bean提供商開發(fā)的EJB組件組裝成一個完整的J2EE應(yīng)用程序。
  
  5.部署器在應(yīng)用程序部署的目標(biāo)產(chǎn)品環(huán)境中是專家,它在應(yīng)用服務(wù)器中安裝應(yīng)用組件并配置它們的事務(wù)、持久化和安全方面。這樣你就可以治理復(fù)雜的問題了,諸如:事務(wù)處理、并發(fā)處理、持久化以及安全。
  
  6.系統(tǒng)治理者負(fù)責(zé)服務(wù)器的配置和治理、運(yùn)行監(jiān)控和負(fù)載平衡。
  
  7.應(yīng)用程序的用戶界面開發(fā)者負(fù)責(zé)用戶界面和表示邏輯。
  
  這篇文章的焦點(diǎn)集中在Bean提供商/EJB開發(fā)者方面和EJB組件實(shí)現(xiàn)代碼的限制方面。
  
  EJB組件的約束
  EJB的開發(fā)者并不需要在EJB的組件實(shí)現(xiàn)代碼中編寫系統(tǒng)級的服務(wù),EJB提供商/開發(fā)者需知道并且嚴(yán)格地遵守一些限制,這些限制與開發(fā)穩(wěn)定的和可移植的EJB組件的利益有關(guān)。
  
  以下是你應(yīng)該回避使用的一些Java特色,并且在你的EJB組件的實(shí)現(xiàn)代碼中要嚴(yán)格限制它們的使用:
  
  1.使用static,非final 字段。建議你在EJB組件中把所有的static字段都聲明為final型的。這樣可以保證前后一致的運(yùn)行期語義,使得EJB容器有可以在多個Java虛擬機(jī)之間分發(fā)組件實(shí)例的靈活性。
  
  2.使用線程同步原語來同步多個組件實(shí)例的運(yùn)行。避免這個問題,你就可以使EJB容器靈活的在多個Java虛擬機(jī)之間分發(fā)組件實(shí)例。
  
  3.使用AWT函數(shù)完成鍵盤的輸入和顯示輸出。約束它的原因是服務(wù)器方的商業(yè)組件意味著提供商業(yè)功能而不包括用戶界面和鍵盤的I/O功能。
  
  4.使用文件訪問/java.io 操作。EJB商業(yè)組件意味著使用資源治理器如JDBC來存儲和檢索數(shù)據(jù)而不是使用文件系統(tǒng)API。同時,部署工具提供了在部署描述器(descriptor)中存儲環(huán)境實(shí)體,以至于EJB組件可以通過環(huán)境命名上下文用一種標(biāo)準(zhǔn)的方法進(jìn)行環(huán)境實(shí)體查詢。所以,使用文件系統(tǒng)的需求基本上是被排除了。
  
  5.監(jiān)聽和接收socket連接,或者用socket進(jìn)行多路發(fā)送。EJB組件并不意味著提供網(wǎng)絡(luò)socket服務(wù)器功能,但是,這個體系結(jié)構(gòu)使得EJB組件可以作為socket客戶或是RMI客戶并且可以和容器所治理的環(huán)境外面的代碼進(jìn)行通訊。
  
  6.使用映象API查詢EJB組件由于安全規(guī)則所不能訪問的類。這個約束加強(qiáng)了Java平臺的安全性。
  
  7.欲創(chuàng)建或獲得一個類的加載器,設(shè)置或創(chuàng)建一個新的安全治理器,停止Java虛擬機(jī),改變輸入、輸出和出錯流。這個約束加強(qiáng)了安全性同時保留了EJB容器治理運(yùn)行環(huán)境的能力。
  
  8.設(shè)置socket工廠被URL's ServerSocket,Socket和Stream handler使用。避免這個特點(diǎn),可以加強(qiáng)安全性同時保留了EJB容器治理運(yùn)行環(huán)境的能力。
  
  9.使用任何方法啟動、停止和治理線程。這個約束消除了與EJB容器治理死鎖、線程和并發(fā)問題的責(zé)任相沖突的可能性。
  
  通過限制使用10-16幾個特點(diǎn),你的目標(biāo)是堵上一個潛在的安全漏洞:
  
  10.直接讀寫文件描述符。
  
  11.為一段特定的代碼獲得安全策略信息。
  
  12.加載原始的類庫。
  
  13.訪問Java一般角色所不能訪問的包和類。
  
  14.在包中定義一個類。
  
  15.訪問或修改安全配置對象(策略、安全、提供者、簽名者和實(shí)體)。
  
  16.使用Java序列化特點(diǎn)中的細(xì)分類和對象替代。
  
  17.傳遞this引用指針作為一個參數(shù)或者作為返回值返回this引用指針。你必須使用sessionContext或EntityContext中的getEJBObject()的結(jié)果。
  
  Java2平臺的安全策略
  以上所列的特點(diǎn)事實(shí)上正是Java編程語言和Java2標(biāo)準(zhǔn)版中的標(biāo)準(zhǔn)的、強(qiáng)有力的特色。EJB容器答應(yīng)從J2SE中使用一些或全部的受限制的特色,盡管對于EJB組件是不可用的,但需通過J2SE的安全機(jī)制來使用而不是通過直接使用J2SE的API。
  
  Java2平臺為EJB1.1規(guī)范中的EJB容器所制定的安全策略定義了安全許可集,這些許可在EJB組件的編程限制中出現(xiàn)。通過這個策略,定義了一些許可諸如:java.io.FilePermission,java.net.NetPermission,java.io.reflect.ReflectPermission,
  
  java.lang.security.SecurityPermission,以便加強(qiáng)先前所列出的編程限制。
  
  許多EJB容器沒有加強(qiáng)這些限制,他們希望EJB組件開發(fā)者能遵守這些編程限制或者是帶有冒險想法違反了這些限制。違反這些限制的EJB組件,比標(biāo)準(zhǔn)方法依靠過多或過少的安全許可,都將很少能在多個EJB容器間移植。另外,代碼中都將隱藏著一些不確定的、難以猜測的問題。所有這些都足以使EJB組件開發(fā)者應(yīng)該知道這些編程限制,同時也應(yīng)該認(rèn)真地遵守它們。
  
  任何違反了這些編程限制的EJB組件的實(shí)現(xiàn)代碼在編譯時都不能檢查出來,因?yàn)檫@些特點(diǎn)都是Java語言和J2SE中不可缺少的部分。
  
  對于EJB組件的這些限制同樣適用于EJB組件所使用的幫助/訪問(helper/access)類,J2EE應(yīng)用程序使用Java文檔(jar)文件格式打包到一個帶.ear(代表Enterprise Archive)擴(kuò)展名的文件中,這個ear文件對于發(fā)送給文件部署器來說是標(biāo)準(zhǔn)的格式。ear文件中包括在一個或多個ejb-jar文件中的EJB組件,還可能有ejb-jar所依靠的庫文件。所有ear文件中的代碼都是經(jīng)過深思熟慮開發(fā)的應(yīng)用程序并且都遵守編程限制和訪問許可集。
  
  未來版本的規(guī)范可能會指定通過部署工具來定制安全許可的能力,通過這種方法指定了一個合法的組件應(yīng)授予的許可權(quán)限,也指定了一個標(biāo)準(zhǔn)方法的需求:如從文件系統(tǒng)中讀文件應(yīng)有哪些要求。一些EJB容器/服務(wù)器目前在它們的部署工具中都提供了比標(biāo)準(zhǔn)權(quán)限或多或少的許可權(quán)限,這些并不是EJB1.1規(guī)范中所需要的。
  
  理解這些約束
  EJB容器是EJB組件生存和執(zhí)行的運(yùn)行期環(huán)境,EJB容器為EJB組件實(shí)例提供了一些服務(wù)如:事務(wù)治理、安全持久化、資源訪問、客戶端連接。EJB容器也負(fù)責(zé)EJB組件實(shí)例整個生命期的治理、擴(kuò)展問題以及并發(fā)處理。所以,EJB組件就這樣借居在一個被治理的執(zhí)行環(huán)境中--即EJB容器。
  
  EJB容器也是EJB組件和外部世界的中間者,它提供了客戶連接服務(wù)來答應(yīng)應(yīng)用程序客戶訪問和使用EJB組件所提供的功能,EJB容器通過bean的Remote和Home接口介入每一個對EJB對象方法的調(diào)用。
  
  EJB容器也是EJB組件和訪問其它各種資源和服務(wù)的中間人,因?yàn)镋JB容器介入應(yīng)用組件和J2EE服務(wù),它可以透明地引入組件部署描述符所定義的服務(wù),如:事務(wù)治理、安全、持久化、并發(fā)處理和狀態(tài)治理。
  
  資源就是一個封裝了訪問資源治理器的對象,因?yàn)橐粋€資源工廠就是一個用來建造資源的對象。例如,一個JDBC連接代表一個實(shí)現(xiàn)了java.sql.Connection接口的對象,它是用來提供訪問數(shù)據(jù)庫治理系統(tǒng)的資源,并且實(shí)現(xiàn)了javax.sql.DataSource接口的對象是一個這樣JDBC連接的資源工廠。同樣,定義了許多獲得JMS、JavaMail以及URL連接的資源工廠,目前除此之外沒有其它的資源工廠了。
  
  (J2EE連接體系結(jié)構(gòu),目前正在修改,將期盼著包括J2EE未來版本的規(guī)范,這個連接體系結(jié)構(gòu)定義了標(biāo)準(zhǔn)的資源適配器和依附于連接、事務(wù)、安全治理的合同,所以應(yīng)用服務(wù)器將以標(biāo)準(zhǔn)和統(tǒng)一的方式插入各種企業(yè)信息系統(tǒng),包括ERP(如SAP R/3),主框架事務(wù)處理系統(tǒng)和數(shù)據(jù)庫系統(tǒng)。
  
  因?yàn)镋JB容器完全負(fù)責(zé)EJB組件的生命期、并發(fā)處理、資源訪問、安全等等,所以與容器本身的鎖定和并發(fā)治理相沖突的可能性就需要消除,許多限制都需要使用來填上潛在的安全漏洞。除了與EJB容器責(zé)任與安全沖突的問題,EJB組件還意味著僅僅聚焦于商務(wù)邏輯,它依靠于EJB容器所提供的服務(wù)而不是自己來直接解決底層的系統(tǒng)層的問題。
  
  可能的問題
  通常,EJB組件在容器之間的移植不可避免地與如

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 建阳市| 昆明市| 渭源县| 崇明县| 浠水县| 阜平县| 高尔夫| 甘孜| 长治市| 秦皇岛市| 乌恰县| 漳浦县| 昂仁县| 宜兰县| 芦溪县| 福鼎市| 房山区| 郴州市| 萨嘎县| 庄浪县| 罗甸县| 喀喇沁旗| 惠水县| 卢湾区| 桃江县| 双峰县| 两当县| 堆龙德庆县| 仁化县| 万州区| 邵阳县| 自贡市| 绍兴市| 巴彦淖尔市| 麻阳| 喀喇| 正宁县| 炎陵县| 分宜县| 乐至县| 韶关市|