nl_tokens: / * ( non - Javadoc )
pl_tokens: public TimerID setTimer ( ActivityContextInterface aci , Address address , long startTime , long period , int numRepetitions , TimerOptions timerOptions ) throws NullPointerException , IllegalArgumentException , TransactionRolledbackLocalException , FacilityException { if ( aci == null ) throw new NullPointerException ( "Null ActivityContextInterface" ) ; if ( startTime < 0 ) throw new IllegalArgumentException ( "startTime < 0" ) ; if ( period <= 0 ) throw new IllegalArgumentException ( "period <= 0" ) ; if ( timerOptions == null ) throw new NullPointerException ( "Null TimerOptions" ) ; if ( timerOptions . getTimeout ( ) > period ) throw new IllegalArgumentException ( "timeout > period" ) ; if ( timerOptions . getTimeout ( ) < this . getResolution ( ) ) timerOptions . setTimeout ( Math . <mask> ( period , this . getResolution ( ) ) ) ; if ( period == Long . MAX_VALUE && numRepetitions == 1 ) { // non periodic value, the framework expects it to be negative instead
   period = - 1 ; } // when numRepetitions == 0 the timer repeats infinitely or until
   // canceled
   if ( numRepetitions < 0 ) throw new IllegalArgumentException ( "numRepetitions < 0" ) ; SleeTransactionManager txMgr = sleeContainer . getTransactionManager ( ) ; boolean startedTx = txMgr . requireTransaction ( ) ; TimerIDImpl timerID = new TimerIDImpl ( sleeContainer . getUuidGenerator ( ) . createUUID ( ) ) ; if ( logger . isDebugEnabled ( ) ) { logger . debug ( "setTimer: timerID = " + timerID + " , startTime = " + startTime + " period = " + period + " numRepetitions = " + numRepetitions + " timeroptions =" + timerOptions ) ; } // Attach to activity context
   org . mobicents . slee . container . activity . ActivityContextInterface aciImpl = ( org . mobicents . slee . container . activity . ActivityContextInterface ) aci ; aciImpl . getActivityContext ( ) . attachTimer ( timerID ) ; // schedule timer task
   TimerFacilityTimerTaskData taskData = new TimerFacilityTimerTaskData ( timerID , aciImpl . getActivityContext ( ) . getActivityContextHandle ( ) , address , startTime , period , numRepetitions , timerOptions ) ; final TimerFacilityTimerTask task = new TimerFacilityTimerTask ( taskData ) ; if ( configuration . getTaskExecutionWaitsForTxCommitConfirmation ( ) ) { final CountDownLatch countDownLatch = new CountDownLatch ( 1 ) ; task . setCountDownLatch ( countDownLatch ) ; TransactionalAction action = new TransactionalAction ( ) { @ Override public void execute ( ) { countDownLatch . countDown ( ) ; } } ; TransactionContext txContext = txMgr . getTransactionContext ( ) ; txContext . getAfterCommitActions ( ) . add ( action ) ; txContext . getAfterRollbackActions ( ) . add ( action ) ; } scheduler . schedule ( task ) ; // If we started a tx for this operation, we commit it now
   if ( startedTx ) { try { txMgr . commit ( ) ; } catch ( Exception e ) { throw new TransactionRolledbackLocalException ( "Failed to commit transaction" ) ; } } return timerID ; }