मुझे एक अंतराल टाइमर बनाने की आवश्यकता है जो सप्ताह में एक बार स्वचालित रूप से चलाने के लिए सेट है। मैं नहीं चाहता कि यह उपयोगकर्ता इनपुट के आधार पर शुरू हो, लेकिन मैं सर्वर पर तैनात होने पर इसे बनाना चाहता हूं। मैंने जो भी उदाहरण देखा है, वह टाइमर शुरू करने वाली एक और कक्षा है। मैं टाइमर बनाने के लिए एक संदेश संचालित बीन का उपयोग नहीं करना चाहता क्योंकि ऑडिट को किसी दिए गए समयावधि के लिए केवल डेटाबेस से पूछताछ करना चाहिए और संदेशों को भेजने वाले कार्यों से दूर नहीं होना चाहिए।परिनियोजन पर ईजेबी टाइमर कैसे शुरू करें?
मैंने टाइमर का एक उदाहरण शामिल किया है। नीचे दिए गए उदाहरण में, टाइमर को हर 10 मिनट में आग लगनी चाहिए। एक परीक्षण के रूप में मैं टाइमर हर 10 मिनट में आग लगाना चाहता हूं ताकि मैं टाइमर का परीक्षण कर सकूं।
@Stateless
public class TimerTest implements
TimerTestLocal, TimerTestRemote{
@Resource
private TimerService timerService;
private Logger log = Logger.getLogger(TimerTest.class);
private long interval = 1000 * 60 * 10;
private static String TIMER_NAME = "AuditTimer";
public void scheduleTimer() throws NamingException {
// TODO Auto-generated method stub
Calendar cal = Calendar.getInstance();
//cal.set(Calendar.HOUR_OF_DAY, 23);//run at 11pm
//cal.set(Calendar.MINUTE, 00);
//cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm");
log.debug("schedule for: " + sdf.format(cal.getTime()));
timerService.createTimer(cal.getTime(), interval, TIMER_NAME);
}
public void cancelTimer() {
for(Object obj : timerService.getTimers())
{
Timer timer = (Timer)obj;
if(timer.getInfo().equals(TIMER_NAME))
timer.cancel();
}
}
@Timeout
public void timerEvent(Timer timer) {
log.debug("timer fired");
}
}
तो क्या कोई तरीका है कि एप्लिकेशन को तैनात होने पर मैं इस टाइमर को शुरू कर सकता हूं? मुझे नहीं लगता कि सर्वर में क्लास लोडर की वजह से टाइमर को @PostConstruct विधि में रखना अच्छा विचार है।
यह बहुत अच्छा काम करता है। धन्यवाद। – scheibk