Notas de Aula - MAC 5755 - Sistemas Operacionais Distribuídos

Aula 8 - 31/8/2001

Java - um Ambiente para Sistemas Distribuídos

Java RMI - Remote Method Invocation

Exemplo

  1. Definição da interface  (Hello.java)

  2.  

     

    import java.rmi.Remote;
        import java.rmi.RemoteException;

        public interface Hello extends Remote {
            String sayHello() throws RemoteException;
        }
     

  3. Implementação do servidor (HelloImpl.java)

  4.      import java.rmi.Naming;
         import java.rmi.RemoteException;
         import java.rmi.RMISecurityManager;
         import java.rmi.server.UnicastRemoteObject;

         public class HelloImpl extends UnicastRemoteObject implements Hello {

             public HelloImpl() throws RemoteException {
                 super();
             }

             public String sayHello() {
                 return "Hello World!";
             }

             public static void main(String args[]) {

                 // Create and install a security manager
                 if (System.getSecurityManager() == null) {
                     System.setSecurityManager(new RMISecurityManager());
                 }

                 try {
                     HelloImpl obj = new HelloImpl();

                     // Bind this object instance to the name "HelloServer"
                     Naming.rebind("//myhost/HelloServer", obj);

                     System.out.println("HelloServer bound in registry");
                 } catch (Exception e) {
                     System.out.println("HelloImpl err: " + e.getMessage());
                     e.printStackTrace();
                 }
             }
         }
     

  5. Compilação dos stubs

  6.  

     

    rmic HelloImpl

    gera os arquivos:

                  HelloImpl_Stub.class
                  HelloImpl_Skel.class
     

  7. Implementação do cliente (neste caso, uma applet  HelloApplet.java)

  8.  

    import java.applet.Applet;
    import java.awt.Graphics;
    import java.rmi.Naming;
    import java.rmi.RemoteException;

    public class HelloApplet extends Applet {

       String message = "blank";
     
       // "obj" is the identifier that we'll use to refer
       // to the remote object that implements the "Hello"
       // interface
       Hello obj = null;

       public void init() {
          try {
               obj = (Hello)Naming.lookup("//" +
                     getCodeBase().getHost() + "/HelloServer");
               message = obj.sayHello();
          }
          catch (Exception e) {
            System.out.println("HelloApplet exception: " + e.getMessage());
             e.printStackTrace();
          } 
       }

       public void paint(Graphics g) {
          g.drawString(message, 25, 50);
       }
    }
     

Vantagens de Java RMI em relação a CORBA

Desvantagens de Java RMI em relação a CORBA

Solução ideal (???): usar CORBA para comunicação mas implementar o maior número possível de componentes em Java.

Referências



Próxima Aula
Aula Anterior
Página de MAC 5755
Página do Fabio
Página do DCC