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) {
    }