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.
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).
- 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
├── 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
- Java JDK 8 ou superior
- Variável de ambiente
JAVA_HOMEconfigurada - Terminal com suporte a execução de comandos Java
- Não é necessário instalar bibliotecas externas
No terminal, navegue até a pasta do projeto e compile os arquivos:
javac *.java
cd caminho/para/RMIDistFlower-main
"C:\Program Files\Java\jdk-XX\bin\rmiregistry.exe"Substitua jdk-XX pelo caminho do seu JDK.
rmiregistry &Deixe essa janela aberta. É importante que o
rmiregistryesteja ativo durante toda a execução. Ormiregistryprecisa estar rodando no mesmo diretório dos.classpara localizar a classeCalculadoraDistancia.
Em outro terminal, execute:
java ServidorVocê deverá ver:
Servidor pronto. Serviço registrado com sucesso.Na máquina cliente, onde os arquivos .class também devem estar presentes, execute:
java ClienteA 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): euclidianaA 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 CPara deletar os arquivos .class:
del *.class # Windows
rm *.class # Linux/macOS- Os dados dos objetos são inseridos manualmente via terminal, facilitando testes com diferentes entradas.
- O tipo de distância pode ser
euclidianaoucityblock, 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.
- Windows 11 (Git Bash + JDK 17)
- Ubuntu 22.04 (OpenJDK 11)
- VS Code + Java Extension Pack