Ir para o conteúdo

CCT-UFCA/Ciência da Computação/Sistemas Distribuídos/Objetos Distribuídos

De Wikiversidade

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:
    1. O cliente chama o método no objeto proxy local.
    2. O proxy envia a solicitação ao servidor remoto.
    3. 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.

Referências

[editar | editar código]
  1. https://dca.ufrn.br/~affonso/DCA2401/2004_1/aulas/objetos_distribuidos.pdf
  2. https://www4.pucsp.br/~dcc-tec2/Semana07_Aplicacoes_Distribuidas.pdf
  3. https://www.devmedia.com.br/tutorial-rmi-invocacao-remota-de-metodos/4493
  4. https://apidog.com/pt/blog/serialization-and-deserialization/