Boa tarde!
Estou desenvolvendo uma aplicação com rmi e ultimamente estou tendo muita dificuldade.
Hoje estou aconteceu algo engraçado e até agora não consegui resolve, o erro abaixo acontece mesmo com os arquivos skel e stub na pasta, e apenas para de acontecer quando coloco a CallbackClient.class junto
Caused by: java.lang.ClassNotFoundException: br.com.mdiasbranco.siscepaexp.business.facade.CallbackClient
Pacote siscepa = servidor
pacote siscepaexp = cliente.
em contra partida, invez de chamar o metodo remoto no cliente(siscepaexp) chama no servidor(siscepa).
package br.com.mdiasbranco.siscepa.business.rmi;
import br.com.mdiasbranco.siscepa.business.inter.CallbackServerInterface;
import br.com.mdiasbranco.siscepa.common.entity.Pedido;
import br.com.mdiasbranco.siscepaexp.business.inter.CallbackClientInterface;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;
/**
*
* @author Alirio Oliveira
*/
// implements nas interfaces remotas.
public class ServidorImpl extends UnicastRemoteObject implements CallbackServerInterface{
public CallbackClientInterface callbackClient;
public ServidorImpl()throws RemoteException{
super();
}
public void doCallback(ArrayList<Pedido> p) throws RemoteException{
callbackClient.notifyMe(p);
System.out.println("Callback done");
}
@Override
public void registerForCallback(CallbackClientInterface obj) throws RemoteException {
callbackClient = obj;
System.out.println("0o");
}
@Override
public void unregisterForCallback(CallbackClientInterface obj) throws RemoteException {
callbackClient = null;
}
}
package br.com.mdiasbranco.siscepaexp.business.facade;
import br.com.mdiasbranco.siscepa.business.inter.CallbackServerInterface;
import br.com.mdiasbranco.siscepa.common.entity.Pedido;
import br.com.mdiasbranco.siscepaexp.business.inter.CallbackClientInterface;
import java.io.Serializable;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;
import static br.com.mdiasbranco.siscepaexp.presentation.Constantes.*;
/**
*
* @author Alirio
*/
public class CallbackClient extends Observable implements CallbackClientInterface, Serializable{
private boolean isConnected = false;
public CallbackClient(Observer observador){
addObserver(observador);
}
public void notifyMe(ArrayList<Pedido> pedidos) throws RemoteException {
System.out.println("Call client observer");
notifyObservers(pedidos);
}
public boolean connect(){
try {
CallbackServerInterface registerCallback = (CallbackServerInterface) Naming.lookup(IP_CONFIG + "SERVIDOR");
isConnected = true;
registerCallback.registerForCallback(this);
} catch (NotBoundException ex) {
ex.printStackTrace();
} catch (MalformedURLException ex) {
ex.printStackTrace();
} catch (RemoteException ex) {
ex.printStackTrace();
}
return isConnected;
}
}
package br.com.mdiasbranco.siscepa.business.inter;
import br.com.mdiasbranco.siscepaexp.business.inter.CallbackClientInterface;
import java.rmi.Remote;
/**
*
* @author Alirio
*/
public interface CallbackServerInterface extends Remote{
public void registerForCallback(
CallbackClientInterface obj)
throws java.rmi.RemoteException;
public void unregisterForCallback(
CallbackClientInterface obj)
throws java.rmi.RemoteException;
}
package br.com.mdiasbranco.siscepaexp.business.inter;
import br.com.mdiasbranco.siscepa.common.entity.Pedido;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.ArrayList;
/**
*
* @author Alirio
*/
public interface CallbackClientInterface extends Remote{
public void notifyMe(ArrayList<Pedido> pedidos)throws RemoteException;
}
o metodo
public void notifyMe(ArrayList<Pedido> pedidos) throws RemoteException {
System.out.println("Call client observer");
notifyObservers(pedidos);
}
esta acontecedo no servidor, como eu sei? por causa do print no DOS. e se eu remover o CallbackClient.class do pacote do servidor gera o erro.
alguma ideia?
Resolvido incluindo a linha:
UnicastRemoteObject.exportObject(this);
em CallbackClient.