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