如果任务正在运行,isRunning()方法将返回true:
public synchronized boolean isRunning() { return running; }
SetRunning()方法由start.jsp或stop.jsp调用,当running参数是true时。SetRunning()方法还要将任务标记为“已经启动”。调用setRunning(false)表示要求run()方法停止执行。
public synchronized void setRunning(boolean running) { this.running = running; if (running) started = true; }
任务执行完毕后,调用getResult()方法返回计算结果;如果任务尚未执行完毕,它返回null:
public synchronized Object getResult() { if (isCompleted()) return new Integer(sum); else return null; }
当running标记为true、completed标记为false时,run()方法调用work()。在实际应用中,run()方法也许要执行复杂的SQL查询、解析大型XML文档,或者调用消耗大量CPU时间的EJB方法。注意“繁重的任务”可能要在远程服务器上执行。报告结果的JSP页面有两种选择:或者等待任务结束,或者使用一个进度条。
public void run() { try { setRunning(true); while (isRunning() && !isCompleted()) work(); } finally { setRunning(false); } }
二、启动任务
start.jsp是web.xml部署描述符中声明的欢迎页面,web.xml的内容是:
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
start.jsp