Geliştirdiğim uygulamanın görevlerinden biri, sistemde çalışan
diğer uygulamaların verilerini yedeklemek. Bu yedekleme işlemini,
katılımsız olarak çalışabilmesi için zamanlamak istiyorum.
JEE6/EJB3.1 Timer yardımcı programlarını kullanıyorum.
TimerHandle türü olan JPA2'yi kullanarak veritabanına devam
ettiğim bir sınıf BackupConfiguration'um var. Kullanıcı yedeklemeyi
zamanlamaya karar verirse, yeni bir kalıcı Zamanlayıcı oluşturup
TimerHandle alanını doldururum.
Sunucuyu yeniden başlatırsam her şey yolunda giderse,
zamanlayıcılar yeniden başlatılır (ve tüm zamanlayıcılar aynı anda
ateşlendiğinde kısa bir panik vardır) ve her şey ben onu bıraktığım
gibi.
Uygulamayı yeniden geliştirirsem (geliştirirken oldukça fazla
olan) tüm zamanlayıcılar kaybolur! Aptalca zamanlayıcıların
sunucuya bağlanacağını, ancak uygulamaya bağlı olduklarını
düşündüm.
Öyleyse, sorum, yeniden dağıtımda kalıcı olan zamanlayıcılar
yapmanın en iyi yolu nedir?
Görebildiğim tek çözüm, ScheduleExpression'un yanı sıra
TimerHandle'ı yedekleme yapılandırmasıyla saklamaktı. Daha sonra,
eğer bir tutamacım varsa ama Zamanlayıcı yoksa, zamanlayıcıyı
yeniden oluştururuz. Bununla birlikte, asıl sorun, programın, eksik
zamanlayıcılar varsa, uygulamayı bulmaya başladığı her zaman, her
programlanmış varlığı sıralamak anlamına gelmesidir. Bu şu anda çok
fazla iş değil, gelecekte büyük bir maliyete dönüşebilir.