Boa noite!
Criei um metodo para armazenar Interface remotas e obte-las quando preciso, mas estou em duvida quando a eficiencia do mesmo( se vai ficar lento D+)… segue abaixo código, ainda não rodei,… preciso configurar o Ant.
import static br.com.gma.server.common.entity.CONSTANTES.*;
public class ClienteService implements RemoteCliente, CallBackServerInterface{
private Generics generics;
private Collection<Generics> clients;
private ClienteJpaController jpa;
private Iterator its;
public ClienteService(Factory em) throws RemoteException{
super();
jpa = new ClienteJpaController(em.getfactory());
clients = new HashSet<Generics>();
}
@Override
public void cadastrarCliente(Cliente c) throws RemoteException {
try {
its = clients.iterator();
while(its.hasNext()){
generics = (Generics) its.next();
if((Long)generics.getId() == c.getSessaoId()){
if(generics.getInterface() instanceof RemoteExpInterface){ /* <-- por segurança */
((RemoteExpInterface)generics.getInterface()).receiverMsgFromServer(
INFORMACAO, "Cliente: "+c.getNome_cliente()+" cadastrado com sucesso!");
}
}
}
jpa.incluir(c); /* Inclusão no banco de dados */
} catch (Exception ex) {
while(its.hasNext()){
generics = (Generics) its.next();
if((Long)generics.getId() == c.getSessaoId()){
if(generics.getInterface() instanceof RemoteExpInterface){ /* <-- por segurança */
((RemoteExpInterface)generics.getInterface()).receiverMsgFromServer(
ERRO, "Shiiii, erro: "+ex.getMessage());
}
}
}
}
}
@Override
public void registerForCallbackExp(RemoteExpInterface obj, Long id) throws RemoteException {
generics = new Generics(obj, id);
clients.add(generics);
}
@Override
public void unregisterForCallbackExp(RemoteExpInterface obj, Long id) throws RemoteException {
its = clients.iterator();
while(its.hasNext()){
generics = (Generics) its.next();
if((Long)generics.getId() == id){
clients.remove(generics);
}
}
}
public class Generics <T,N>{
T remote;
N id;
public Generics(T remote,N id){
this.remote = remote; // Interface extends Remote
this.id = id; // Long
}
public T getInterface(){
return remote;
}
public N getId(){
return id;
}
public void setInterface(T remote){
this.remote = remote;
}
public void setId(N id){
this.id = id;
}
}
Toda vez q precisar enviar algo para os clientes(callback usando rmi) tenho que entrar no loop, que acredito não será maior que 10.
usando o metodo equals de arraylist consigo comparar InterfaceRemota?
Obrigado!