EJB Timer Service的高階特性

2021-04-01 03:29:10 字數 2732 閱讀 1934

ejb 2.1中新增了乙個timer service服務,我也看到一些文章介紹如何使用timer服務,但是關於timer服務的幾個重要特性就言之甚少。我看了ejb 2.1規範後又試驗了一下這些相對比較高階的特性,介紹給大家共享。

先了解一下這幾個特性,他們是:

1)設定時間間隔後能重複定時的timer

在ejb 2.1規範中定義的timer有兩種,一種是single-event timers,另一種是interval timers。single-event timers在它的生命週期中只產生一次timeout,而interval timers可以在每經過一段時間間隔後產生一次timeout。

2)timer的永續性

如果伺服器被關機,那麼這些timer仍然起作用,等到下次伺服器啟動時能夠繼續計時。假如啟動時已經超時,那麼立即產生timeout。

3)事務特性

timer的建立(create)、取消(cancel),以及ejb的ejbtimeout方法都可以參與事務,作為事務的一部分,他們可以在事務回滾(rollback)時恢復狀態。

也就是說,如果在事務中呼叫timerservice的createtimer方法,那麼回滾時將銷毀建立的timer;如果在事務中呼叫了timer的cancel方法,那麼回滾時將恢復這個timer。

如果因為ejbtimeout方法執行失敗導致事務回滾,那麼規範要求伺服器的timer service在之後要至少再次呼叫ejbtimeout方法一次。之所以要求這樣做的原因呢,我想可能是因為那些需要定時完成的業務都是相對比較重要的,如果rollback後不加以處理可能會產生嚴重後果。

好了,現在開始我們的試驗。不過對於timer service的基礎知識,以及如何寫乙個使用timer service的ejb,我這裡就不作詳細介紹了,有需要的話可以看看以下的文章。

一、

準備

二、

試驗方案

對於上述的特性,我打算在同乙個應用中測試,這個應用很簡單,客戶訪問乙個jsp頁面,啟用 timer,這個timer在超時後會呼叫乙個stateless session bean的ejbtimeout方法,此時我們就在後台列印出除錯資訊。

需要說明的是,stateful session bean 中不可以使用timer service,其他型別的ejb都可以。

三、

試驗結果

1)對於最常用的single-event timers,試驗結果是正常的,伺服器可以在計時超時的時候呼叫ejbtimeout方法。建立這種timer的**片斷如下:

public string gethello()

2)對於interval timers型別,試驗結果也是正常的,伺服器可以在每次間隔時間超時的時候呼叫ejbtimeout方法。建立這種timer的**片斷如下:

public string gethello()

3)對於timer的永續性,我採用重啟伺服器的方法,當伺服器重新啟動後,如果時間還沒有超時,伺服器會繼續計時,這一點是正確的;另一種情況下,如果啟動後時間已經超時,伺服器會在啟動後立即呼叫ejbtimeout,試驗通過。

4)針對三個方法的事務特性,我分別寫**來測試。首先,單獨將createtimer方法包含在乙個usertransaction事務中,並在執行中將事務rollback。試驗中,伺服器將事務回滾,之後timer不再起作用,沒有呼叫ejbtimeout方法。**如下:

public string gethello()

5)對於cancel方法的事務特性,和上面的過程類似,將timer.cancel()包含在乙個事務中,並在執行過程中將事務rollback。試驗中,伺服器將事務回滾,之後timer可以繼續計時,並呼叫ejbtimeout方法。**如下:

public string gethello()}6)

對於ejbtimeout方法的事務特性,試驗時我把這個方法的cmt屬性設定為requiresnew,同時在此方法中模擬失敗後呼叫rollback的情況,首先伺服器把事務回滾,然後在5秒後再次呼叫ejbtimeout方法,完全和規範描述的一樣。實際上這個5秒的時間是可以自己配置的,在apusic.conf檔案中,有ejbtimerservice的配置,內容如下:

class="***.apusic.ejb.timer.ejbtimerservice">

其中的redeliveryinterval指的就是重新呼叫ejbtimeout的等待時間。而另一項maxredeliveries屬性指的是重新呼叫的次數。

我測試的**如下:

public void ejbtimeout(timer timer)

四、結束語

ejb 2.1

中新增的

ejb timer service

功能雖然簡單,但是它的一些高階特性卻很實用,遺憾的是大家還沒有注意到這些特性,我在這裡拋磚引玉,做乙個小小的測試,希望能對哪些對

timer

服務感興趣的人有幫助。以上所有特性都只在

apusic 4.0

上進行了試驗,全部通過測試。本來還想在

weblogic 9.0 beta

上也做相同的測試,但是我拿到的版本總是不能順利的部署

j2ee 1.4

的應用,無奈只好放棄,還請有興趣的朋友做進一步測試。

python學習筆記(三) python高階特性

python的高階特性有切片 迭代 列表生成式 生成器 迭代器等,下面來介紹這幾種高階特性 1 切片 切片特別簡單,用中括號表示範圍,包前不包後。就是中括號裡邊的範圍前面的數值被包括在內,後面的數值不被包括在內。l a b c d l 0 3 索引從0開始取到3,不包括3.索引從0開始,0可以省略 ...

特基礎特基礎的東西隨便寫寫

include include include using namespace std 定義人類 person 資料成員 m strname 成員函式 attack class person 定義士兵類 soldier 士兵類公有繼承人類 資料成員 m strname 成員函式 attack cla...

生命的特度

rel file list href file c 5cdocume 7e1 5cthreed 7e1 5clocals 7e1 5ctemp 5cmsohtmlclip1 5c01 5cclip filelist.xml rel edit time data href file c 5cdocum...