sexta-feira, 28 de setembro de 2012

Reimplementação de métodos da classe br.com.jbc.controller.Controller

Sobrecarga de método para alterar lógica de negócio


Para reimplementar a classe controller, devemos declarar uma classe que herde de br.com.jbc.controller.Controller, sendo necessário especificar o tipo de classe de manipulação.

Vejamos como utilizar diretamente a classe Controller para inserir um registro de Venda:

br.com.jbc.controller.Controller<Venda> controller = 
                          new br.com.jbc.controller.Controller<Venda>();
try {

    Venda venda = new Venda();
    venda.setValor(50.00");
    venda.setProduto(new Produto(1));
    venda.setQuantidade(10);

    controller.insert(venda);

} catch (Exception e) {
    e.printStackTrace();
}

Convenhamos que para algumas operações precisamos efetuar algumas atualizações em outras entidades, porém isto deve ser feito na mesma transação, então declaramos a classe para que seja possível reimplementar o método inserir Venda, pois precisamos atualizar o estoque do Produto 1:

public class VendaController extends br.com.jbc.controller.Controller<Venda>{

    @Override
    public Boolean insert(Venda venda){

        long estoqueProduto = venda.getProduto().getQuantidade();

        // atualiza o estoque com a quantidade vendida
        venda.getProduto().setQuantidade(estoqueProduto - venda.getQuantidade());
        super.insert(venda);
   }

}

Invocamos super.insert(venda) para chamar o método da classe pai, neste caso a classe br.com.jbc.controller.Controller

Para este exemplo, consideramos que o produto esteja delcarado na classe Venda com uma anotação org.hibernate.annotations.CascadeType.ALL

Em seguida, utilizamos a classe criada:

VendaController vendaController = new VendaController();

try {
    Venda vendaController = new Venda();
    venda.setValor(50.00");
    venda.setProduto(new Produto(1));
    venda.setQuantidade(10);
    vendaController.insert(venda);
} catch (Exception e) {
    e.printStackTrace();
}

Dando atenção a declaração da classe VendaController e a insersão da Venda, códigos que se encontram destacados e em negrito.

Com a sobrescrita do método insert, foi possível fazer a atualização do estoque do produto vendido.

quinta-feira, 27 de setembro de 2012

JavaDoc da classe Controller

Para melhor entender o objetivo do JBC, confira a documentação da principal classe que disponibiliza os serviços do Framework, a classe br.com.jbc.controller.Controller.java

quarta-feira, 26 de setembro de 2012

O que o JBC faz


  1. Transação
    Ao utilizar a classe br.com.jbc.controller.Controller, alguns dos métodos como o
    insert, update e delete, utilizam o controle de transação. Ao ser invocado um desses métodos, a interface org.hibernate.Session verifica se existe uma conexão ativa com o banco de dados, caso confirmado é iniciado uma transação. Efetuada a operação com sucesso, ela é confirmada através de um commit no banco de dados, caso contrário ela é desfeita através de um rollback.
    Vale ressaltar que o objetivo deste não é entra em detalhes sobre Banco de Dados, controle de transação, muito menos sobre Hibernate, então concluímos que o leitor tenha estes conhecimentos.
  2. Consultas Hibernate com Criteria e Restrinctions
    As consultas no banco de dados realizadas pelo JBC, grande parte delas são feitas utilizando a API do Hiberante
    org.hibernate.Criteria. Quando trabalhamos com consulta envolvendo objetos complexos, ou seja, objetos com um ou mais relacionamentos, onde esses objetos relacionados podem até ter outros objetos relacionados, e assim sucessivamente, precisamos informar para o org.hibernate.Criteria quais são esses relacionamentos que devem fazer parte da consulta. Esta implementação no JBC é feita com Reflecção, através da API java.lang.reflect, por isso é necessário que os atributos tenham o mesmo nome da classe declarada, sempre com a primeira letra em minúscula, como já apresentado no post anterior.
    As restrições são adicionados ao
    org.hibernate.Criteria através da interface org.hibernate.criterion.Restrictions.
  3.  Busca Paginada.
    A classe br.com.jbc.controller.Controller tem um método de busca paginada com a seguinte assinatura
    :

    public SearchPaginate findPaginate(T filter, int firstResult, int maxResult, String sortField, boolean orderByType)
    
        1. filter: Objeto VO contendo os filtros de consulta populados em seus atributos. Este atributo é genérico, e será definido na instância da classe br.com.jbc.controller.Controller
        2. firstResult: Número da página que a consulta irá mostrar os resultados;
        3. maxResult: Número de registros por página;
        4. sortField: Nome do atributo da entidade que será ordenado, aqui será passado o nome do atributo em formato String;
        5. orderByType: Tipo de ordenação da Lista, os valores devem ser br.com.jbc.controller.Controller.ORDER_ASC ou br.com.jbc.controller.Controller.ORDER_DESC


          O método retorna
          um objeto br.com.jbc.util.SearchPaginate, que contém a lista de registros paginada e a quantidade de registros total da consulta

Requisitos obrigatórios para a utilização

Para utilizar o JBC, é necessário que algumas regras de implementação sejam consideradas para que o Framework funcione corretamente, são elas:

    1. Utilizar a versão 3 do Hibernate em sua aplicação, pois esta é a versão utilizada no JBC.
    2. Ao criar o arquivo de configuração Hiberante (hibernate.cfg.xml) em sua aplicação, o mesmo deve ser colocado na raiz do código fonte do projeto, pois é de lá que o JBC irá buscar este arquivo de declaração das entidades.
    3. A chave primária de todas as entidades deve se chamar “id”, sendo indiferente o tipo de dados. Esta regra é necessária pois o JBC trabalha com reflection, e em determinados pontos, como para adicionar Restrições no Criteria, o JBC se baseia que a chave primária de todas as entidades sempre será “id”.
    4. Os atributos que representam relacionamentos, como Many-To-One e One-To-Many, tem que ter o mesmo nome da classe que implementa. Por exemplo:
Para a declaração do atributo do tipo Cidade dentro de Pessoa, deve ser declarado de uma das seguintes maneiras:

      1. Se o nome da classe for Cidade, a declaração do atributo deve ser:  
        Cidade cidade;
      2. Se a classe se chamar CidadeVO, deve ser:  
        CidadeVO cidadeVO;
      3. ou ainda se for CidadeEntity, deverá ser: 
         CidadeEntity cidadeEntity;

        O importante é que sempre o nome do atributo seja igual ao nome da classe, e SEMPRE COM A PRIMEIRA LETRA EM MINÚSCULA. 
        Reforçando que isto é necessário que o JBC sabia lidar com as Restrições adicionadas ao Criteria.


Recursos utilizados no JBC.

 Para se desenvolver este Framework, foram utilizados os seguintes recursos: 
  1. Java 6
  2. Hibernate 3
  3. ejb3-persistence

sexta-feira, 21 de setembro de 2012

Start JBC Blog

Olá Pessoal,

Venho criar este blog para compartilhar a ideia que tive em criar um Framework Java, esta ideia surgiu para otimizar o desenvolvimento dos projetos em que trabalhava, uma vez que muitos códigos nos projetos eram duplicados. Ao longo dos dias estarei publicando novas postagens de como utilizar o JBC, como ele foi desenvolvido, e as maneiras de melhor usufluir dele.

Gostaria de receber sugestões e melhorias para o mesmo, da mesma maneira que venho aqui para compartilhar este trabalho, com o objetivo de ajudar a comunidade Java e otimizar o tempo de desenvolvimento dos projetos.

Para iniciar, leia O que é o JBC

Em breve, outras novidades..