Objectivos

  • Introdução à Fénix Framework para a modelação e geração automática de modelos de domínio persistentes e transaccionais
  • Realização de uma aplicação que utiliza a Fénix Framework

Documentação adicional:

Fénix Framework [EN]:

    Domain Modeling Language [EN]:

    Primeiro Exercício

    Antes de realizar os exercícios propostos para este laboratório deve ler com atenção primeiro o tutorial da Fénix Framework (FF).
    O primeiro exercício corresponde a criar a aplicação PhoneBook. Para tal, primeiro deve criar o projecto Maven para esta aplicação:
    1. Crie o directório base deste projecto (phonebook, por exemplo);
    2. Coloque o seguinte ficheiro pom.xml neste directório. Este ficheiro está descrito no tutorial da FF referido em cima (The Fenix Framework Tutorial) e pode ser facilmente adaptado a qualquer aplicação a desenvolver que utiliza a Fénix Framework;
    3. Crie a estrutura de directórios standard de um projecto maven:
      1. src/main/java/pt/tecnico/phonebook/domain
      2. src/main/java/pt/tecnico/phonebook/exception
      3. src/main/dml
      4. src/main/resources
      5. src/test/java/pt/tecnico/phonebook
    4. Copie o ficheiro phonebook.dml para src/main/dml. Este ficheiro contém a descrição da estrutura de objectos do estado persistente da aplicação;
    5. Copie o ficheiro fenix-framework-jvstm-ojb.properties para src/main/resources. Este ficheiro contém a informação necessário para realizar a ligação ao sistema de bases de dados que vai guardar o estado persistente da aplicação;
    6. Copie o ficheiro log4j.properties para src/main/resources. Este ficheiro contém as especificação de propriedades a utilizar pela biblioteca de logging log4j utilizada pela Fénix Framework.
    Após ter criado a estrutura de directórios e colocado os ficheiros phonebook.dml e fenix-framework-jvstm-ojb.properties nos directórios correctos, dê o seguinte comando "mvn compile". Dado que é a primeira vez que este comando é realizado vão ser geradas automaticamente as classes "_Base"  e as classes do domínio da aplicação, se bem que estas últimas estejam vazias. Será da responsabilidade do programador acrescentar a lógica de negócio necessária às classes de domínio. O código fonte das classes _Base" está colocado em target/generated-sources.

    Depois de ter executado com sucesso a fase compile, acrescente as seguintes classes ao código da aplicação: 
    Compile e corra a aplicação. Não se esqueça que para correr a aplicação é necessário que as tarefas de instrumentação do código e de processamento das anotações @Atomic sejam executadas antes da execução da aplicação. Sempre que há alteração das entidades do domínio é necessário que estas tarefas sejam executadas antes da execução da aplicação. Assim, deve executar o seguinte comando Maven: mvn test exec:java.

    Acrescente as seguintes funcionalidades ao código da aplicação:

    1.  Adicione alguns contactos no código de inicialização do estado inicial da aplicação e verifique que a execução do projecto (após re-popular o estado persistente da aplicação) mostra os novos contactos.
    2. Preencha o método searchContact da classe Person. Este método deve devolver a lista de contactos da pessoa cujo nome contém a string dada como argumento deste método.
    3. Adicione os métodos necessários às classes PhoneBook e Person por forma a garantir que não há duas pessoas com o mesmo nome ligadas à mesma instância de PhoneBook.
    4. Adicione o código necessário que remove um objecto do domínio do repositório persistente. Este código deverá ser invocado quando o objecto deixa de pertencer ao estado persistente da aplicação.

    Solução do Primeiro Exercício

    Depois de ter realizado a sua solução pode compará-la com a solução disponibilizada pelo corpo docente. Esta solução disponibilizada tem uma funcionalidade extra que é a exportação e importação do estado persistente da aplicação para um documento XML utilizando a biblioteca JDOM.

    Segundo Exercício

    Antes de fazer este exercício, os alunos devem desenvovlver a aplicação PhoneBook dada no primeiro exercício deste laboratório.

    Pretende-se desenvolver uma aplicação para a gestão de voos de companhias aéreas. Esta aplicação deve permitir a definição de companhias aéreas, de novos voos, operados por uma dada companhia aérea e guardar toda a informação em suporte persistente através da Fénix Framework.

    Um voo tem sempre associado um número (único no contexto da companhia aérea que o gere), um aeroporto de origem e outro de destino, bem como a hora de partida (hh:mm). Existe ainda a restrição de os aeroportos de origem e destino terem de ser obrigatoriamente distintos.
    Um aeroporto é identificado quer pelo seu código IATA, quer pelo seu  código ICAO. O aeroporto está instalado numa dada cidade e tem associado um custo de utilização por voo. O código IATA e ICAO de um aeroporto são únicos dentro do contexto da aplicação de gestão de companhias aéreas, ou seja, não podem existir dois aeroportos com o mesmo código IATA ou ICAO dentro da mesma aplicação.
    Por fim, uma companhia aérea tem um nome e um código IATA próprio, únicos na aplicação de gestão de companhias aéreas.

    Desenvolva um protótipo de uma aplicação de consola que (1) cria a companhia aérea portuguesa "TAP Portugal", (2) define os seguintes voos, e (3) os apresenta na consola:

    NúmeroOrigemDestinoPartida
    1951PortoLisboa06:50
    1988LisboaPorto21:55
    0651AmsterdãoPorto14:20
    0660LisboaAmsterdão14:05

    A apresentação de um voo deve obedecer ao seguinte formato:

    <código companhia aérea> <número de voo> : <cidade origem> (<código IATA>), <cidade destino> (<código IATA>), <hora>

    Para desenvolver esta aplicação, os alunos devem usar como ponto de partida o template de projecto Maven definido para a aplicação PhoneBook e realizar as alterações necessárias no ficheiro POM disponibilizado e construir a estrutura de directórios correspondentes a este novo projecto Maven.