Passando parâmetros para um método remoto
Com este exemplo, você será capaz de desenvolver aplicações que executam métodos em máquinas remotas. Isso permite explorar ainda mais o uso do processador, podendo fazer a divisão de tarefas em diferentes máquinas, e melhora bastante o desempenho no processamento de muitas informações.
1 - Define a interface a ser utilizada
import java.rmi.*;
public interface RObject extends Remote {
// Variável primitiva
void primitiveArg(int num) throws RemoteException;
// Método que passa uma variável serializável
void byValueArg(Integer num) throws RemoteException;
// Método que passa um objeto remoto
void byRefArg(ArgObject arg) throws RemoteException;
}
public interface ArgObject extends Remote {
int aMethod() throws RemoteException;
}
2 - Define a implementação do objeto
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
public class RObjectImpl extends UnicastRemoteObject implements RObject {
public RObjectImpl() throws RemoteException {
super();
}
public void primitiveArg(int num) throws RemoteException {
}
public void byValueArg(Integer num) throws RemoteException {
}
public void byRefArg(ArgObject arg) throws RemoteException {
}
}
3 - Compila a implementação do objeto
> javac RObject.java RObjectImpl.java
4 - Gera o skeleton e o stub do objeto definido
> rmic RObjectImpl
5 - Cria uma instância do objeto remoto e liga(bind) este ao registro do RMI.
try {
RObject robj = new RObjectImpl();
Naming.rebind("//localhost/RObjectServer", robj);
} catch (MalformedURLException e) {
} catch (UnknownHostException e) {
} catch (RemoteException e) {
}
6 - Chama o método Look up para encontrar o objeto remoto, e depois basta chamar os métodos que devem ser executados de forma remota.
try {
// Encontra o objeto remoto
RObject robj = (RObject) Naming.lookup("//localhost/RObjectServer");
// Passa uma variável primitiva como argumento
robj.primitiveArg(1998);
// Passa um objeto serializado como argumento
robj.byValueArg(new Integer(9));
// Passa um objeto remoto como argumento
robj.byRefArg(new ArgObjectImpl());
} catch (MalformedURLException e) {
} catch (UnknownHostException e) {
} catch (NotBoundException e) {
} catch (RemoteException e) {
}