r2 - 06 Jan 2007 - 14:05:30 - MarceloAkiraVocê está aqui: TWiki >  Web Main  > TWikiUsers > MarceloAkira > SlidesJavaRMI
, create new tag

Objetos Remotos com Java RMI

  • Set TITLE = "Objetos Remotos com Java RMI"

Start presentation

1 - Objetos Remotos com Java RMI

2 - O que é comunicação entre objetos remotos?

  • É uma comunicação onde objetos locais comunicam objetos remotos como se fossem locais;
  • A implementação do protocolo de comunicação entre objetos locais e remotos chama-se Java RMI - Remote Method Invocation - Invocação de métodos remotos;
  • O pacote é o java.rmi
  • É limitado a comunicação entre objetos Java
  • Definição do tutorial java: "Aplicações RMI geralmente são compostas de dois programas separados, um servidor e um cliente. Um programa servidor típico cria alguns objetos remotos, cria referências para tornar estes objetos acessíveis, e espera por clientes que invoquem métodos nestes objetos. Um programa cliente típico obtém uma referência remota a um ou mais objetos em um servidor e então invoca métodos neles. RMI provê os mecanismos pelos quais o servidor e cliente se comunicam e passam informações. Tal aplicação é geralmente conhecida como uma aplicação de objetos distribuídos"

3 - Comparação com CORBA:

  • É outra tecnologia que tem o mesmo objetivo do Java RMI
  • Tem menor desempenho que Java RMI
  • Tem a vantagem de permitir comunicação entre tecnologias diferentes (C++, PHP, Java, etc)

4 - Exemplo de Chat com RMI - interface Chat

Neste exemplo, iremos implementar um Chat baseado em RMI. Inicialmente temos que implementar:

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

public interface Chat extends Remote {
        public void enviarMensagem( String msg ) throws RemoteException;
        public String lerMensagens() throws RemoteException;
}   
Baixe o código-fonte acima neste link: http://pt.wikinourau.org/pub/Main/SlidesJavaRMI/Chat.java

ALERT! Note neste exemplo:

  • Esta é a definição de objetos a ser acessado remotamente;
  • Note que definimos que a interface Chat possui o método de envio de mensagens e listagem de mensagens;
  • É necessário que extenda a classe Remote e todos métodos lancem exceções RemoteException;

5 - Exemplo de Chat com RMI - Implementando a interface

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class ChatImpl extends UnicastRemoteObject implements Chat {
        StringBuffer mensagens;
        public ChatImpl() throws RemoteException {
                super();
                this.mensagens = new StringBuffer();
        }
        
        public void enviarMensagem( String mensagem ) throws RemoteException{
                mensagens.append(mensagem+"\n");
        }
        
        public String lerMensagens() throws RemoteException{
                return new String(mensagens);
        }
}
Baixe o código-fonte acima neste link: http://pt.wikinourau.org/pub/Main/SlidesJavaRMI/ChatImpl.java

ALERT! Note neste exemplo:

  • Que o construtor deve lançar RemoteException;
  • O sufixo Impl é um padrão bastante utilizado;

6 - Exemplo de Chat com RMI - criando a classe stub

Para poder registrar um objeto, é necessário uma classe stub, gerada pelo utilitário rmic:

rmic ChatImpl
ALERT! Note neste exemplo:
  • Que será gerado um arquivo ChatImpl_Stub.class

7 - Exemplo de Chat com RMI - implementando o servidor

import java.rmi.Naming;
public class ChatServer {
        
        public ChatServer() {
                try {
                        Chat c = new ChatImpl();
                        Naming.rebind("rmi://localhost:1099/ChatServer", c);
                }
                catch( Exception e ) {
                        e.printStackTrace();
                }
        }
        
        public static void main(String[] args) {
                new ChatServer();
        }
}
Baixe o código-fonte acima neste link: http://pt.wikinourau.org/pub/Main/SlidesJavaRMI/ChatServer.java

Para executar o servidor:

rmiregistry&
java ChatServer

ALERT! Note neste exemplo:

  • Que o servidor registra e disponibiliza um objeto por meio da classe Naming;
  • Estamos disponibilizando o objeto localmente (localhost), mas poderia ser qualquer servidor;
  • rmiregistry é necessário para o servidor disponibilizar objetos remotos;

8 - Exemplo de Chat com RMI - implementando o cliente

import java.rmi.*;

public class ChatClient {
        
        public static void main( String args[] ) {
                try {
                        Chat c = (Chat) Naming.lookup( "rmi://localhost/ChatServer" );
                        c.enviarMensagem(args[0]);
                        System.out.println(c.lerMensagens());
                }
                catch( Exception e ) {
                        e.printStackTrace();
                }
        }
}
Baixe o código-fonte acima neste link: http://pt.wikinourau.org/pub/Main/SlidesJavaRMI/ChatClient.java

Para executar o cliente:

java ChatClient ola1
java ChatClient ola2

ALERT! Note neste exemplo:

  • Que o cliente procura se conectar localmente com o servidor;

9 - Exercícios/Projetos:

  • Crie um objeto chamado 'Casa' e métodos para saber quais portas estão abertas ou fechadas. Crie também meios para abrir e fechar as portas.

10 - Referências

toggleopenExibir anexostogglecloseEsconder anexos
Anexos do tópico
I Anexo Ação Tamanho Data Quem Comentário
javajava Chat.java gerenciar 0.2 K 06 Jan 2007 - 14:05 UnknownUser  
javajava ChatClient.java gerenciar 0.4 K 06 Jan 2007 - 14:05 UnknownUser  
javajava ChatServer.java gerenciar 0.4 K 06 Jan 2007 - 14:05 UnknownUser  
javajava ChatImpl.java gerenciar 0.5 K 06 Jan 2007 - 14:05 UnknownUser  
javajava SocketOpenerTest.java gerenciar 1.3 K 08 Jan 2007 - 16:07 UnknownUser  
Editar | Anexar | Impressão | Texto Puro | Referências: Web, Global | Histórico: r2 < r1 | Mais ações de tópico
 
Powered by TWiki
This site is powered by the TWiki collaboration platform Copyright © 2003 - 2012, pelos autores colaboradores. Todo o conteúdo desta página pode ser utilizado segundo os termos da Licença Creative Commons: Atribuição, Uso não Comercial e Permanência da Licença, salvo disposição em contrário indicada de forma explícita no tópico correspondente.