Skip to content

Repository files navigation

RMIDistFlower

Este projeto foi desenvolvido como atividade prática com o objetivo de aplicar o middleware Java RMI (Remote Method Invocation) em um cenário realista. A aplicação realiza o cálculo de similaridade entre três objetos (flores, com 4 atributos numéricos cada), utilizando duas métricas: distância Euclidiana ou City Block.


💡 Objetivo

O cliente envia ao servidor os dados de três objetos e o tipo de métrica a ser utilizada. O servidor calcula as distâncias entre os pares de objetos e retorna os valores ao cliente, que então determina qual par é mais similar (ou seja, qual tem a menor distância).


🧠 Conceitos Aplicados

  • Programação distribuída com RMI
  • Criação e uso de interfaces remotas
  • Serialização de dados
  • Invocação remota de métodos
  • Cálculo de distâncias vetoriais

📁 Estrutura dos Arquivos

├── Cliente.java // Aplicação cliente

├── Servidor.java // Inicializador do servidor

├── CalculadoraDistancia.java // Interface remota

├── CalculadoraDistanciaImpl.java // Implementação dos métodos remotos

├── ResultadoComparacao.java // Objeto de retorno com as distâncias e o par mais similar


🖥️ Requisitos

  • Java JDK 8 ou superior
  • Variável de ambiente JAVA_HOME configurada
  • Terminal com suporte a execução de comandos Java
  • Não é necessário instalar bibliotecas externas

⚙️ Compilação

No terminal, navegue até a pasta do projeto e compile os arquivos:

javac *.java

Execução

1. Máquina Servidor

Passo 1: Iniciar o rmiregistry

Windows (PowerShell ou CMD)
cd caminho/para/RMIDistFlower-main
"C:\Program Files\Java\jdk-XX\bin\rmiregistry.exe"

Substitua jdk-XX pelo caminho do seu JDK.

Linux/macOS
rmiregistry &

Deixe essa janela aberta. É importante que o rmiregistry esteja ativo durante toda a execução. O rmiregistry precisa estar rodando no mesmo diretório dos .class para localizar a classe CalculadoraDistancia.

Passo 2: Iniciar o servidor

Em outro terminal, execute:

java Servidor

Você deverá ver:

Servidor pronto. Serviço registrado com sucesso.

2. Máquina Cliente

Na máquina cliente, onde os arquivos .class também devem estar presentes, execute:

java Cliente

A aplicação irá pedir que você digite o IP da máquina servidor e os dados dos objetos (flores), um de cada vez. Exemplo:

Digite o IP ou hostname do servidor: IP SERVIDOR
Digite os 4 atributos do objeto A (separados por espaço):
5.1 3.5 1.4 0.2
Digite os 4 atributos do objeto B (separados por espaço):
7.0 3.2 4.7 1.4
Digite os 4 atributos do objeto C (separados por espaço):
6.3 3.3 6.0 2.5
Informe o tipo de distância (euclidiana ou cityblock): euclidiana

A saída será semelhante a:

Distâncias calculadas (euclidiana):
A - B: 4.0037
A - C: 5.4964
B - C: 2.0591
Par de objetos mais similar: B e C

🧹 Limpeza

Para deletar os arquivos .class:

del *.class    # Windows
rm *.class     # Linux/macOS

🛠️ Observações Técnicas

  • Os dados dos objetos são inseridos manualmente via terminal, facilitando testes com diferentes entradas.
  • O tipo de distância pode ser euclidiana ou cityblock, sem diferenciação de maiúsculas/minúsculas.
  • A validação de tamanho dos vetores está implementada no servidor.
  • Toda a lógica de cálculo foi isolada no servidor, como exige a proposta.

🧪 Testado em

  • Windows 11 (Git Bash + JDK 17)
  • Ubuntu 22.04 (OpenJDK 11)
  • VS Code + Java Extension Pack

About

Este projeto foi desenvolvido como atividade prática com o objetivo de aplicar o middleware Java RMI (Remote Method Invocation) em um cenário realista. A aplicação realiza o cálculo de similaridade entre três objetos (flores, com 4 atributos numéricos cada), utilizando duas métricas: distância Euclidiana ou City Block.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages