Objetivo
Esse documento tem como objetivo mostrar as formas de acesso ao banco orientado a objetos que é utilizado pelo Storex Custom.
Arquitetura
O storex Custom faz uso de um mecanismo para armazenamento persistente de objetos Java. Os dados persistidos estão disponíveis para os programadores de tal forma que aparecem como objetos Java normais. Em outras palavras, é um banco de dados onde a forma de gravar as informações e de obter essas mesmas informações, é através da utilização de técnicas de programação orientadas a objetos.
As operações abordadas nesse documento serão as de leitura de dados e de escrita de dados. Através de exemplos de código, vamos mostrar a forma como devemos indicar para o banco que operação a ser iniciada é uma transação de atualização (escrita) ou uma transação de leitura.
O componente fornece uma fachada de acesso à camada de acesso aos dados, estamos falando da classe com.csi.components.interfaceDal.ConcentradorCadastrosComponente. Esta é a classe responsável por concentrar todos os bancos e cadastros necessários ao funcionamento de um componente do Storex Custom.
Formas de Acesso
O PDV do Storex Custom faz uso do banco local para operações de Leitura e Escrita. Ambas precisam ser feitas dentro de um contexto transacional, isto é, torna-se necessário fazer um controle de transação tanto para operações de Leitura, quanto para operações de Escrita.
Vamos mostrar, através de exemplos de código, como essas operações podem ser feitas.
Operação de LeituraUma operação de leitura nada mais é do que uma consulta realizada para obter alguma informação, ou conjunto de informações, que são necessárias para a execução de alguma operação que esteja sendo demandada ao sistema. Como dito anteriormente, o ConcentradorCadastrosComponente fornece o acesso a todos os cadastros disponibilizados no componente. Entre eles podemos citar os principais: Transacoes, Produtos, Lojas, entre outros. Cada um dos cadastros fornece vários métodos de busca e também métodos de atualização dos dados na base. Ao lado, temos um exemplo de código onde é feita uma consulta à base onde ficam armazenadas as transações, passando a chave da transação como parâmetro de pesquisa. Lembrando que essa é a base local e que armazena as transações da data de movimento atual do caixa. É importante observar que para qualquer operação de acesso ao cadastro, é preciso que seja feito dentro de um contexto transacional, ou seja, dentro de uma transação. Onde esta tem início e obrigatoriamente precisa ser finalizada através de um commit ou rollback. | Consultando a base de Transações public Transacao buscaTransacao(Componente componente, ChaveTransacao chaveTransacao) { // Obtendo uma instância de ConcetradorCadastrosComponente ConcentradorCadastrosComponente concentrador = componente.getConcentradorCadastros(); CADBancoTransacoes cadBanco = null; Transacao transacao = null; try { // Obtendo a referência para busca na base de transações cadBanco = componente.getConcentradorCadastros().getCadastroBancoTransacoes(); // Iniciando uma transação de leitura cadBanco.beginTransaction(BancoDeDados.TRANS_LEITURA); /* * Representação abstrata da base de dados de transações, onde todas * as transações processadas estão sendo armazenadas. * */ TLog tlog = concentrador.getCadastroTransacoes(); // executando a busca na base transacao = tlog.busca(chaveTransacao); /* Após a consulta é mandatório a execução de um commitTransaction para finalizar a transação de leitura. Com isso podemos liberar o banco para um novo acesso. * */ cadBanco.commitTransaction(); } catch (Exception e) { /* Caso ocorra algum erro no processo, é mandatório a execução de um rollbackTransaction para finalizar a transação de leitura. * Com isso podemos liberar o banco para um novo acesso. * */ try { cadBanco.rollbackTransaction(); } catch (Exception ex) { CSIDebug.println("AnalisadorTransacao::buscaTransacaoLocal :: ERRO :: "+ex); } } // retornando o objeto Transacao obtido na consulta return transacao; } |
Operação de EscritaAo lado temos um exemplo de como um objeto Transacao pode ser persistido na base local. Nesse exemplo, está sendo feita uma busca para recuperar a última transação de venda gravada na base. Em seguida é atualizado o conjunto de eventos que foram registrados na operação e por último o objeto é atualizado na base. O que precisa ficar evidenciado nesse exemplo, é que como a operação é de escrita a transação é iniciada com uma constante diferente do exemplo anterior. Temos duas opções de transação:
| Salvando uma Transacao public void atualizaEventoTransacao(Componente componente, GerenciadorCMOS cmos, ConjuntoEventoTransacao conjunto){ // Obtendo uma instância de ConcentradorCadastrosComponente. ConcentradorCadastrosComponente concentrador = componente.getConcentradorCadastros(); CADBancoTransacoes cadBanco = null; try{ // Obtendo referencia ao cadastro de transações cadBanco = componente.getConcentradorCadastros().getCadastroBancoTransacoes(); // Iniciando uma transação de atualização (escrita) cadBanco.beginTransaction(BancoDeDados.TRANS_ATUALIZACAO); TLogVenda tlogVenda = concentrador.getCadastroTransacoesVenda(); // Obtendo a transação de venda do banco TransacaoVenda venda = (TransacaoVenda) tlogVenda.busca(cmos.getChaveUltimaTransacaoVenda()); // Atualizando os dados no objeto venda.setConjuntoEventoTransacoes(conjunto); // Gravando o objeto alterado no banco tlogVenda.atualiza(venda); // Finalizando a transação de escrita. cadBanco.commitTransaction(); } catch (Exception e) { e.printStackTrace(); try { // Finalizando a transação de escrita e desfazendo a alteração feita no objeto. cadBanco.rollbackTransaction(); } catch (Exception ex) {} } } |