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

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

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

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

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

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