1600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/*
2600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @author:     Brett Buckingham
3600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @author:     Last modified by: $Author: emcho $
4600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @version:    $Date: 2009/07/17 18:58:14 $ $Revision: 1.3 $
5600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
6600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * This source code has been contributed to the public domain.
7600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */
8600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
9600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpackage gov.nist.javax.sip.stack;
10600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
11600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.util.TimerTask;
12600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
13600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/**
14600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * A subclass of TimerTask which runs TimerTask code within a try/catch block to
15600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * avoid killing the SIPTransactionStack timer thread. Note: subclasses MUST not
16600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * override run(); instead they should override runTask().
17600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
18600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @author Brett Buckingham
19600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
20600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */
21600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic abstract class SIPStackTimerTask extends TimerTask {
22600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    // / Implements code to be run when the SIPStackTimerTask is executed.
23600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    protected abstract void runTask();
24600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    // / The run() method is final to ensure that all subclasses inherit the
26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    // exception handling.
27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public final void run() {
28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        try {
29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            runTask();
30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        } catch (Throwable e) {
31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            System.out.println("SIP stack timer task failed due to exception:");
32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            e.printStackTrace();
33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
36