A "Hello" program on EJB3 with Jboss server 4.2.2GA (PART 3) - EJB3 Timer service.

    Timer service in EJB3 with anotation is fairly simple, I give you an example as follow, and it's really simple and self-explanation:
 1 package com.ramon.expejb3.session.impl;
 2 
 3 import javax.annotation.Resource;
 4 import javax.ejb.Stateless;
 5 import javax.ejb.Timeout;
 6 import javax.ejb.Timer;
 7 import javax.ejb.TimerService;
 8 
 9 import com.ramon.expejb3.session.Greeting;
10 
11 @Stateless(name = "Greeting")
12 public class GreetingBean implements Greeting {
13     
14     @Resource
15     TimerService ts;
16 
17     /* (non-Javadoc)
18      * @see com.ramon.expejb3.session.Greeting#greeting(java.lang.String)
19      */
20     public void greeting(String name) {
21         System.out.println("Hello " + name + ".");
22         ts.createTimer(1 * 10005 * 1000, name);
23         System.out.println("Create timer for " + name + ".");
24     }
25     
26     @Timeout
27     public void timeout(Timer timer) {
28         String name = (String)timer.getInfo();
29         System.out.println(name + " TIME OUT.");
30         //timer.cancel();
31     }
32 }
33
    It's the "GreetingBean" I introduced in part one of this series article with TimerService injected, @Resource anotation inject the time service we want, it's totally free which is supported by the J2EE container that means we do not need any further steps to get the powerful schedule service. In the line 22, I crate a new timer, I think this could be more fit if it was called Task instead, there are several "createTimer" methods with different parameters, the one I used here describe the task should be execute 1 second delay and every 5 second one time in the future, the third parameter can be anything you want to pass in to the task, it can be get back use method Timer.getInfo() like line 28 does here.
    Another important anotation here is the @Timeout anotation, this anotation tell container which method will be called when timeout for this task to be executed, you can only specify one timeout method for each Bean, if there is no @Timeout anotation at all, you will get some exception like "No timeout method specified" in Jboss server. Something funny here is that you should mark the timeout method as "public", otherwise, you will get the same error as no timeout method does, I do NOT think it's necessary, because the time out method should only be called by the container, "private" signature is enought for that, with "private" signature container still has the right to access this method with java reflection, nevertheless timer service in EJB3 is still a good tools for use.
    I summarize what good/bad for timer service in EJB3 as follow:
    Good news:
  •     It's free, it's supported by the EJB container.
  •     It's portable, it's supported by the EJB container as specified in EJB3 specification.
  •     It's easy to use, no need to learn more.
    Bad news:
  •     The feature of EJB3 timer sevice is not as powerful as some third party timer service such as Quartz, but it's enough with EJB3 for ordinary daily job.
  •     There is no UI for you to monitor the timer you created.

posted on 2008-03-26 13:30 Find it, try it, experience it 阅读(1158) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345

导航

统计

公告

If there is any question you have, please don't hesitate, let me know ASAP, you can find me at kenees@gmail.com or QQ: 9808873, hope to make friends with you ;)

常用链接

留言簿(1)

随笔档案

文章档案

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