久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

EJB

來自站長百科
跳轉至: 導航、? 搜索

EJB (Enterprise JavaBean)是J2EE的一部分,定義了一個用于開發(fā)基于組件的企業(yè)多重應用程序的標準。其特點包括網絡服務支持和核心開發(fā)工具(SDK)。EJB是一個封裝有某個應用程序之業(yè)務邏輯服務器端組件。EJB最早于1997年IBM提出,旋即被太陽微系統(tǒng)采用并形成標準(EJB 1.0 和EJB 1.1)。其后在Java社區(qū)進程(Java Community Process)支持下陸續(xù)有一些JSR被制訂來定義新的EJB標準,分別是JSR 19 (EJB 2.0), JSR 153 (EJB 2.1) 以及最新的JSR 220 (EJB 3.0)。

EJB規(guī)范的目的在于為企業(yè)及應用開發(fā)人員實現(xiàn)后臺業(yè)務提供一個標準方式,從而解決一些此前總是在作業(yè)過程中總是重復發(fā)生的問題。EJB以一個標準方式自動處理了諸如數(shù)據持久化,事務集成,安全對策等不同應用的共有問題,使得軟件開發(fā)人員可以專注于程序的特定需求而不再飽受那些非業(yè)務元素的困擾。

EJB新特性一覽

EJB的特點[ ]

  1. 由一個 EJB 容器在運行時創(chuàng)建和管理 EJB
  2. 在部署 EJB 時定制其運行方式
  3. 由 EJB 容器和服務器來協(xié)調客戶端的訪問
  4. 可以部署到任何兼容的 EJB 容器中
  5. 客戶端對 EJB 的視圖是由 Bean 開發(fā)人員決定的

EJB 容器[ ]

  1. 管理 Bean 生命周期:將 EJB 服務器提供的服務傳遞給 Bean
  2. 生成代碼來實現(xiàn)對 Bean 的存取訪問
  3. 強制事務處理的限制
  4. 創(chuàng)建、初始化和回收 Bean
  5. 管理持久數(shù)據的存儲
  6. 對客戶端而言 EJB 容器是透明的

EJB 容器提供的服務[ ]

數(shù)據存儲

  • 容器決定何時載入/儲存狀態(tài)
  • Container-Managed Persistence(容器管理存儲/CMP)
  • 容器負責存儲您的 Bean
  • 容器生成必要的類和代碼
  • Bean-Managed Persistence(Bean 管理存儲/BMP)
  • Bean 開發(fā)人員提供存儲代碼
  • 開發(fā)人員決定 如何存儲, 容器仍然決定 何時進行

事務處理

  • 可以由容器代理來實現(xiàn)
  • 容器將得到業(yè)務邏輯方法的事務處理需求
  • 容器提供事務控制代碼
  • 也可以由程序員通過代碼實現(xiàn)

其它服務

其它服務包括:

  • 命名 (Naming)
  • 安全 (Security)
  • 線程管理 (Thread management)
  • 這些服務由容器代理完成將減少應用開發(fā)人員的負擔

EJB的種類[ ]

EJB容器可以接受三類EJB

1、無狀態(tài)會話Bean(Stateless Session Beans)

無狀態(tài)會話Bean是一類不包含狀態(tài)信息的分布式對象,允許來自數(shù)個客戶端的并發(fā)訪問。實例變量的內容在前后數(shù)次呼出中不被保留(確切地說是不保證保留)。由于不必控制與用戶間的對話信息而減少了開銷,無狀態(tài)會話Bean不像有狀態(tài)會話Bean那樣具有資源集約性。舉例來說,一個發(fā)送郵件的EJB就可被設計為一個無狀態(tài)會話Bean。在整個會話期,用戶只向服務器提交一個動作:發(fā)送指定郵件到指定地址。(稱為開關行為)

2、有狀態(tài)會話Bean(Stateful Session Beans)

有狀態(tài)會話Bean是包含狀態(tài)的分布式對象,即是說,貫穿整個會話它們都要保有客戶端信息。舉例而言,在一個網上商店進行實施結賬很可能就需要一個有狀態(tài)會話Bean,因為結賬是一個多步動作,服務器端必須可以隨時了解到用戶已經進行到了哪一步。此外,盡管有狀態(tài)會話Bean的狀態(tài)信息可被保持,但始終只能同是由一個用戶來訪問之。

  • 實體Bean(Entity Beans)

