?? retryproxy.java
字號:
/*
* Copyright 1999 by dreamBean Software,
* All rights reserved.
*/
package smartproxy.proxies;
import java.lang.reflect.Proxy;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.ServerException;
import java.rmi.Naming;
/**
* This is a smart proxy wrapper that retries calls
*
* Note that it is not tightly bound to the remote object interface,
* and can therefore be reused with any remote object(!)
*
* @author Rickard 謆erg (rickard@dreambean.com)
* @version $Revision:$
*/
public class RetryProxy
implements InvocationHandler, java.io.Serializable, LinkedProxy
{
Object next;
int retryCount;
long sleepTime;
// Constructors --------------------------------------------------
public RetryProxy(Object next)
{
this(next, 10, 3000); // Retry for 30 seconds
}
public RetryProxy(Object next, int retryCount,long sleepTime)
{
this.next = next;
this.retryCount = retryCount;
this.sleepTime = sleepTime;
}
// Public --------------------------------------------------------
public Object invoke(Object proxy,
Method method,
Object[] args)
throws Throwable
{
RemoteException ex = null;
for (int i = 0; i < retryCount; i++)
{
try
{
return method.invoke(next, args);
} catch (InvocationTargetException e)
{
try
{
throw e.getTargetException();
} catch (java.rmi.ConnectException exc)
{
ex = exc;
Thread.sleep(sleepTime);
} catch (java.rmi.ConnectIOException exc)
{
ex = exc;
Thread.sleep(sleepTime);
}
}
//Retry
}
// Retry failed
throw ex;
}
public Object getNext()
{
return next;
}
public void setNext(Object next)
{
this.next = next;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -