现在的位置: 首页 > 综合 > 正文

ejb3.0定时执行任务

2013年09月09日 ⁄ 综合 ⁄ 共 1530字 ⁄ 字号 评论关闭
 

ejb3.0定时执行任务
 
ejb3提供了,定时执行某项任务的功能
实现步骤:
1 . 创建一个sessionbean 和对应的接口 这个没什么特殊,跟以往一样
2.  获取一个sessionContext对象
3 . 在sessionContext中get到TimerService
4. 在TimeService中获取到Timer对象,创建该对象时候第一个参数代表定时任务开始执行的时间(精确到毫秒),第二个参数代表建个多久,第三个为传入的参数(这个参数在执行任务的时候可以取到)
5.写一个方法,名称规则为public xxx(Timer timer)
6. 用annotation Timeout修饰这个方法
 
 
代码实现
package com.foshanshop.ejb3.timer;
 
publicinterface TimerService
{
    publicvoid scheduleTimer(long milliseconds);
}
 
 
 
 
package com.foshanshop.ejb3.timer;
 
import java.util.Date;
 
import javax.annotation.Resource;
import javax.ejb.Remote;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.ejb.Timeout;
import javax.ejb.Timer;
 
@Stateless
@Remote({TimerService.class})
publicclass TimerServiceBean implements TimerService
{
    intcount = 0;
    public@Resource SessionContext sctx;
   
    publicvoid scheduleTimer(long milliseconds)
    {
       
        sctx.getTimerService().createTimer(new Date(new Date().getTime()+milliseconds),milliseconds,"我的第一个定时器");
        System.out.println("begin");
     }
    @Timeout
    publicvoid timeoutHandler(Timer time)
    {
        System.out.println("定时器发生"+time.getInfo());
        count++;
        if(count>5)
            time.cancel();
    }
    public SessionContext getSctx()
    {
        returnsctx;
    }
 
    publicvoid setSctx(SessionContext sctx)
    {
        this.sctx = sctx;
    }
 
}
 
 
 
执行结果
11:03:15,750 INFO [STDOUT] begin
11:03:16,750 INFO [STDOUT] 定时器发生我的第一个定时器
11:03:17,765 INFO [STDOUT] 定时器发生我的第一个定时器
11:03:18,750 INFO [STDOUT] 定时器发生我的第一个定时器
11:03:19,750 INFO [STDOUT] 定时器发生我的第一个定时器
11:03:20,750 INFO [STDOUT] 定时器发生我的第一个定时器
11:03:21,750 INFO [STDOUT] 定时器发生我的第一个定时器

抱歉!评论已关闭.