/**
* nfs-rpc
* Apache License
*
* http://code.google.com/p/nfs-rpc (c) 2011
*/
package code.google.nfs.rpc.client;
/**
* RPC ClientFactory Interface,help for get approviate nums client
*
* @author <a href="mailto:bluedavy@gmail.com">bluedavy</a>
*/
public interface ClientFactory {
public static final long javaHeapSize = Runtime.getRuntime().maxMemory();
/**
* when the size of sending bytes in queue reach percent * -Xmx,then do sth based on sendLimitPolicy
* to avoid oom
* default is 50
*
* for example:
* ClientFactory.sendLimitPercent = 50 -Xmx1g
* if sending bytes size reaches 500m,when u call client.invokeSync then it'll throw NFSRPCRejectException
*/
public static int sendLimitPercent = 50;
public static SendLimitPolicy sendLimitPolicy = SendLimitPolicy.REJECT;
/**
* get client,default targetIP:targetPort --> one connection
* u can give custom the key by give customKey
*/
public Client get(final String targetIP, final int targetPort,
final int connectTimeout, String... customKey) throws Exception;
/**
* get client,create clientNums connections to targetIP:targetPort(or your custom key)
*/
public Client get(final String targetIP, final int targetPort,
final int connectTimeout, final int clientNums, String... customKey)
throws Exception;
/**
* remove some error client
*/
public void removeClient(String key, Client client);
/**
* check if exceed the send limit,if exceed then do sth based on SendLimitPolicy
*/
public void checkSendLimit() throws Exception;
/**
* Enable Send limit,default is false;
*/
public void enableSendLimit();
}