KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jfox > ejb > timer > EJBTimerService


1 package org.jfox.ejb.timer;
2
3 import java.io.Serializable JavaDoc;
4 import java.util.ArrayList JavaDoc;
5 import java.util.Collection JavaDoc;
6 import java.util.Collections JavaDoc;
7 import java.util.Date JavaDoc;
8 import java.util.Iterator JavaDoc;
9 import java.util.List JavaDoc;
10 import java.util.Map JavaDoc;
11 import java.util.WeakHashMap JavaDoc;
12 import javax.ejb.EJBException JavaDoc;
13 import javax.ejb.Timer JavaDoc;
14 import javax.ejb.TimerService JavaDoc;
15
16 /**
17  * only statless session bean & MDB can get TimerService
18  *
19  * @author <a HREF="mailto:yy.young@gmail.com">Young Yang</a>
20  */

21
22 public class EJBTimerService implements TimerService JavaDoc {
23
24     /**
25      * EJBTimerTasks, use WeakHashMap, when EJBTimerTask un contained by java.util.Timer,
26      * it will be automatic removed by GC
27      * EJBTimerTask => timer hashCode
28      */

29     private Map JavaDoc timerTasks = new WeakHashMap JavaDoc();
30 // private List timerTasks = new ArrayList();
31
private static java.util.Timer JavaDoc timer = new java.util.Timer JavaDoc();
32
33     private String JavaDoc ejbName;
34
35     public EJBTimerService(String JavaDoc ejbName) {
36         this.ejbName = ejbName;
37     }
38
39     public Timer JavaDoc createTimer(long duration, Serializable JavaDoc info) throws IllegalArgumentException JavaDoc, IllegalStateException JavaDoc, EJBException JavaDoc {
40         EJBTimerTask ejbTimerTask = new EJBTimerTask(this, info);
41         timer.schedule(ejbTimerTask, duration);
42         timerTasks.put(ejbTimerTask, "" + System.identityHashCode(ejbTimerTask.getTimer()));
43         return ejbTimerTask.getTimer();
44     }
45
46     public Timer JavaDoc createTimer(long initialDuration, long intervalDuration, Serializable JavaDoc info) throws IllegalArgumentException JavaDoc, IllegalStateException JavaDoc, EJBException JavaDoc {
47         EJBTimerTask ejbTimerTask = new EJBTimerTask(this, info);
48         timer.scheduleAtFixedRate(ejbTimerTask, initialDuration, intervalDuration);
49         timerTasks.put(ejbTimerTask, "" + System.identityHashCode(ejbTimerTask.getTimer()));
50         return ejbTimerTask.getTimer();
51     }
52
53     public Timer JavaDoc createTimer(Date JavaDoc expiration, Serializable JavaDoc info) throws IllegalArgumentException JavaDoc, IllegalStateException JavaDoc, EJBException JavaDoc {
54         EJBTimerTask ejbTimerTask = new EJBTimerTask(this, info);
55         timer.schedule(ejbTimerTask, expiration);
56         timerTasks.put(ejbTimerTask, "" + System.identityHashCode(ejbTimerTask.getTimer()));
57         return ejbTimerTask.getTimer();
58     }
59
60     public Timer JavaDoc createTimer(Date JavaDoc initialExpiration, long intervalDuration, Serializable JavaDoc info) throws IllegalArgumentException JavaDoc, IllegalStateException JavaDoc, EJBException JavaDoc {
61         EJBTimerTask ejbTimerTask = new EJBTimerTask(this, info);
62         timer.scheduleAtFixedRate(ejbTimerTask, initialExpiration, intervalDuration);
63         timerTasks.put(ejbTimerTask, "" + System.identityHashCode(ejbTimerTask.getTimer()));
64         return ejbTimerTask.getTimer();
65     }
66
67     public synchronized Collection JavaDoc getTimers() throws IllegalStateException JavaDoc, EJBException JavaDoc {
68         List JavaDoc timers = new ArrayList JavaDoc(timerTasks.size());
69         for(Iterator JavaDoc it = timerTasks.keySet().iterator(); it.hasNext();) {
70             timers.add(((EJBTimerTask) it.next()).getTimer());
71         }
72         return Collections.unmodifiableList(timers);
73     }
74
75     /**
76      * return current EnterpriseBean
77      *
78      * @return
79      */

80     public String JavaDoc getEjbName() {
81         return ejbName;
82     }
83
84     public boolean cancel(EJBTimerTask ejbTimerTask) {
85         return timerTasks.remove(ejbTimerTask) != null;
86     }
87
88     /**
89      * used by TimerHandle.getTimer
90      *
91      * @param timerIdentity may use Timer.hashCode as TimerIdentity
92      * @return
93      */

94     public Timer JavaDoc getTimer(String JavaDoc timerIdentity) {
95         for(Iterator JavaDoc it = timerTasks.entrySet().iterator(); it.hasNext();) {
96             Map.Entry JavaDoc entry = (Map.Entry JavaDoc) it.next();
97             if(entry.getValue().equals(timerIdentity)) {
98                 return ((EJBTimerTask) entry.getKey()).getTimer();
99             }
100         }
101         return null;
102     }
103
104     public static void main(String JavaDoc[] args) {
105
106     }
107
108 }
109
110
Popular Tags