RMI (Remote Method Invocation) Bruno Edson Plínio Tadeu
RMI API Java Multi-plataforma Transparência (rmiregistry - nomes) Middleware (SW / SO) Orientação a Objetos Invocação de Método Redes Remota Comparativo RPC (Remote Procedure Call)
RMI - Bibliotecas (API) Herança: UnicastRemoteObject (Implementação) Remote (Interface) Naming (Lookup, Rebind) – Servidor de Nomes Exceções {Remote, MalFormedURL, NotBound}Exception
Herança
Naming Rebind (Re)Nomeia objeto remoto Servidor Lookup Procura objeto remoto Cliente
Exemplo Rebind: try{ Naming.rebind(“//localhost/ClasseService”,this); } catch (Exception e){...} Lookup: try{ Classe c = (Classe) Naming.lookup( “// /ClasseService”); } catch (SomeException e){...}
Exemplo Rebind: try{ Naming.rebind(“//localhost/ClasseService”,this); } catch (Exception e){...} Lookup: try{ Classe c = (Classe) Naming.lookup( “// /ClasseService”); } catch (SomeException e){...} Host Serviço Objeto Remoto Cast (binding) URL - String Objeto Remoto Exceções URL
RMI Registry
Exceções Criação Tratamento Utilização de try e catch RemoteException Qualquer erro remoto MalFormedURLException Nome (URL) mal formada NotBoundException Não houve limite
RMI Passos 1. Criação: Interface do objeto remoto herda Remote (assinatura) Classe do objeto implementa a interface e herda UnicastRemoteObject (corpo) 2. Compilação: javac (gera os.class) rmic (gera os Stubs e Skeletons) 3. Executar: rmiregistry (registra o host na rede) java (executa a aplicação)
Classes Geradas javac: Própria Classe - Implementação Interface da Classe – Assinatura dos Métodos rmic: Stub/Skeleton (interface de rede) Métodos vazios, código, operações e construtor Stub (Cliente) Métodos da interface com atributos Method Skeleton (Servidor) dispatch(...) e getOperations()
Classes Geradas
Implementação – Chat (Exemplo) Comunicação em dois sentidos Cliente / Servidor Sala e Usuários são ambos Sala = Concentrador
Classes Chat, ChatImpl, ChatGUI (sala) User, UserImpl e UserGUI (usuário) Cliente, RepositorioClientes (represetação do usuário) Exceções: JaExiste, SalaCheia, DestinoInexistente
Chat – Sala (Conectar)
Chat Sala (Rodando)
Usuário (Conectar)
Usuário (Escolher Sala)
Usuário (Rodando)
Executar chat.zip com.bat (prompt de comando do DOS) run (Compila as Classes e roda rmiregistry) Depois: chat (p\ sala) user (p\ usuário) Obs.: Dentro dos.bat existem os comandos