<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    kapok

    垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      455 隨筆 :: 0 文章 :: 76 評論 :: 0 Trackbacks
    解析J2EE1.4新特性(4) - EJB2.1的新特性
    務(wù)實
    14/1/2005
    URL: http://www.zdnet.com.cn/developer/code/story/0,3800066897,39176622,00.htm

    EJB 2.1中的新特性主要集中于有關(guān)SOAP和WSDL的Web服務(wù),包括兩種新推出的Web服務(wù)應(yīng)用程序接口(JAX-RPC和JAXM)。它們可以用來與其他Web服務(wù)模塊通信,并適當?shù)卦赪eb模塊中運用無狀態(tài)的bean和消息驅(qū)動bean。也就是說,基于新的標準,EJB將逐漸成為Web服務(wù)的開發(fā)平臺。

    在支持Web服務(wù)的同時,EJB 2.1也改進了EJB-QL以及消息驅(qū)動bean(MDB)的編程模型。該編程模型目前已經(jīng)擴展至Java消息服務(wù)之上以支持任何一種消息系統(tǒng)。另外,新標準也推出了一種新的計時器服務(wù),使得開發(fā)人員可以設(shè)計計時事件,并提供消息聯(lián)接的接口,供開發(fā)人員在組件之間控制消息的流動之用。

     這里我們并不討論每個特性的太多細節(jié),只是想做一簡單的介紹,起到拋磚引玉的作用。如果讀者有興趣,可以參閱EJB 2.1的相關(guān)規(guī)格說明。下面我們就Web服務(wù)、MDB編程模型和EJBQL三個方面分別加以說明如下:

    一) 對于Web服務(wù)的支持

    EJB 2.1新標準推出的最大原動力就是對于Web服務(wù)的支持。EJB 2.1允許編程人員利用無狀態(tài)的會話bean和消息驅(qū)動bean來開發(fā)基于SOAP的Web服務(wù),并使得基于SOAP 1.1的用戶可以使用相關(guān)的服務(wù)。

    應(yīng)該說明的是,基于其他Web服務(wù)平臺的SOAP客戶通常無法激活無狀態(tài)的會話 bean的方法,例如MS.NET,PERL,Apache Axis。而在EJB 2.1中的Web服務(wù)接口則提供了一個前所未有的跨平臺兼容性。

     EJB 2.1中Web服務(wù)接口是基于兩個新推出的J2EE SOAP技術(shù)的,即JAX-RPC和JAXM。

    1、JAX-RPC和EJB

      JAX-RPC,即Java API for XML-RPC,是基于SOAP的Java RMI技術(shù)的。它與以前的  Java RMI技術(shù)和Java-RMI IIOP技術(shù)類似,不同之處是使用了SOAP作為底層協(xié)議。

      實現(xiàn)JAX-RPC的系統(tǒng)必須支持HTTP之上的RPC編碼機制,另外也應(yīng)該支持其他的編碼機制、消息格式和互聯(lián)網(wǎng)協(xié)議。各種EJB,包括會話bean、實體bean和消息驅(qū)動bean都可以使用JAX-RPC技術(shù)來激活Web服務(wù)的操作。比如說,一個無狀態(tài)的會話bean就可以利用JAX-RPC來調(diào)用.NET Web服務(wù)的方法(見下圖4)。

    圖4 JAX-RPC 和 EJB

     

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

    圖5 通過SOAP和其他Web服務(wù)器通信

    2、JAXM和EJB

      JAXM(Java API for XML Messaging)是一種類似于JMS(Java Message Service,Java消息服務(wù))的消息通信的應(yīng)用程序接口。JMS是一種用于在面向消息的中間件之上發(fā)送和接收消息的應(yīng)用程序接口,而JAXM則是在Web服務(wù)中傳遞消息的應(yīng)用程序接口。因為它主要以傳輸基于XML文件的SOAP消息為主,所以可以說JAXM是面向文檔的。JAXM用戶利用SAAJ(SOAP with Attachments API forJava)集成,接收和管理SOAP消息,其中SAAJ主要是用來管理SOAP消息中的XML結(jié)構(gòu)。

      JAXM技術(shù)與上面所說的JAX-RPC存在很大的不同,后者主要使用方法調(diào)用的機制,并在Java RMI代理(proxy)之間隱藏SOAP消息?;贘AX-RPC技術(shù),開發(fā)人員只會看見遠程接口,即方法、參數(shù)和返回值。而在JAXM的作用下,開發(fā)人員將直接處理SOAP協(xié)議并開發(fā)自己專用的SOAP消息。類似于JAX-RPC,JAXM可以用來與任何遵循SOAP開發(fā)的Web服務(wù)組件交換SOAP消息。比如說,一個enterprise bean可以利用JAXM來與用PERL開發(fā)的Web服務(wù)交換SOAP消息。

      現(xiàn)在一些EJB 2.1開發(fā)人員推薦使用JAXM作為開發(fā)新的消息驅(qū)動bean的基礎(chǔ),即基于JAXM的消息驅(qū)動bean(JAXM-based message-driven bean,JAXM-MDB)。JAXM-MDB可以傳輸SOAP消息并作用為Web服務(wù)的組件?;贘AXM-MDB,開發(fā)人員可以實現(xiàn)單工的消息傳輸接口,或雙工,即可接收可發(fā)送的消息傳輸接口(見下圖6)。就目前來說,因為消息驅(qū)動bean組件可以廣泛用到任意類型的消息系統(tǒng),這種想法應(yīng)該是可行的。

      JAX-RPC和JAXM可以允許enterprise bean來訪問其他平臺的Web服務(wù),并利用無狀態(tài)的會話bean和消息驅(qū)動bean來開發(fā)相應(yīng)的Web服務(wù)模塊。這些應(yīng)用程序接口是相對靈活的,適合于將EJB模塊擴展為Web服務(wù)框架。

    圖6 JAXM-MDB

     

    二)擴展消息驅(qū)動bean

       EJB 2.0引進了消息驅(qū)動bean,可以處理遵循JMS多方的異步消息?;谙Ⅱ?qū)動bean,J2EE平臺可以利用異步消息機制,并改變了服務(wù)器編程的體系結(jié)構(gòu)。

      EJB 2.1將基于JMS的消息驅(qū)動bean編程模型擴展為其他消息系統(tǒng)?;贓JB2.1開發(fā)的應(yīng)用系統(tǒng)仍必須支持基于JMS的消息驅(qū)動bean(JMS-MDB),當然也支持其他類型的消息系統(tǒng)。比如說,一個Web服務(wù)模塊可以支持基于JAXM的消息驅(qū)動bean,該模塊也可以支持SMTP信件協(xié)議、SNMP的設(shè)備控制、peer對peer的協(xié)議。另外,消息驅(qū)動bean也可以作為連接相關(guān)OLTP系統(tǒng)如CICS,IMS,openUTM的橋梁。

      另外還要說明一點,由于新推出的消息驅(qū)動bean組件是基于J2EE連接器體系結(jié)構(gòu)的(Java Connector Architecture,JCA1.5),所以該組件具有在消息系統(tǒng)之間良好的移植性。JCA 1.5通常是用于定義商業(yè)信息系統(tǒng)中的可移植程序模型。比如說,開發(fā)人員可以利用JCA 1.5定義一個基于SMTP的消息驅(qū)動bean,而該bean是可以在所有遵循EJB 2.1標準的服務(wù)器上移植的(如下圖7)。

    圖7 JCA 1.5

    1、目標鏈接(destination linking)

       EJB 2.1另外一個新特性就是目標鏈接。簡單地說,EJB容器可以將一個消息服務(wù)的輸出傳送至另一個消息驅(qū)動bean的輸入,即新目標。

       比如說,一個無狀態(tài)的會話bean可以使用JMS發(fā)送一條異步消息到相應(yīng)的目標,而在部署應(yīng)用系統(tǒng)的時候,開發(fā)人員可以將該目標連接到一個部署在同一個EJB容器的消息驅(qū)動bean。也就是說,開發(fā)人員可以使用目標鏈接技術(shù)在部署期間定義消息流動,從而在商業(yè)平臺描述完整的工作流。

    2、定時器服務(wù)機制

      定時器服務(wù)機制是一個在EJB容器開發(fā)的調(diào)度系統(tǒng)。一個無狀態(tài)的會話bean或?qū)嶓wbean可以在相應(yīng)的定時器中登記,從而在未來一定的時間點被定時器通知。

      定時器服務(wù)機制使用的是一個簡單的程序框架。作為其基礎(chǔ)的無狀態(tài)的會話bean 或?qū)嶓wbean必須實現(xiàn)TimedObject接口:

        public interface javax.ejb.TimedObject{

        public void ejbTimeout(Timer timer);

        }

       當一個bean的相關(guān)時間點到達的時候,容器將會調(diào)用定時器的ejbTimeout()方法在這個方法中,開發(fā)人員將根據(jù)需求定義其應(yīng)用邏輯。比如說,一個關(guān)于用戶信息的實體bean具有一個每隔60天觸發(fā)的定時器,以用來提醒用戶應(yīng)該修改密碼。這樣的話,每隔60天,EJB容器就會調(diào)用該定時器的ejbTimeout()方法,而這個實體bean就會向相關(guān)的mailer模塊發(fā)送一條JMS消息,后者將會向用戶的電子信箱發(fā)送要求修改密碼的email。Timer對象還具有一些其他特性,比如可以取消一個已定的定時器,查詢在觸發(fā)之前還有多少時間等。另外,開發(fā)人員還可以將一個定時器對象聯(lián)系到一個可序列化的對象,從而在定時器中存儲一些與應(yīng)用相關(guān)的信息。當定時器響應(yīng)的時候,開發(fā)人員可以訪問一定的應(yīng)用信息并決定如何處理相關(guān)的時間。

     EJB可以通過TimerService接口來訪問EJB容器的定時器服務(wù),也就是說實體bean和會話bean必須使用該接口來設(shè)定它們自己的定時器。為了達到這一目的,bean必須首先調(diào)用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();

        }

       ……

       在一些情況下,開發(fā)人員只需要定時器在特定的時間響應(yīng)一次,而在其他一些情況下,則需要定時器間隔一定時間持續(xù)響應(yīng)。比方說,上面我們提到的ejb就會每隔60天提醒用戶,也就是每隔60天的時間間隔就會響應(yīng)一次。

      一個無狀態(tài)的會話bean或是實體bean可以設(shè)定多個定時器,但是一般來說它們都是由相同的ejbTimeout方法管理的。這種方法也可以使用可序列化的對象來區(qū)分不同的定時器。

    三)EJBQL的提高

      EJB 2.1也包括兩項對于EJBQL的提高,即order by語句的加入和一些新函數(shù)。

    1、order by語句

      以前的EJB規(guī)格描述中并沒有包含order by語句,而在EJB 2.1中,EJBQL已經(jīng)開始支持order by語句的應(yīng)用了。比如說開發(fā)人員可以設(shè)計一個數(shù)據(jù)庫用戶信息查詢,并將查詢結(jié)果按照用戶的系統(tǒng)ID排序:

      SELECT OBJECT(I)

      FROM Users as I

      ORDER BY UID

     order by語句通常會寫在EJB遠程或本地接口的查找(finder)或選擇(select)語句中。通常來說在order by語句的標識符(identifier)都是路徑表達式(path expression),并以容器管理的持久性變量結(jié)束。這里需要說明的是,order by語句只能應(yīng)用于相關(guān)ejb的容器管理的持久性變量。在order by語句中,開發(fā)人員也可以使用DESC或ASC來指定排列結(jié)果時下降或上升的次序,其中上升次序是缺省值。

    開發(fā)人員也可以在select方法中,即選出持久性變量時使用order by語句。在下面的例子中,該查詢選出了具有特定住址的用戶,并按照姓名排序:

       SELECT DISTINCT I.customer.name

    FROM Customer as I

        WHERE I.city=NanJing

        ORDER BY I.customer.name

        當一個EJBQL查詢選出持續(xù)性變量時,order by值應(yīng)用于在該選出語句(select)出現(xiàn)的持續(xù)性變量。比如說,在上例中,開發(fā)人員無法先選出用戶的姓名,而是使用用戶的年齡進行排序。

    2.新功能

       新的EJBQL對于where語句和select語句都加入了一些新的函數(shù)。在where語句中,除了已有的concat,substring,locate,length,abs和sqrt函數(shù),EJB2.1加入了mod函數(shù)。

        EJB 2.1也同時向select語句中加入了5個新的集合類函數(shù):AVG,COUNT,MAX,MIN和SUM,這些函數(shù)的功能都和SQL-92中相應(yīng)的定義類似。不同的是,AVG和SUM只作用于數(shù)字類型,而COUNT,MAX和MIN函數(shù)則作用于任意一個容器管理的持久性變量,包括日期類型和字符串類型。Count則可以應(yīng)用于一個容器管理的持久性變量或是EJB標識符。

        比方說,我們可以定義一個查詢,以得到所有住在南京的用戶。這里COUNT函數(shù)直接地作用在標識符上,而無需OBJECT()操作:

        SELECT COUNT(C)

        FROM Customer as C

        WHERE C.city=NanJing

    下面的例子中,我們可以得到用戶工資的總和:

        SELECT SUM(C.totalsalary)

        FROM Customer as C

        WHERE C.city=NanJing

    以上我們簡要地介紹了EJB 2.1中的新特性,包括Web服務(wù)、消息驅(qū)動bean和  EJBQL等方面的提高,有興趣的讀者也可以參照最新的EJB規(guī)范描述來進一步研究和實踐。


    作者:務(wù)實,多年從事J2EE網(wǎng)站及應(yīng)用系統(tǒng)項目的開發(fā)和應(yīng)用。

    posted on 2005-06-20 18:01 笨笨 閱讀(199) 評論(0)  編輯  收藏 所屬分類: J2EE 、ALL
    主站蜘蛛池模板: 亚洲视频欧洲视频| 国产V亚洲V天堂无码| 亚洲高清一区二区三区| 91热久久免费精品99| 久久精品a亚洲国产v高清不卡| 一个人免费日韩不卡视频| 久久精品亚洲视频| 久9这里精品免费视频| 亚洲人成依人成综合网| 久操视频免费观看| 亚洲永久永久永久永久永久精品| 国产免费无码AV片在线观看不卡| 亚洲乱码国产乱码精品精| AAA日本高清在线播放免费观看| 亚洲国产成人一区二区精品区| 可以免费观看的国产视频| 久久丫精品国产亚洲av| 青娱乐免费在线视频| 亚洲国产精品无码久久久秋霞1| 国产公开免费人成视频| 久香草视频在线观看免费| 亚洲色婷婷六月亚洲婷婷6月| 中文字幕久精品免费视频| 亚洲综合激情六月婷婷在线观看| 精品久久久久久久久免费影院| 亚洲熟妇AV一区二区三区浪潮| 亚洲阿v天堂在线2017免费| 中文字幕不卡免费视频| 亚洲精品第一国产综合精品| 情侣视频精品免费的国产| 无遮挡免费一区二区三区 | 最好2018中文免费视频| 在线亚洲97se亚洲综合在线| 在线看片免费人成视久网| 亚洲色大成网站www永久男同| 亚洲中文字幕伊人久久无码| 9277手机在线视频观看免费| 亚洲乱码日产精品一二三| 亚洲一区精品无码| 久久久久久99av无码免费网站 | 亚洲综合国产成人丁香五月激情|