• EJB>定时服务(Timer Service)


    定时服务用作在一段特定的时间后执行某段程序,定时服务的开发过程与会话Bean 的开发过程大致相同,但比会话Bean 多了几个操作,那就是使用容器对象SessionContext 创建定时器,并使用@Timeout 注释声明定时器方法。
     
    下面定义一个每隔3 秒触发一次事件的定时器,当定时事件触发次数超过5 次的时候便终止定时器的执行。
    package com.foshanshop.ejb3.impl;
    import java.util.Date;
    import com.foshanshop.ejb3.TimerService;
    import javax.annotation.Resource;
    import javax.ejb.Remote;
    import javax.ejb.SessionContext;
    import javax.ejb.Stateless;
    import javax.ejb.Timeout;
    import javax.ejb.Timer;
    
    @Remote ({TimerService.class})
    public class TimerServiceBean implements TimerService {
    private int count = 1;
    private @Resource SessionContext ctx;
    public void scheduleTimer(long milliseconds){
    count = 1;
    ctx.getTimerService().createTimer(new Date(new Date().getTime() +
    milliseconds),milliseconds, "大家好,这是我的第一个定时器");
    }
    @Timeout
    public void timeoutHandler(Timer timer)
    {
    System.out.println("---------------------");
    System.out.println("定时器事件发生,传进的参数为: " + timer.getInfo());
    System.out.println("---------------------");
    if (count>=5){
    timer.cancel();//如果定时器触发5次,便终止定时器
    }
    count++;
    }
    }
    通过依赖注入@Resource SessionContext ctx,我们获得SessionContext 对象,调用ctx.getTimerService().createTimer(Date arg0, long arg1, Serializable arg2)方法创建定时器,三个参数的含义如下:
              Date arg0 定时器启动时间,如果传入时间小于现在时间,定时器会立刻启动。
              long arg1 间隔多长时间后再次触发定时事件。单位:毫秒
              Serializable arg2 你需要传给定时器的参数,该参数必须实现Serializable 接口。

    当定时器创建完成后,我们还需声明定时器方法。定时器方法的声明很简单,只需在方法上面加入@Timeout 注释,另外定时器方法必须遵守如下格式:
    void XXX(Timer timer)
    在定时事件发生时,此方法将被执行。
    TimerServiceTest.jsp
    <%@ page contentType="text/html; charset=GBK"%>
    <%@ page import="com.foshanshop.ejb3.*, javax.naming.*"%>
    <%
    try {
    InitialContext ctx = new InitialContext();
    TimerServiceDAO timer = (TimerServiceDAO)
    ctx.lookup("TimerServiceBean/remote");
    timer.scheduleTimer((long)3000);
    out.println("定时器已经启动,请观察Jboss控制台输出,如果定时器触发5次,便终止定时器
    ");
    } catch (Exception e) {
    out.println(e.getMessage());
    }
    %>


  • 相关阅读:
    SpringBoot_10_打成jar包后使用外部配置文件中的配置来启动工程
    SpringBoot_09_使用jar包中配置的Bean(starter配置)
    猪齿鱼_03_领域模型
    Git_学习_11_Git rebase合并提交信息
    猪齿鱼_02_微服务组件间联系
    猪齿鱼_01_环境搭建(三)_整合业务服务
    猪齿鱼_01_环境搭建(二)_微服务支撑组件部署(Docker形式)
    【BZOJ】3996: [TJOI2015]线性代数
    【BZOJ】3994: [SDOI2015]约数个数和
    【BZOJ】3993: [SDOI2015]星际战争
  • 原文地址:https://www.cnblogs.com/xqzt/p/5637401.html
Copyright © 2020-2023  润新知