實體Bean是含有持久化狀態(tài)的分布式對象。這個持久化狀態(tài)的管理既可以交給Bean自身(Bean-Managed Persistence,BMP),也可以托付于外部機制(Container-Managed Persistence,CMP)。

  • 消息驅動Bean(Message Driven Beans ,MDBs)

消息驅動Bean是支持異步行為的分布式對象。它們并不對請求進行當即響應。比方說,某網站用戶點擊“請通知我更新信息”按鈕,將會觸發(fā)某個MDB將這名用戶加入到數(shù)據庫的希望獲得更新信息用戶列表中。這個動作就是一個異步的消息驅動過程,因為用戶不必等待當時會返回某個結果。MDB的消息源來自Java消息服務(JMS)提供的消息隊列或消息主題。自EJB 2.0規(guī)范起,JMS被加入進來以允許在容器內部實施事件驅動處理。與其他EJB不同,MDB不存在一個用戶視圖(如需要用戶引用的遠程接口),用戶也不能通過資源定位獲得一個MDB實例。MDB只在后臺監(jiān)聽消息源并實施自動處理。

除了上述以外,目前還有一些EJB處于設想階段,如JSR 86提出了用于在JavaEE應用中集成多媒體對象的媒體Bean(Enterprise Media Beans)。

EJB的體系結構[ ]

  • 目前,EJB最新的標準是2.1,EJB3.0規(guī)范正在討論中,預計將于明年推出。EJB2.1定義了三種企業(yè)Bean,分別是會話Bean(Session Bean),實體Bean(Entity Bean)和消息驅動Bean(MessageDriven Bean)。
  • Session Bean用于實現(xiàn)業(yè)務邏輯,它可以是有狀態(tài)的,也可以是無狀態(tài)的。每當客戶端請求時,容器就會選擇一個Session Bean來為客戶端服務。Session Bean可以直接訪問數(shù)據庫,但更多時候,它會通過Entity Bean實現(xiàn)數(shù)據訪問。
  • Entity Bean是域模型對象,用于實現(xiàn)O/R映射,負責將數(shù)據庫中的表記錄映射為內存中的Entity對象,事實上,創(chuàng)建一個Entity Bean對象相當于新建一條記錄,刪除一個Entity Bean會同時從數(shù)據庫中刪除對應記錄,修改一個Entity Bean時,容器會自動將Entity Bean的狀態(tài)和數(shù)據庫同步。
  • MessageDriven Bean是EJB2.0中引入的新的企業(yè)Bean,它基于JMS消息,只能接收客戶端發(fā)送的JMS消息然后處理。MDB實際上是一個異步的無狀態(tài)Session Bean,客戶端調用MDB后無需等待,立刻返回,MDB將異步處理客戶請求。這適合于需要異步處理請求的場合,比如訂單處理,這樣就能避免客戶端長時間的等待一個方法調用直到返回結果。
  • 調用一個EJB組件要比調用一個JavaBean麻煩些,由于EJB組件可以分布在多口,然后使用Home接口創(chuàng)建EJB之后就可以調用EJB的方法了。

EJB的理論實行[ ]

EJB部署于應用服務器端的EJB容器中。規(guī)范給定了EJB與EJB容器之間,以及用戶代碼與EJB/EJB容器之間的交互方式。對于Java EE API,javax.ejb包定義了EJB類,javax.ejb.spi包定義了EJB容器應當實現(xiàn)的各個接口。

在EJB 2.1和以前的版本中,每個EJB都由一個類和兩個接口組成。EJB容器負責創(chuàng)建這個類的實例,接口則供客戶端調用。

兩個接口分別被稱為Home接口和組件接口,負責提供各個EJB遠程方法聲明。這些EJB遠程方法可分成兩組:

  • 類方法:由Home接口提供。與特定實例無關,僅負責一些公共內容,比如創(chuàng)建一個新的EJB實例(create方法),或尋找一個已經存在的EJB實例(find方法)等等。
  • 接口方法:由組件接口提供的針對特定實例的業(yè)務方法。

