00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 package org.objectweb.proactive.core.rmi;
00032
00033 import java.io.IOException;
00034 import java.io.Serializable;
00035 import java.net.ServerSocket;
00036 import java.net.Socket;
00037 import java.rmi.server.RMIClientSocketFactory;
00038 import java.rmi.server.RMIServerSocketFactory;
00039 import java.util.Random;
00040
00041 import org.apache.log4j.Logger;
00042 import org.objectweb.proactive.core.util.log.Loggers;
00043 import org.objectweb.proactive.core.util.log.ProActiveLogger;
00044
00045
00050 public class RandomPortSocketFactory implements RMIServerSocketFactory,
00051 RMIClientSocketFactory, Serializable {
00052 static Logger logger = ProActiveLogger.getLogger(Loggers.RMI);
00053 static protected final int MAX = 5;
00054 static protected Random random = new Random();
00055 protected int basePort = 35000;
00056 protected int range = 5000;
00057
00058 public RandomPortSocketFactory() {
00059 logger.debug("RandomPortSocketFactory constructor()");
00060 }
00061
00062 public RandomPortSocketFactory(int basePort, int range) {
00063 logger.debug("RandomPortSocketFactory constructor(2) basePort = " +
00064 basePort + " range " + range);
00065 this.basePort = basePort;
00066 this.range = range;
00067 }
00068
00069 public ServerSocket createServerSocket(int port) throws IOException {
00070 int tries = 0;
00071 logger.debug("RandomPortSocketFactory: createServerSocket " + port +
00072 " requested");
00073 while (true) {
00074 try {
00075 int offset = random.nextInt(range);
00076 ServerSocket socket = new ServerSocket(basePort + offset);
00077 logger.debug("RandomPortSocketFactory: success for port " +
00078 (basePort + offset));
00079 return socket;
00080 } catch (IOException e) {
00081 tries++;
00082 if (tries > MAX) {
00083 throw new IOException();
00084 }
00085 }
00086 }
00087 }
00088
00089 public Socket createSocket(String host, int port) throws IOException {
00090 logger.debug("RandomPortServerSocketFactory: createSocket to host " +
00091 host + " on port " + port);
00092 return new Socket(host, port);
00093 }
00094 }