我正在開發的應用程序的任務之一是備份系統上運行的其他應用程序的數據。我想安排此備份過程,以便它可以無人值守運行。我正在使用JEE6/EJB3.1 Timer實用程序。JEE6重新部署時的定時器持久性
我有一個類BackupConfiguration,我堅持使用JPA2的數據庫,它有一個類型爲TimerHandle的字段。如果用戶決定安排備份,我將創建一個新的持久性Timer並填充TimerHandle字段。
如果我重新啓動服務器,一切正常,定時器重新啓動(並且所有定時器立刻開啓,嘆息時有一個短暫的恐慌),一切都在我離開它的時候。
如果我重新部署應用程序(在開發它時發生了很多事情),所有的計時器都會丟失!我愚蠢地認爲定時器會綁定到服務器,但事實證明它們與應用程序綁定在一起。
所以,我的問題是,什麼是最好的方法來使定時器在重新部署中保持不變?
我能看到的唯一解決方案是將ScheduleExpression以及TimerHandle與備份配置一起存儲。然後,如果我有一個句柄,但沒有定時器,我重新創建了定時器。這個問題的主要問題是它意味着每次應用程序開始查找是否缺少定時器時枚舉每個計劃實體。目前這並不是很多工作,但未來可能會成爲一項巨大的成本。
哪個應用服務器您使用的?您正在描述WebSphere Application Server的行爲,但尚不清楚。如果這是您正在使用的應用程序服務器,那麼我認爲除非應用程序服務器在執行卸載時停止(例如,使用斷開連接的wsadmin會話),否則可以選擇避免在重新部署過程中清除持久定時器。 –
我使用GlassFish 3.0.1,這似乎是標準行爲。 – wobblycogs