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

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

EJB Timer Service的高級(jí)特性心得分享

2019-11-17 06:05:51
字體:
供稿:網(wǎng)友
  
  EJB 2.1中新增了一個(gè)Timer Service服務(wù),我也看到一些文章介紹如何使用Timer服務(wù),但是關(guān)于Timer服務(wù)的幾個(gè)重要特性就言之甚少。我看了EJB 2.1規(guī)范后又試驗(yàn)了一下這些相對(duì)比較高級(jí)的特性,介紹給大家共享。

  先了解一下這幾個(gè)特性,他們是:

  1)設(shè)定時(shí)間間隔后能重復(fù)定時(shí)的Timer

  在EJB 2.1規(guī)范中定義的Timer有兩種,一種是single-event timers,另一種是interval timers。single-event timers在它的生命周期中只產(chǎn)生一次timeout,而interval timers可以在每經(jīng)過一段時(shí)間間隔后產(chǎn)生一次timeout。

  2)Timer的持久性

  假如服務(wù)器被關(guān)機(jī),那么這些timer仍然起作用,等到下次服務(wù)器啟動(dòng)時(shí)能夠繼續(xù)計(jì)時(shí)。假如啟動(dòng)時(shí)已經(jīng)超時(shí),那么立即產(chǎn)生timeout。

  3)事務(wù)特性

  Timer的創(chuàng)建(create)、取消(cancel),以及EJB的ejBTimeout方法都可以參與事務(wù),作為事務(wù)的一部分,他們可以在事務(wù)回滾(Rollback)時(shí)恢復(fù)狀態(tài)。

  也就是說,假如在事務(wù)中調(diào)用TimerService的createTimer方法,那么回滾時(shí)將銷毀創(chuàng)建的Timer;假如在事務(wù)中調(diào)用了Timer的cancel方法,那么回滾時(shí)將恢復(fù)這個(gè)Timer。

  假如因?yàn)閑jbTimeout方法運(yùn)行失敗導(dǎo)致事務(wù)回滾,那么規(guī)范要求服務(wù)器的Timer Service在之后要至少再次調(diào)用ejbTimeout方法一次。之所以要求這樣做的原因呢,我想可能是因?yàn)槟切┬枰〞r(shí)完成的業(yè)務(wù)都是相對(duì)比較重要的,假如Rollback后不加以處理可能會(huì)產(chǎn)生嚴(yán)重后果。

  好了,現(xiàn)在開始我們的試驗(yàn)。不過對(duì)于timer service的基礎(chǔ)知識(shí),以及如何寫一個(gè)使用timer service的EJB,我這里就不作具體介紹了,有需要的話可以看看以下的文章。http://sammi_tea.mblogger.cn/posts/10373.aspx

一、預(yù)備

  因?yàn)門imer服務(wù)是EJB 2.1的特性,需要一個(gè)實(shí)現(xiàn)了EJB 2.1的服務(wù)器,我就下載了Apusic 4.0來測試。

  下載地址:http://www.apusic.com

二、試驗(yàn)方案

  對(duì)于上述的特性,我打算在同一個(gè)應(yīng)用中測試,這個(gè)應(yīng)用很簡單,客戶訪問一個(gè)jsp頁面,激活 Timer,這個(gè)Timer在超時(shí)后會(huì)調(diào)用一個(gè)stateless session bean的ejbTimeout方法,此時(shí)我們就在后臺(tái)打印出調(diào)試信息。

  需要說明的是,Stateful session bean 中不可以使用Timer Service,其他類型的EJB都可以。

三、試驗(yàn)結(jié)果

  1)對(duì)于最常用的single-event timers,試驗(yàn)結(jié)果是正常的,服務(wù)器可以在計(jì)時(shí)超時(shí)的時(shí)候調(diào)用ejbTimeout方法。創(chuàng)建這種Timer的代碼片斷如下:

public String getHello(){

TimerService ts = sessionContext.getTimerService();

ts.createTimer(20000, null); //計(jì)時(shí)20秒
}



  2)對(duì)于interval timers類型,試驗(yàn)結(jié)果也是正常的,服務(wù)器可以在每次間隔時(shí)間超時(shí)的時(shí)候調(diào)用ejbTimeout方法。創(chuàng)建這種Timer的代碼片斷如下:

public String getHello(){

TimerService ts = sessionContext.getTimerService();

ts.createTimer(new Date(第一次超時(shí)時(shí)間), 20000, null);
}



進(jìn)入討論組討論。
  
  3)對(duì)于Timer的持久性,我采用重啟服務(wù)器的方法,當(dāng)服務(wù)器重新啟動(dòng)后,假如時(shí)間還沒有超時(shí),服務(wù)器會(huì)繼續(xù)計(jì)時(shí),這一點(diǎn)是正確的;另一種情況下,假如啟動(dòng)后時(shí)間已經(jīng)超時(shí),服務(wù)器會(huì)在啟動(dòng)后立即調(diào)用ejbTimeout,試驗(yàn)通過。

  4)針對(duì)三個(gè)方法的事務(wù)特性,我分別寫代碼來測試。首先,單獨(dú)將createTimer方法包含在一個(gè)UserTransaction事務(wù)中,并在運(yùn)行中將事務(wù)rollback。試驗(yàn)中,服務(wù)器將事務(wù)回滾,之后Timer不再起作用,沒有調(diào)用ejbTimeout方法。代碼如下:


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 芒康县| 鄂托克旗| 高阳县| 台安县| 西丰县| 左云县| 恩施市| 平乐县| 信宜市| 夹江县| 繁峙县| 凤冈县| 法库县| 汉沽区| 嘉义市| 云阳县| 大渡口区| 习水县| 广安市| 本溪| 分宜县| 安顺市| 乌鲁木齐市| 西乌| 霍邱县| 凤凰县| 江西省| 韶山市| 拉萨市| 隆昌县| 沧州市| 陆丰市| 阳信县| 阳朔县| 昌黎县| 嵊泗县| 铜梁县| 香格里拉县| 忻城县| 林周县| 河西区|