01: /*
02: * JacORB - a free Java ORB
03: *
04: * Copyright (C) 1999-2004 Gerald Brose
05: *
06: * This library is free software; you can redistribute it and/or
07: * modify it under the terms of the GNU Library General Public
08: * License as published by the Free Software Foundation; either
09: * version 2 of the License, or (at your option) any later version.
10: *
11: * This library is distributed in the hope that it will be useful,
12: * but WITHOUT ANY WARRANTY; without even the implied warranty of
13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14: * Library General Public License for more details.
15: *
16: * You should have received a copy of the GNU Library General Public
17: * License along with this library; if not, write to the Free
18: * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19: *
20: */
21:
22: package org.jacorb.notification.servant;
23:
24: import org.jacorb.notification.engine.TaskProcessor;
25: import org.jacorb.notification.interfaces.MessageSupplier;
26:
27: import edu.emory.mathcs.backport.java.util.concurrent.ScheduledFuture;
28:
29: public class PullMessagesUtility {
30: private ScheduledFuture taskId_;
31:
32: private long interval_;
33:
34: private final TaskProcessor taskProcessor_;
35:
36: private final Runnable timerJob_;
37:
38: public PullMessagesUtility(final TaskProcessor taskProcessor,
39: final MessageSupplier messageSupplier) {
40: taskProcessor_ = taskProcessor;
41: timerJob_ = new Runnable() {
42: public void run() {
43: taskProcessor.scheduleTimedPullTask(messageSupplier);
44: }
45: };
46: }
47:
48: public synchronized void startTask(long interval) {
49: if (interval <= 0) {
50: throw new IllegalArgumentException("Interval " + interval
51: + " must be > 0");
52: }
53:
54: if (taskId_ == null) {
55: taskId_ = taskProcessor_.executeTaskPeriodically(interval,
56: timerJob_, true);
57: interval_ = interval;
58: }
59: }
60:
61: public synchronized void stopTask() {
62: if (taskId_ != null) {
63: taskId_.cancel(true);
64: taskId_ = null;
65: }
66: }
67:
68: public synchronized void restartTask(long interval) {
69: if (taskId_ == null) {
70: throw new IllegalStateException("Not started");
71: }
72:
73: if (interval_ != interval) {
74: stopTask();
75:
76: startTask(interval);
77: }
78: }
79: }
|