quarta-feira, 24 de julho de 2013

RMI // Orblets


Esquema de uma aplicação em RMI

O objetivo da tecnologia RMI - Remote Method Invocation (Invocação de Métodos Remotos) e permitir o desenvolvimento de programas distribuídos em Java com a mesma sintaxe e semântica usada em programas não-distribuídos, hoje é a base para a tecnologia EJB, que são objetos distribuidos porem gerenciados por um servidor de aplicação.

Criar um programa interface em linguagem neutra conhecida como IDL (interface Definition language), Nela serão declarados os métodos a que serão acessados pelo objeto cliente.

Esta classe Vai ser usada para criação de dois módulos stub, que ficara na maquina cliente e skeleton que ficara na maquina servidora.

 import java.rmi.*;

public interface define extends Remote{
               String alvo1() throws RemoteException;
}


Criar o modulo servidor.

import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;

public class serv1 extends UnicastRemoteObject implements define{
       private String nomeserv;              

       public serv1(String s) throws RemoteException{
              super();
              nomeserv= s;}                    

       public String alvo1() throws RemoteException{
              return "Vim do servidor";}          

       public static void main(String args[]){
              System.setSecurityManager(new RMISecurityManager());                      

              try{
                 serv1 obj = new serv1("Serv1");
                 Naming.rebind("Server1",obj);
                 System.out.println("Ligado no registry ao nome Server1");
             }
             catch(Exception e){
                 System.out.println("Erro!!!");
                 e.printStackTrace();
            }

     }
}


Criar módulos Stub e skeleton utilizando: Rmic serv1

Criar o modulo cliente:

import java.rmi.*;

public class client1{
       public static void main(String args[]){
              String mensagem= "";
              try{
                  define obj= (define) Naming.lookup("rmi://3.3.3.104/Server1");
                  mensagem= obj.alvo1();
                  System.out.println(mensagem);}
              catch(Exception e){
                  System.out.println("Erro no client!");
                  e.printStackTrace();}
            }
}
 

Ativar o gerenciador de registros que devera ficar no mesmo diretório que a aplicação server e o stub.

        rmiregistry ou start rmiregistry para iniciar em outra tela
        java serv1


(O RMI pode usar diferentes tipos de serviços de diretório, incluindo o JNDI. O próprio RMI inclue um simples serviço, chamado de RMI Registry como visto acima. O RMI Registry roda em cada maquina que hospeda o serviço remoto, por definição na porta 1099, deve-se reparar em erros que ocasionalmente ocorrem pelo MSN as vezes utilizar esta porta).

Se acontecer algum erro, devera ser adicionado no arquivo java.policy a seguinte string:

grant {
        permission java.net.SocketPermission "*", "listen,accept,connect";
        permission java.net.SocketPermission "localhost:1099", "connect";
};


Localização:

C:\WINDOWS. Em Windows 2000 no diretório C:\Documents and Settings\UUUU, onde UUUU é o login name do usuário.
C:\JRE\Security.