网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.JavaI/O包中的Decorator模式介绍.
.Beans入门必读之高级EJB的概念.
.java多线程设计模式详解之四.
.JAVA:Filter编码器.
.java 基础入门 pom.xml 元素描述.
.WebSphere应用服务器保护电子商务.
.Java中的线程组.
.写bean类的准则(1).
.java/vc单点登录的简单实现.
.从XML到Java代码的数据绑定之对象.
.学习Jakarta Struts 1.1 (二).
.struts构建文件上传(2).
.分析并修补 resin 的中文处理.
.NetBeans 5 正式版发布.
.如何提高软件的可测试性.
.只能对数值操作的TextBox.
.Tree图全功略.
.使用Java Swing创建一个XML编辑器.
.一些面向对象的设计法则(1).
.Java 库的建立方法及其实例.

一个简单的Timer Service

发表日期:2008-1-5



  Web-TimeService用于定时调用(触发)应用,EJB2.1也提供了TimerService,但现在有的application server不支持,有的就根本没有用到ejb,所以我写了一个简单的TimerSerivce

Public class TimerService
{
 public static final long p = 1000*60*60;
  Timer timer = new Timer(false);
  TimerSchedule schedule = null;
 public TimerService()
 {
 }

 public void start() throws Exception
 {
  schedule = new TimerSchedule();
  schedule.addTimerJob(new SomeTimerJob());
  //add other job here
  timer.schedule(schedule,0,p);
 }

 public void stop() throws Exception
 {
  timer.cancel();
 }
}

//包含了多个TimerJob,并每到一定时候取出来看看是否该调用
public class TimerSchedule extends TimerTask
{
 private List list = new ArrayList();
 public TimerSchedule()
 {}
 public void addTimerJob(TimerJob job)
 {
  list.add(job);
 }

 public void run()
 {
  Date now = Calendar.getInstance().getTime();
  Date next = null;
  for(int i=0;i<list.size();i++)
  {
   TimerJob job = (TimerJob)list.get(i);
   next = job.getNextExeDate();
   if(isEquals(now,next))
   {
    job.execute();
   }
  }
 }

/**
* 比较俩个时间相差是否小于TimerService.p(一个周期)
* @param now
* @param next
* @return
*/
private boolean isEquals(Date now,Date next)
{
 long time = next.getTime()-now.getTime();
 if (time <= TimerService.p && time >= 0)
 {
  return true;
 }
 else
 {
  return false;
 }
}

public boolean cancel()
{
 return true;
}
}


//该接口描述了如何完成TimerTask,请参考TimerJobExample
interface TimerJob
{
 public void execute();
 public Date getNextExeDate();
}

/**
* 该例子用于演示如何完成tiemrjob
* 该例子功能是在天天的凌晨一点调用
*/
public class TimerJobExample implements TimerJob
{
 Calendar nextDate = null;
 public TimerJobExample()
 {
  nextDate = Calendar.getInstance();
  nextDate.add(Calendar.DAY_OF_MONTH,1);
  //将设置调用时间是(第二天的)天天凌晨1点
  nextDate.set(Calendar.HOUR_OF_DAY,1);
 }
 public void execute()
 {
  nextDate.add(Calendar.DAY_OF_MONTH,1);
  nextDate.set(Calendar.HOUR_OF_DAY,1);
  callFunction();
 }

 public Date getNextExeDate()
 { 
  return nextDate.getTime();
 }

 private void callFunction()
 {
  System.out.println("TimerJobExample call ejb funcation:"+new Date());
 }
}

  启动Web_TimerService

  启动Web-TimerService可以有多种方法,下面列出一个简单的方法,通过jsp来启动,停止TimerService

<%@ page contentType="text/Html; charset=GBK" %>
<%@ page import="com.ted.cfioms.common.alert.*"%>
<%
 TimerService service = (TimerService)application.getAttribute("timerService");
 boolean isStart = true;
 if(service == null)
 {
  service = new TimerService();
  application.setAttribute("timerService",service);
  service.start();
 }
 else
 {
  service.stop();
  isStart = false;
  service = null;
 }
%>
<html>
<head>
 <title>
  timerService
 </title>
</head>
<body bgcolor="#ffffff">
<h1>
 <%=(isStart?
上一篇:J2EE项目开发经验二则 人气:1063
下一篇:Javascript实例教程(19) 使用HoTMetal(6) 人气:474
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