View Javadoc

1   /*
2    * EL4J, the Extension Library for the J2EE, adds incremental enhancements to
3    * the spring framework, http://el4j.sf.net
4    * Copyright (C) 2005 by ELCA Informatique SA, Av. de la Harpe 22-24,
5    * 1000 Lausanne, Switzerland, http://www.elca.ch
6    *
7    * EL4J is published under the GNU Lesser General Public License (LGPL)
8    * Version 2.1. See http://www.gnu.org/licenses/
9    *
10   * This program is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13   * GNU Lesser General Public License for more details.
14   *
15   * For alternative licensing, please contact info@elca.ch
16   */
17  
18  package ch.elca.el4j.services.exceptionhandler.handler;
19  
20  import org.aopalliance.intercept.MethodInvocation;
21  import org.slf4j.Logger;
22  
23  import ch.elca.el4j.services.exceptionhandler.AbstractExceptionHandlerInterceptor;
24  import ch.elca.el4j.services.exceptionhandler.RetryException;
25  
26  /**
27   * This class implements an exception handler that tries to call the target
28   * several times after waiting a configurable delay.
29   *
30   * @svnLink $Revision: 3883 $;$Date: 2009-08-04 15:35:01 +0200 (Di, 04. Aug 2009) $;$Author: swismer $;$URL: https://el4j.svn.sourceforge.net/svnroot/el4j/branches/el4j_3_1/el4j/framework/modules/exception_handling/src/main/java/ch/elca/el4j/services/exceptionhandler/handler/RetryExceptionHandler.java $
31   *
32   * @author Andreas Bur (ABU)
33   */
34  public class RetryExceptionHandler extends AbstractRetryExceptionHandler {
35  
36  	/**
37  	 * Time to wait between two successive invocations in milli seconds. Default
38  	 * is <code>0</code>.
39  	 */
40  	private int m_sleepMillis = 0;
41  	
42  	/**
43  	 * Sets the amount of time in milli seconds between two successive
44  	 * invocations.
45  	 *
46  	 * @param sleepMillis
47  	 *      The time in milli seconds to wait.
48  	 */
49  	public void setSleepMillis(int sleepMillis) {
50  		m_sleepMillis = sleepMillis;
51  	}
52  
53  	/**
54  	 * {@inheritDoc}
55  	 */
56  	protected Object retry(Throwable t,
57  			AbstractExceptionHandlerInterceptor exceptionInvoker,
58  			MethodInvocation invocation, Logger logger) throws Throwable {
59  		
60  		if (m_sleepMillis > 0) {
61  			Thread.sleep(m_sleepMillis);
62  		}
63  		
64  		throw new RetryException(getRetries());
65  	}
66  }