Variavel para static perdendo valor conforme a execução - RMI

Olá,

tenho que implementar um servidor com base em RMI para fazer a transferencias de dados para um sistema distribuído

estou tendo grande dificuldade com a variavel nameServer de meu código, pois preciso que ela não se altere conforme a execução de uma novo servidor, por exemplo quando eu instancio 1 servidor a variavel está com o nome correto, ao instanciar o segundo ela está reescrevendo a variavel também do primeiro, eu sei que esta ação se deve ao fato de que ela está como static, mas eu necessito dela para pode instanciar o meu servidor. pelo static void main da classe server…
a minha classe server é disparada pela classe starter.

starter.java

import java.rmi.RemoteException;
import java.rmi.server.RemoteRef;
import java.util.ArrayList;

public class Starter {
	public static void main (String args[]){
		Server server1,server2;
		int numServ =1;
		ArrayList <Server> servidores = new ArrayList();	
		
		try {
				//Criação do servidor 1
				server1 = new Server(numServ);
				numServ++;
				servidores.add(server1);
				//Criação do servidor 2
				server2 = new Server(numServ);
				numServ++;
				servidores.add(server2);

}

server.java

[code]import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.RMIClientSocketFactory;
import java.rmi.server.RMIServerSocketFactory;
import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;
import java.util.Stack;
import java.util.Random;

public class Server extends UnicastRemoteObject implements IServer{

ArrayList <Project> projects = new ArrayList();
ArrayList servidores = new ArrayList();
static Server serv;
static String nameServer ;
private int IDServer;
private boolean statusServer=false;
 
//set ID for the current Server
public Server(int IDServer) throws RemoteException {
	this.IDServer=IDServer;
	setName("Servidor-"+this.IDServer);
	statusServer=true;
}
	
protected Server() throws RemoteException {
	super();
	
}
   public static void main(String args[]) 
    {
	   //Mensagem para verificar a criação do servidor
	   System.out.println("Servidor Iniciado");
        try  //special exception handler for registry creation
        {	LocateRegistry.createRegistry(1099); 
         	System.out.println("Servidor Criado com Sucesso :)");
        }
        catch (RemoteException e)
        {	//do nothing, error means registry already exists
            System.out.println("Servidor não Registrado");
        }
        try
        { //Instantiate RmiServer
           IServer obj = new Server();
 	   // Bind this object instance to the name "RmiServer"
           Naming.rebind(nameServer, obj); 
            System.out.println("Criando "+nameServer);
        } 
        catch (Exception e) 
        {
            System.err.println("Erros encontrados: ");
            e.printStackTrace();
        }
    }
private void setName(String name){
		 nameServer=name;
}

}
[/code]

Não entendi mto bem seu código, mas se vc inicia sua aplicação pela classe “Starter”, vc n precisa ter um método “main” também na sua classe “Server”.
O código colocado no método “main” da classe server são ações de inicialização? Caso seja essa a intenção, transforme ele em um método non-static (private) (init, por ex.) e chame-o no construtor. Seu atributo “serverName” tbm n precisaria ser static.