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 Leitura

Uma 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 Escrita

Ao 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:

  • BancoDeDados.TRANS_ATUALIZACAO → Constante utilizada nas operações de escrita.
  • BancoDeDados.TRANS_LEITURA → Constante utilizada nas operações de leitura.
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) {}
		
	} 
}
  • Sem rótulos