簡體   English   中英

如何在Websphere的集群環境中使用EJB 3.1自動非持久計時器?

[英]How to Use EJB 3.1 Automatic Non-Persistent Timer in Clustered Environment on Websphere?

關於集群環境中的自動(使用@Schedule )持久性和非持久性定時器,文檔指出持久性定時器僅在一個集群成員中運行,而自動非持久性定時器在包含EJB的每個集群成員中運行:

IBM知識中心

集群環境中的計時器

在群集環境中,持久性計時器僅在一個群集成員中運行,而該群集成員可能不一定與創建該群集成員的群集成員相同。非持久性計時器在創建該群集成員的每個群集成員中運行-自動非持久性計時器運行在包含EJB的每個集群成員中。

我想使用持久性計時器的此功能(僅在一個集群成員上運行計時器),但是我不希望“持久性”功能,該功能指定計時器將在服務器重啟或崩潰后繼續存在,並嘗試“趕上無法觸發的計時器事件。

有沒有一種方法可以使自動非持久性計時器僅在一個集群成員上運行? 或者,是否可以關閉持久計時器的“追趕”功能?

您所要求的功能(一個非持久性計時器,僅在一個集群成員上運行,並且不會“追趕”先前錯過的到期時間)並未內置於WebSphere Application Server中。 但是,有兩種方法可以模擬它。

第一種選擇:安排一個持久的EJB間隔計時器,該計時器調用javax.ejb.Timer.getTimeRemaining並在否定時跳過自身。

第二種選擇:在每個成員上安排一個非持久性計時器。 使用數據庫或其他持久性存儲來記錄最近嘗試執行的時間戳。 當非持久性計時器嘗試運行時,請嘗試更新持久性存儲,以將時間戳替換為當前時間戳(如果最近未運行)。 如果成功,則運行計時器,否則不運行。 如果集群成員相對較少,這可能會很好地工作,否則數據庫上的爭用可能太多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM