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

首頁 > 學院 > 開發設計 > 正文

J2EE1.4新特性之EJB2.1的新特性

2019-11-18 12:35:38
字體:
來源:轉載
供稿:網友

  EJB 2.1中的新特性主要集中于有關SOAP和WSDL的Web服務,包括兩種新推出的Web服務應用程序接口(JAX-RPC和JAXM)。它們可以用來與其他Web服務模塊通信,并適當地在Web模塊中運用無狀態的bean和消息驅動bean。也就是說,基于新的標準,EJB將逐漸成為Web服務的開發平臺。
  
  在支持Web服務的同時,EJB 2.1也改進了EJB-QL以及消息驅動bean(MDB)的編程模型。該編程模型目前已經擴展至java消息服務之上以支持任何一種消息系統。另外,新標準也推出了一種新的計時器服務,使得開發人員可以設計計時事件,并提供消息聯接的接口,供開發人員在組件之間控制消息的流動之用。
  
  這里我們并不討論每個特性的太多細節,只是想做一簡單的介紹,起到拋磚引玉的作用。假如讀者有愛好,可以參閱EJB 2.1的相關規格說明。下面我們就Web服務、MDB編程模型和EJBQL三個方面分別加以說明如下:
  
  (一) 對于Web服務的支持
  
  EJB 2.1新標準推出的最大原動力就是對于Web服務的支持。EJB 2.1答應編程人員利用無狀態的會話bean和消息驅動bean來開發基于SOAP的Web服務,并使得基于SOAP 1.1的用戶可以使用相關的服務。
  
  應該說明的是,基于其他Web服務平臺的SOAP客戶通常無法激活無狀態的會話 bean的方法,例如MS.NET,PERL,Apache Axis。而在EJB 2.1中的Web服務接口則提供了一個前所未有的跨平臺兼容性。
  
  EJB 2.1中Web服務接口是基于兩個新推出的J2EE SOAP技術的,即JAX-RPC和JAXM。
  
  1、JAX-RPC和EJB
  
  JAX-RPC,即Java API for xml-RPC,是基于SOAP的Java RMI技術的。它與以前的 Java RMI技術和Java-RMI IIOP技術類似,不同之處是使用了SOAP作為底層協議。
  
  實現JAX-RPC的系統必須支持HTTP之上的RPC編碼機制,另外也應該支持其他的編碼機制、消息格式和互聯網協議。各種EJB,包括會話bean、實體bean和消息驅動bean都可以使用JAX-RPC技術來激活Web服務的操作。比如說,一個無狀態的會話bean就可以利用JAX-RPC來調用.NET Web服務的方法(見下圖1)。 
  
  

   J2EE1.4新特性之EJB2.1的新特性(圖一)
  圖1 JAX-RPC 和 EJB
  

  
  JAX-RPC同樣也是一種新的組件接口的開發基礎,這種接口稱為終點(endpoint)接口,它答應一個無狀態的會話bean作用為一個Web服務組件。終點接口實現了javax.rmi.Remote接口并遵循JAX-RPC的協議標準。其中,將一個無狀態的會話bean作為Web組件來部署的過程并不是很復雜,開發人員只需要定義bean的類文件及遠程接口,并將其部署至相關的應用程序中。一旦Web服務的組件部署成功后,其方法可以被任何一個遵循SOAP協議的組件調用,而無論組件是基于何種開發語言或開發平臺的,如.NET,PERL,Apache Axis,C,C++及其他(見下圖2)。
  
  

   J2EE1.4新特性之EJB2.1的新特性(圖二)
  圖2 通過SOAP和其他Web服務器通信
  

  
  2、JAXM和EJB
  
  JAXM(Java API for XML Messaging)是一種類似于JMS(Java Message Service,Java消息服務)的消息通信的應用程序接口。JMS是一種用于在面向消息的中間件之上發送和接收消息的應用程序接口,而JAXM則是在Web服務中傳遞消息的應用程序接口。因為它主要以傳輸基于XML文件的SOAP消息為主,所以可以說JAXM是面向文檔的。JAXM用戶利用SAAJ(SOAP with Attachments API forJava)集成,接收和治理SOAP消息,其中SAAJ主要是用來治理SOAP消息中的XML結構。
  
  JAXM技術與上面所說的JAX-RPC存在很大的不同,后者主要使用方法調用的機制,并在Java RMI代理(PRoxy)之間隱藏SOAP消息。基于JAX-RPC技術,開發人員只會看見遠程接口,即方法、參數和返回值。而在JAXM的作用下,開發人員將直接處理SOAP協議并開發自己專用的SOAP消息。類似于JAX-RPC,JAXM可以用來與任何遵循SOAP開發的Web服務組件交換SOAP消息。比如說,一個enterprise bean可以利用JAXM來與用PERL開發的Web服務交換SOAP消息。
  
  現在一些EJB 2.1開發人員推薦使用JAXM作為開發新的消息驅動bean的基礎,即基于JAXM的消息驅動bean(JAXM-based message-driven bean,JAXM-MDB)。JAXM-MDB可以傳輸SOAP消息并作用為Web服務的組件。基于JAXM-MDB,開發人員可以實現單工的消息傳輸接口,或雙工,即可接收可發送的消息傳輸接口(見下圖3)。就目前來說,因為消息驅動bean組件可以廣泛用到任意類型的消息系統,這種想法應該是可行的。
  
  JAX-RPC和JAXM可以答應enterprise bean來訪問其他平臺的Web服務,并利用無狀態的會話bean和消息驅動bean來開發相應的Web服務模塊。這些應用程序接口是相對靈活的,適合于將EJB模塊擴展為Web服務框架。
  
  

   J2EE1.4新特性之EJB2.1的新特性(圖三)
  圖3 JAXM-MDB
  

  
  (二)擴展消息驅動bean
  
  EJB 2.0引進了消息驅動bean,可以處理遵循JMS多方的異步消息。基于消息驅動bean,J2EE平臺可以利用異步消息機制,并改變了服務器編程的體系結構。
  
  EJB 2.1將基于JMS的消息驅動bean編程模型擴展為其他消息系統。基于EJB2.1開發的應用系統仍必須支持基于JMS的消息驅動bean(JMS-MDB),當然也支持其他類型的消息系統。比如說,一個Web服務模塊可以支持基于JAXM的消息驅動bean,該模塊也可以支持SMTP信件協議、SNMP的設備控制、peer對peer的協議。另外,消息驅動bean也可以作為連接相關OLTP系統如CICS,IMS,openUTM的橋梁。
  
  另外還要說明一點,由于新推出的消息驅動bean組件是基于J2EE連接器體系結構的(Java Connector Architecture,JCA1.5),所以該組件具有在消息系統之間良好的移植性。JCA 1.5通常是用于定義商業信息系統中的可移植程序模型。比如說,開發人員可以利用JCA 1.5定義一個基于SMTP的消息驅動bean,而該bean是可以在所有遵循EJB 2.1標準的服務器上移植的(如下圖4)。
  
  

  J2EE1.4新特性之EJB2.1的新特性(圖四)
  圖4 JCA 1.5
  

  
  1、目標鏈接(destination linking)
  
  EJB 2.1另外一個新特性就是目標鏈接。簡單地說,EJB容器可以將一個消息服務的輸出傳送至另一個消息驅動bean的輸入,即新目標。
  
  比如說,一個無狀態的會話bean可以使用JMS發送一條異步消息到相應的目標,而在部署應用系統的時候,開發人員可以將該目標連接到一個部署在同一個EJB容器的消息驅動bean。也就是說,開發人員可以使用目標鏈接技術在部署期間定義消息流動,從而在商業平臺描述完整的工作流。
  
  2、定時器服務機制
  
  定時器服務機制是一個在EJB容器開發的調度系統。一個無狀態的會話bean或實體bean可以在相應的定時器中登記,從而在未來一定的時間點被定時器通知。
  
  定時器服務機制使用的是一個簡單的程序框架。作為其基礎的無狀態的會話bean 或實體bean必須實現 TimedObject接口:
  public interface javax.ejb.TimedObject{
  public void ejBTimeout(Timer timer);
  }
  
  當一個bean的相關時間點到達的時候,容器將會調用定時器的ejbTimeout()方法在這個方法中,開發人員將根據需求定義其應用邏輯。 比如說,一個關于用戶信息的實體bean具有一個每隔60天觸發的定時器,以用來提醒用戶應該修改密碼。這樣的話,每隔60天,EJB容器就會調用該定時器的ejbTimeout()方法,而這個實體bean就會向相關的mailer模塊發送一條JMS消息,后者將會向用戶的電子信箱發送要求修改密碼的email。Timer對象還具有一些其他特性,比如可以取消一個已定的定時器,查詢在觸發之前還有多少時間等。另外,開發人員還可以將一個定時器對象聯系到一個可序列化的對象,從而在定時器中存儲一些與應用相關的信息。當定時器響應的時候,開發人員可以訪問一定的應用信息并決定如何處理相關的時間。
  
  EJB可以通過TimerService接口來訪問EJB容器的定時器服務,也就是說實體bean和會話bean必須使用該接口來設定它們自己的定時器。為了達到這一目的,bean必須首先調用EJBContext.getTimerService()方法的程序示例如下:
  
  ……  
  public interface javax.ejb.TimerService{
  public Timer createTimer(java.util.Date eXPiration,
  java.iO.Serializable info);
  public Timer createTimer(java.util.Date initialExpiration,
  long intervalDuration,java.io.Serializable info);
  public Timer createTimer(long duration,
  java.io.Serializable info);
  public Timer createTimer(long initialDuration,
  long intervalDuration,
  java.io.Serializable info);
  public Collection getTimers();
  }
  ……
  
  在一些情況下,開發人員只需要定時器在特定的時間響應一次,而在其他一些情況下,則需要定時器間隔一定時間持續響應。比方說,上面我們提到的ejb就會每隔60天提醒用戶,也就是每隔60天的時間間隔就會響應一次。
  
  一個無狀態的會話bean或是實體bean可以設定多個定時器,但是一般來說它們都是由相同的ejbTimeout方法治理的。這種方法也可以使用可序列化的對象來區分不同的定時器。
  
  (三)EJBQL的提高
  
  EJB 2.1也包括兩項對于EJBQL的提高,

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长丰县| 新宁县| 德江县| 呼玛县| 阜新| 北辰区| 平罗县| 合肥市| 龙井市| 孟连| 涟水县| 商水县| 孙吴县| 荣成市| 福鼎市| 霞浦县| 方正县| 阳曲县| 舞钢市| 蓝田县| 米林县| 花垣县| 武川县| 出国| 禹州市| 蓬溪县| 桐柏县| 新宁县| 济源市| 垫江县| 那坡县| 墨江| 上饶市| 五大连池市| 洪江市| 丰宁| 勃利县| 内丘县| 榆社县| 政和县| 曲阳县|