2. Estratégias diferentes que permitem a
comunicação entre aplicações distribuídas.
Tipos distintos de comunicação em um sistema
distribuído:
◦ Sockets
◦ RMI - Remote Method Invocation
◦ CORBA – Commom Object Request Broker Architecture
◦ EJB – Enterprise Java Bean
◦ Web Services
Prof. Adriano Teixeira de Souza
3. Aplicação Aplicação
Transporte Transporte
Rede Rede
Enlace Enlace
Física Física
Prof. Adriano Teixeira de Souza
4. Aplicação HTTP,RMI, etc Aplicação
Transporte TCP e UDP Transporte
Rede IPv4 e IPv6 Rede
Enlace Ethernet e ATM Enlace
Física Física
Prof. Adriano Teixeira de Souza
5. Principais Características:
◦ Protocolo da camada de transporte
◦ Complexo
◦ Orientado à conexão
◦ Confiável
◦ Detecção de Erros
◦ Controle de Congestionamento
◦ Menos performático do que UDP
◦ Utilizado em diversas aplicações: FTP, email, HTTP,
RMI, etc...
Prof. Adriano Teixeira de Souza
6. TCP usa duas abstrações chamadas Sockets e
Portas
Portas e Sockets não existem fisicamente
Em Java, um socket é um objeto que sabe como
enviar e receber dados de (e para) um outro
computador através de uma rede
Java Sockets usam TCP, apesar que não é
necessário saber isso para usar Sockets
(encapsulamento)
Prof. Adriano Teixeira de Souza
7. Servidores (Servers) são computadores que disponibilizam
serviços através de Portas
Cada serviço é disponibilizado através de uma porta
Quando queremos usar um serviço, usamos TCP, informando
o endereço IP da máquina e a Porta do serviço
Por exemplo, o serviço de um HTTP server normalmente
atende pela porta 80 (default)
Entretanto, muitos Application Server (Tomcat por exemplo)
são normalmente configurados para atender pela porta 8080
Prof. Adriano Teixeira de Souza
8. Exemplos:
◦ http://172.17.0.13/ (acesso pela porta 80)
◦ http://172.17.0.14:8080/ (acesso pela porta 8080)
◦ mysql://arcoverde:3306/jornada
◦ rmi://localhost:1099/server
Prof. Adriano Teixeira de Souza
9. É representado pela classe java.net.Socket
Usa TCP, logo herda todas as características dele
(principalmente a confiabilidade)
Exemplo de Construtor:
public Socket(String ipserver, int porta) throws
IOException;
Após o construtor executar, o socket já estará apto para se
comunicar
Se o socket não conseguir se comunicar, será lançada uma
IOException
Permite escrita e leitura através de Input e OutputStream´s
Prof. Adriano Teixeira de Souza
12. É representado pela classe java.net.ServerSocket
A função principal de um ServerSocket é aguardar pela
conexão de um Socket
Um dos construtores mais utilizados é:
public ServerSocket(int porta) throws IOException;
Se o ServerSocket não conseguir se instalar na porta, será
lançada uma IOException
Diferente do Socket, após o construtor executar, o
ServerSocket deverá chamar acept() para aguardar uma
conexão
acept() retorna um socket. Após acept() retornar, o
ServerSocket poderá se comunicar com este socket.
Prof. Adriano Teixeira de Souza
14. Objetos são estruturas complexas
◦ Possuem vários atributos
◦ Seus atributos podem ser outros objetos
◦ Que possuem mais atributos
◦ Criando uma estrutura em árvore
Como enviar via rede um objeto complexo?
◦ Com serialização
Prof. Adriano Teixeira de Souza
15. Serialização é o processo de transformar uma
estrutura de dados complexa, como um objeto, em
uma série de bytes
A série gerada é “enviada pelo fio” da rede
Do outro lado, o objeto é rematerializado
Graças ao Java Team, a JVM faz isso para nós
Basta que indiquemos que a classe do objeto
implementa a interface java.io.Serializable
Obs.: os atributos do objeto devem ser Serializable
também
Isso é o mesmo processo usado para se gravar um
objeto em um arquivo
Prof. Adriano Teixeira de Souza
16. Se você tentar enviar um objeto via rede que
não pode ser serializado, será lançada uma
UnmarshalException
Marshaling e UnMarshaling são outros nomes
dados para os processos de Desmaterizalizar
e Materializar o objeto
Quando ocorrer, observe se o objeto que
você está enviando é Serializable (lembre-se
dos atributos)
Prof. Adriano Teixeira de Souza
17. • O normal é que
tenhamos vários
clientes para poucos
servidores
• Assim, um servidor
deve poder atender a
vários clientes ao
mesmo tempo
• Isto é feito
escalonando Threads
no lado do servidor,
de forma que cada
Thread cuide de um
cliente
Prof. Adriano Teixeira de Souza
18. As aplicações que utilizam a rede são complexas
A complexidade vêm normalmente por uma gama de serviços
de infra-estrutura que são necessários para a execução do
sistema propriamente dito
◦ Por exemplo: localização, chamadas de métodos, tolerância a falhas, etc...
Por que são muito simples, com sockets podemos apenas
enviar e receber dados
Implementar todas as funcionalidades infra-estruturais
utilizando diretamente sockets pode ser um trabalho custoso,
repetitivo e, na maioria das vezes, complexo
Para diminuir as responsabilidades das aplicações (e dos
desenvolvedores delas), são utilizados plataformas de
software que realizam funcionalidades de infra-estrutura que
são comuns aos sistemas
Prof. Adriano Teixeira de Souza