Java

 Sistema de Registro de Pedidos

Trabalho da Disciplina: Programação Orientada a Aspectos
Prof. Ms. Marcos Macedo

MBA em Desenvolvimento de Aplicações Java - SOA / FIAP
25/01/2012

Christiny Belini Goulart
Fabio Gonçalves Martins
Robson de Sousa Martins


Download do código-fonte:

Sistema de Registro de Pedidos (ZIP ~9,7MB)


Tecnologias empregadas:

  • Spring/AOP;
  • Spring/JPA;
  • Banco de Dados: MySQL;
  • Java Swing;
  • Log4J.

Enunciado:

(FUNC) Atividades Funcionais - Aplicando AOP:

  1. Gerar log de auditoria antes e depois de cada regra de negócio executada.
  2. Gerar log de vendas diárias contendo a quantidade e valores totais dos pedidos gerados.
  3. Colocar as seguintes regras usando Aspecto:
    1. Toda venda maior que R$ 1.000,00 terá desconto de 5% do valor em cada item;
    2. Se o cliente comprar mais de 10 itens de pedidos terá automaticamente um desconto de 5% do valor total;
    3. Para pedidos emitidos entre os meses de Agosto e Setembro, deverá ser adicionado um adicional de 10% do total do valor total do pedido;
    4. Para pedidos realizados aos domingos, os mesmos estarão sob efeito de promoção, isto é, desconto de R$ 100,00, isso somente para a compra do livro de "Aspecto - a arte de Pensar Diferente".

(NF) Atividades NÃO Funcionais - Aplicando AOP:

  1. Desenvolver um 'connection pooling' através do uso de Aspectos;
  2. Logar todas as Exceções ocorridas no Projeto através de Aspectos;
  3. Em caso de falha com a conexão com o banco de dados, realizar no máximo 5 tentativas, e avisar no log sobre o ocorrido (usar Aspecto);
  4. Introspectar pelo menos uma transação para uma das regras de negócio, isto é, o COMMIT ou ROLLBACK será realizado via Aspecto.

Configuração do Banco de Dados:

Schema: regpedidos
Usuario: root
Senha: fiap

Classe Principal da Aplicação: br.com.fiap.main.RegistroPedidosMain


Detalhes da Implementação:

  1. Esta implementação supõe que os descontos e acréscimos descritos nas regras de negócio (FUNC.3) são cumulativos e somados num atributo "desconto".
    Exemplo: desconto pela regra FUNC.3b: 5% ; acréscimo pela regra FUNC.3c: 10%, então, o atributo desconto desse pedido será de 5 + (-10), ou seja, -5% (acréscimo de 5%).
  2. O arquivo log4j.properties está configurando todos os "loggers" para exibir no console (stdout).
    Ele poderá ser alterado para direcionar as mensagens de log para arquivos, por exemplo, um para cada aspecto (advice) implementado.
  3. Os cadastros de clientes e produtos não possuem uma tela implementada.
    O script sql fornecido já popula o banco de dados com alguns clientes e produtos, além de alguns pedidos já efetuados nos testes.
  4. O controle de pedido "Finalizado" somente tem por objetivo desabilitar um pedido para alteração - ele não é levado em consideração por nenhuma regra de negócio implementada.
  5. A aplicação permite tanto a inclusão de novos pedidos, assim como a consulta e alteração de pedidos existentes.
    Para simplificar o desenvolvimento, as funções de remover itens ou excluir pedidos não foram implementadas.
  6. Os seguintes aspectos (advices) foram implementados:
    • PedidoAdvice: implementa os requisitos FUNC.1 e FUNC.3(a,b,c,d).
    • VendasDiariasAdvice: implementa o requisito FUNC.2.
    • TransacaoAdvice: implementa os requisitos NF.1 e NF.4.
    • ExcecaoAdvice: implementa o requisito NF.2.
    • ConexaoAdvice: implementa o requisito NF.3.
  7. O log de vendas diárias (FUNC.2) é gerado a cada chamada ao método AplicacaoDAO.criarPedido(), ou seja, ao criar um novo pedido ou alterar um já existente.
  8. Na regra FUNC.3b, foi assumido que a quantidade de itens do pedido equivale à soma dos itens (cada item multiplicado por sua quantidade).
    Exemplo: se um pedido tiver 2 itens, cada um com uma quantidade de 8, então o total de itens do pedido é considerado como 16.