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]