zoukankan      html  css  js  c++  java
  • 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());
    }
    %>


  • 相关阅读:
    【图灵学院09】RPC底层通讯原理之Netty线程模型源码分析
    【图灵学院10】高并发之java线程池源码分析
    【图灵学院02】大型互联网技术之数据库分库分表
    【图灵学院01】Java程序员开发效率工具IntelliJ IDEA使用
    【OD深入学习】Java多线程面试题
    高级工程师->架构师
    架构师成长之路
    python--openCV--鼠标事件
    python--openCV--视频处理
    python--openCV
  • 原文地址:https://www.cnblogs.com/xqzt/p/5637401.html
Copyright © 2011-2022 走看看