Labs SD >

Development and Communication Tools

Goals

Índice:

The course project is developed by relying on the following tools: Java (programming language and platform), Maven (build), and a Java IDE (development environment).

This page presents an introductory text to each of these tools and a programming exercise.

Before you start, make sure to have installed the required software.

 


Java

O JDK (Java Developer Kit) é um conjunto de ferramentas para programação na linguagem Java.
As mais importantes são o javac que compila os programas e o java que lança as aplicações.

Os javac e java são suficientes para construir pequenos programas. No entanto, para programas de maior dimensão, é muito útil ter:

A tabela seguinte resume as utilizações mais comuns do JDK, Maven, e Eclipse:

A programação em Java para Sistemas Distribuídos deve ter em conta a concorrência e sincronização, uma vez que os servidores costumam tratar pedidos de vários clientes em simultâneo.

O tratamento de exceções é também um aspeto muito importante, e que irá ser especialmente importante para lidar com problemas de comunicação.

 


Maven

A ferramenta Maven é a mais importante logo a seguir ao próprio JDK. A utilização do Maven é obrigatória em SD para permitir a construção dos projetos de forma automática na linha de comandos.

O Maven desempenha o papel muito importante de automatizar toda a construção do código e de explicitar dependências de outros programas. Todos os programas devem ter a configuração Maven no ficheiro pom.xml para que possam ser (re)construídos de forma repetível. Os programas devem ter também um ficheiro README com instruções de construção e de execução.

 


Java IDE

Tanto o Eclipse quanto o IntelliJ podem ser configurados em cima do JDK ou do Maven.

 


Sockets

Uma tomada (socket) é uma extremidade de uma ligação através de uma rede de computadores. Atualmente, a comunicação entre computadores faz-se quase sempre com IP (Internet Protocol). Os sockets mais comuns usam TCP (Transmission Control Protocol), que estabelece uma ligação entre cliente e servidor. Um socket é identificado por um endereço IP e por um número de porto.

O Java disponibiliza uma biblioteca de sockets que está disponível no pacote java.net.

Os sockets definem uma interface de programação, mas não definem o conteúdo e significado das mensagens que vão ser trocadas. Para isso é necessário um protocolo de comunicação. Um protocolo é um sistema de regras que define uma convenção para permitir que diferentes entidades troquem informação de forma não ambígua. Assim tem que ser na comunicação em sockets. É preciso "dizer" como é enviado um pedido, quando termina o pedido, quando chega a resposta, quando já foi recebida, e assim por diante.

Um exemplo de protocolo é o HTTP (HyperText Transfer Protocol) que está na base da comunicação na WWW (World Wide Web).
Pode consultar também a Secção 1.6 do livro da cadeira sobre a World Wide Web e Sockets.

 


Exercício a resolver até ao fim da aula

O ponto de partida para o exercício ilustra a comunicação entre dois programas Java usando a biblioteca de sockets:
Java Sockets GitHub

  1. Obter o código: fazer Clone or Download.
    Temos dois programas que colaboram entre si: servidor e cliente.
    1. Estudar o código fonte e os ficheiros pom.xml do servidor e do cliente
    2. Configurar os dois projetos no Java IDE
    3. Compilar e executar primeiro o servidor e depois o cliente, seguindo as instruções no ficheiro README

Problemas? Observar atentamente as exceções produzidas.

  1. Analisar o output do Maven, em especial as linhas começadas por [WARNING]:
    1. Qual foi a causa da exceção?
    2. Que exceção foi lançada?
    3. Em que linha do código do cliente é que foi lançada a exceção?
      • Será um problema na configuração dos argumentos?
  1. Compilar e executar o servidor até funcionar sem erros.

Problema resolvido?
Sim ou Não :)

Retomar o exercício:

  1. Modificar os programas para que o servidor responda ao cliente com uma mensagem de confirmação.
  2. ... o resto do enunciado será entregue no início da aula de laboratório.

 

 


© Docentes de Sistemas Distribuídos, Dep. Eng. Informática, Técnico Lisboa