Ola!
Estou tendo dificuldade com o notify no javaspaces. Tentei criar uma calculadora porem ela grava no espaço e o servidor que deveria receber o notify não faz nada … vejam abaixo:
[code]public static void main(String[] args){
Utilidades var = new Utilidades();
JavaSpace space = var.conecta();
try{
//remetente
CalcServerListener servidor = new CalcServerListener(space,"Cliente1"); // avisa para servidor o nome desta maquina e o espaço que ela se encontra
Server template = new Server(); //cria um template do tipo server
template.destinatario = "Calculadora"; //esse cliente que enviar algo para o servidor Calculadora
template.remetente = "Cliente1"; //indentifica-se para o servidor
// notify(tipo do objeto,...,para quem,...,tempo de espera,...)
space.notify(template, null, servidor, Lease.FOREVER, null); //notifica que vai entrar um objeto do tipo Calculadora
}
catch(Exception e){
e.printStackTrace();
}
Scanner sc = new Scanner(System.in);
Server msg = new Server();
System.out.println("************************************************\n");
System.out.println("Digite o numero da operacao desejada:\n");
System.out.println("1. Adicao\n");
System.out.println("2. Subtracao:\n");
System.out.println("3. Multiplicacao\n");
System.out.println("4. Divisao\n");
System.out.println("************************************************\n");
try{
msg.operacao = sc.nextInt();
System.out.println("Digite o primeiro numero: ");
msg.Operador1 = sc.nextInt();
System.out.println("\nDigite o segundo numero:");
msg.Operador2 = sc.nextInt();
msg.destinatario = "Calculadora"; //define o servidor a quem vai enviar
msg.remetente = "Cliente1"; //define o nome deste cliente
var.escreve(msg,space);
while(var.continuar()){ /* Aguarda até tudo estar concluido */ }
}
catch(Exception e){
e.printStackTrace();
}
}
CalcServerListener.java
public class CalcServerListener implements RemoteEventListener {
private boolean ok = false;
private JavaSpace space;
private String remetente; //sistema que envia algo para o servidor
public CalcServerListener(JavaSpace space, String remetente)
throws RemoteException
{
this.space = space; //espaço que o remetente se encontra
this.remetente = remetente;
//exporta para o RMI
UnicastRemoteObject.exportObject(this); //retorna o objeto
}
public boolean getEstado(){
return this.ok;
}
public CalcServerListener(){
}
//recebe notificações de quando uma entrada está no espaço
public void notify(RemoteEvent evento){
//cria um template usando o id da maquina
Server template = new Server();
template.remetente = this.remetente; //para tirar a entry do remetente que me notificou
Server request = template;
try{
while(!this.ok){
request = (Server)space.read(template, null, Long.MAX_VALUE); //le o primeiro objeto encontrado "postado" pelo remetente
if(request.destinatario == "Calculadora"){
request = (Server)space.take(request, null, Long.MAX_VALUE); //retira o objeto
this.ok = true;
}
}
CalcServer envia = new CalcServer(true);
envia.filtra(request.operacao,request.Operador1,request.Operador2,request.remetente); //passa os 2 numeros para a função
}catch(Exception e){
e.printStackTrace();
}
}
} //classe[/code]
ele deveria passar os dois numeros para o servidor fazer o calculo, porem, parece que nem está entrando no notify. O que pode estar errado?
Abraços
[color=“red”]*Editado: use BBCode nas suas mensagens no forum. Jair Elton[/color]