CCT-UFCA/Ciência da Computação/Sistemas Distribuídos/Objetos Distribuídos
Aparência
Conceito de Objetos Distribuídos
[editar | editar código]Objetos distribuídos são entidades que podem ser acessadas em diferentes dispositivos de uma rede como se estivessem localmente disponíveis. Eles combinam métodos e atributos, possibilitando interação remota e abstração entre componentes distribuídos.
- Características:
- Transparência: Usuários e desenvolvedores interagem com o objeto distribuído como se ele fosse local.
- Encapsulamento: Os detalhes de localização e comunicação são escondidos dos usuários.
- Independência: Suporte a múltiplas plataformas e linguagens de programação.
Exemplo: Uma aplicação web que utiliza objetos distribuídos para consultar dados de um servidor remoto sem precisar conhecer sua localização ou configuração.
Frameworks e Tecnologias para Objetos Distribuídos
[editar | editar código]- CORBA (Common Object Request Broker Architecture):
- Um padrão desenvolvido pela OMG (Object Management Group) para comunicação entre objetos distribuídos em diferentes linguagens e plataformas.
- Características:
- Utiliza um Object Request Broker (ORB) para gerenciar chamadas remotas.
- Suporte a várias linguagens como C++, Java e Python.
Exemplo: Usado em sistemas críticos como bancos e telecomunicações.
- RMI (Remote Method Invocation):
- Framework específico do Java para invocação de métodos remotos em objetos distribuídos.
- Características:
- Usa Java Virtual Machine para garantir portabilidade.
- Implementação simplificada de comunicação remota.
Exemplo: Um sistema de gestão de dados onde o cliente invoca métodos em um servidor usando Java RMI.
- DCOM (Distributed Component Object Model):
- Tecnologia da Microsoft para comunicação remota entre componentes em máquinas diferentes, baseada no modelo COM.
- Características:
- Suporte integrado ao Windows.
- Extensão do COM para ambientes distribuídos.
Exemplo: Aplicações corporativas que precisam de interação entre sistemas Windows remotos.
Invocação de Métodos Remotos (RMI)
[editar | editar código]- Definição: A invocação de métodos remotos permite que objetos em diferentes máquinas chamem métodos uns dos outros como se estivessem no mesmo dispositivo. O Java RMI é uma das tecnologias mais usadas para isso.
- Funcionamento:
- Servidor: Hospeda o objeto remoto e registra-o em um registry.
- Cliente: Localiza o objeto remoto através do registry e invoca métodos nele.
- Processo:
- O cliente chama o método no objeto proxy local.
- O proxy envia a solicitação ao servidor remoto.
- O servidor executa o método e retorna os resultados.
Interface Hello:
import java.rmi.*;
public interface Hello extends Remote {
String sayHello() throws RemoteException;
}
Servidor:
import java.rmi.*;
import java.rmi.server.*;
public class HelloImpl extends UnicastRemoteObject implements Hello {
private String nome;
public HelloImpl(String s) throws RemoteException {
super();
nome = s;
}
@Override
public String sayHello() throws RemoteException {
return "Hello World!!!";
}
public static void main(String[] args) {
System.setProperty("java.security.policy", "policyfile.txt"); // Define políticas de segurança
System.setSecurityManager(new SecurityManager());
try {
HelloImpl obj = new HelloImpl("HelloServer");
Naming.rebind("HelloServer", obj);
System.out.println("HelloImpl foi criado e registrado no RMI Registry.");
} catch (Exception e) {
System.out.println("Ocorreu uma exceção no servidor: " + e.getMessage());
e.printStackTrace();
}
}
}
Cliente:
import java.rmi.*;
public class Client {
public static void main(String[] args) {
try {
Hello obj = (Hello) Naming.lookup("//localhost/HelloServer");
System.out.println("Mensagem recebida do servidor: " + obj.sayHello());
} catch (Exception e) {
System.out.println("Ocorreu uma exceção: " + e.getMessage());
e.printStackTrace();
}
}
}
Serialização e Desserialização de Objetos
[editar | editar código]- Serialização: Processo de converter um objeto em um formato de dados (como um fluxo de bytes) para que possa ser transmitido ou armazenado.
- Desserialização: Processo inverso, onde o formato serializado é convertido de volta em um objeto utilizável.
- Uso em Objetos Distribuídos: A serialização permite que os atributos dos objetos sejam transmitidos pela rede e reconstruídos no destino.