SIPStackTimerTask.java revision 600c7a4bbc7348167293eac928192e695b4ad5ba
1b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/*
2b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @author:     Brett Buckingham
3b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @author:     Last modified by: $Author: emcho $
4b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @version:    $Date: 2009/07/17 18:58:14 $ $Revision: 1.3 $
5b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang *
6b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This source code has been contributed to the public domain.
7b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */
8b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
9b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratopackage gov.nist.javax.sip.stack;
10b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
11b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport java.util.TimerTask;
12b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
13b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/**
14b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * A subclass of TimerTask which runs TimerTask code within a try/catch block to
15b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * avoid killing the SIPTransactionStack timer thread. Note: subclasses MUST not
16b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * override run(); instead they should override runTask().
17b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *
18b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @author Brett Buckingham
19b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *
20b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */
21b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratopublic abstract class SIPStackTimerTask extends TimerTask {
22b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    // / Implements code to be run when the SIPStackTimerTask is executed.
23b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    protected abstract void runTask();
24b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
25b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    // / The run() method is final to ensure that all subclasses inherit the
26b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    // exception handling.
27b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public final void run() {
28b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        try {
29b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            runTask();
30b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato        } catch (Throwable e) {
31b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            System.out.println("SIP stack timer task failed due to exception:");
32b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato            e.printStackTrace();
33b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang        }
34b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    }
35b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato}
36b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato