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.