EJB容器將為這些接口提供對應的實現(xiàn)類以充當客戶遠程代理,當客戶端調用這個生成的代理類的某個方法時,代理類內部會將此調用的方法和參數(shù)封裝成一個消息發(fā)送給服務器。服務器受到消息后在轉發(fā)給真實的EJB實例,后者負責執(zhí)行真正的業(yè)務邏輯。

遠程通信

EJB規(guī)范要求EJB容器能夠支持基于RMI-IIOP的EJB訪問。EJB既可被任何CORBA應用訪問,也能提供Web服務。

事務

EJB容器必須支持符合ACID(原子性/一致性/獨立性/持久性)特性的容器級事務管理,以及bean內部事務管理。容器級事務需在部署描述符中(EJB應用的配置文件)進行聲明。

事件

EJB使用JMS向客戶對象發(fā)送消息,客戶則可以異步地接受這些消息。MDB則接受來自客戶端的消息。

命名和目錄服務

EJB客戶端使用JNDICORBA名字服務定位Home接口實現(xiàn) 對象。通過此Home接口,用戶還可以尋找,創(chuàng)建或刪除實體對象。

安全

EJB容器對客戶端的訪問權限負責。

部署EJB

EJB規(guī)范還定義了一個跨平臺的統(tǒng)一部署機制。部署描述符中定義了關于EJB應用的一切相關內容。文件名通常為ejb-jar.xml。

部署描述符是一個XML文檔,負責為該EJB應用中的每一個EJB定義入口。部署描述符的主要內容包括:

  1. Home接口名
  2. Bean的Java類名
  3. Home接口的Java接口名
  4. 組件接口的Java接口名
  5. 持久化存儲(針對實體Bean)
  6. 安全策略和角色分配

通常EJB容器提供者還定義了一些額外的XML或其他格式描述文件來強化其容器的功能。他們還同時提供這些描述文件的解讀工具類和對Home接口的自動實現(xiàn)類生成。

EJB3.0起開始廣泛使用Java注釋替代傳統(tǒng)的部署描述符ejb-jar.xml。但后者仍然有效。


EJB版本歷史[ ]

EJB 3.0

2006年5月2日發(fā)布,JSR 220定義。

  • 全面采用Java注釋代替部署描述符。(后者仍可使用,并且具有更高優(yōu)先級)
  • 把2.X版的EntityBean改為由JPA支持。

EJB 2.1

2003年11月24日發(fā)布,JSR 153定義。

  • Web服務:可將無狀態(tài)會話bean暴露為Web服務;EJB可通過引用訪問Web服務。
  • EJB定時器服務:提供一種新的基于定時器的事件驅動方式??晒┫Ⅱ寗觔ean作為消息源使用。
  • 增加了消息目的地。
  • 進一步豐富了EJB查詢語言,支持ORDER BY, AVG, MIN, MAX, SUM, COUNT和MOD。
  • 使用XML schema代替DTD以定義部署描述符。

EJB 2.0

2001年8月22日發(fā)布,JSR 19 定義。

  • 制定了構建面向對象商務應用的標準組建結構。
  • 支持構筑使用不同開發(fā)工具所開發(fā)之組件的聯(lián)合應用部署。
  • 在多線程,連接池,事務管理等方面對用戶透明化。
  • 使符合“一次寫成,多次運行”的Java思想。
  • 關注企業(yè)級應用生命期間的開發(fā),部署,運行等動作。
  • 定義了不同開發(fā)工具所需遵守的契約,以便其產品能夠在運行期交互。
  • 支持與現(xiàn)行系統(tǒng)兼容,開發(fā)者可以擴展現(xiàn)有產品以使之支持EJB。
  • 與其他Java API兼容。
  • 支持EJB與Java2平臺企業(yè)版或者其他非Java應用程序之間的互操作性。
  • 支持與CORBA兼容的RMI-IIOP。

EJB 1.1

1999年12月17日發(fā)布。

  • 開始采用XML部署描述符,默認的JNDI上下文以及可支持IIOP的RMI。
  • 安全機制由角色(Role)驅動,而非方法。
  • 支持實體類,且必須在應用中實現(xiàn)。

EJB 1.0

1998年3月24日發(fā)布。

  • 定義了EJB和EJB容器的作用,實現(xiàn)與互動。
  • 提供了最早的開發(fā)者與用戶視圖。

相關條目[ ]

參考來源[ ]