SlideShare uma empresa Scribd logo
06 it-curso gxxbr
Muitos administradores de bases de dados (DBMSs) contam com sistemas de recuperação anti-
falhas, que permitem deixar a base de dados em estado consistente quando ocorrem imprevistos tais
como apagões ou quedas do sistema.
Os administradores de bases de dados (DBMSs) que oferecem integridade transacional, permitem
estabelecer Unidades Lógicas de Trabalho (UTLs), que são, nem mais nem menos, que o conceito
de transações de base de dados.
Efetuar COMMIT em uma base de dados, significa finalizar uma Unidade Lógica de Trabalho (UTL).
06 it-curso gxxbr
É importante comentar que o GeneXus inclui a sentença COMMIT nos programas gerados associados a
transações e procedimentos, somente em ambientes de trabalho Cliente/Servidor (incluindo, portanto, os
ambientes Web). O motivo disto é que em ambientes Cliente/Servidor, temos um DBMS que assegura a
integridade transacional, portanto o GeneXus efetua a tarefa de definir as Unidades Lógicas de Trabalho
(UTLs).
Onde o GeneXus inclui COMMIT exatamente?
Em cada procedimento: ao final do programa fonte.
Em cada Transação: imediatamente antes das regras com evento de disparo AfterComplete. Para cada
interação completa que for efetuada em tempo de execução por meio da transação, haverá um COMMIT,
antes das regras com evento de disparo AfterComplete.
Nota: o novo tipo de dados Business Component que estaremos vendo depois permite atualizar a base de
dados desde qualquer objeto GeneXus, mas será visto que não realiza automaticamente um COMMIT.
GeneXus oferece uma Propriedade para cada objeto transação e procedimento, para definir se
deseja que seu programa gerado efetue ou não o COMMIT. O nome da Propriedade é Commit
on Exit e seu valor por default é Yes (por isso, toda transação e procedimento por default efetua
COMMIT).
Se desejamos que certa transação ou procedimento não tenha COMMIT no programa gerado,
alterar o valor da Propriedade Commit on Exit para No.
Por que motivo pode-se querer que não seja realizado COMMIT em uma Transação ou
Procedimento?
Para personalizar uma Unidade Lógica de Trabalho (UTL). Isto é, podemos precisar ampliar uma
Unidade de Trabalho Lógica (UTL), para que várias transações1 e/ou procedimentos, estejam em uma
única Unidade de Trabalho Lógica (UTL).
Exemplo (mostrado acima):
A Transação “X” chama um Procedimento “Y”, e deseja-se que ambos objetos estejam em única UTL. A
Transação atualiza certos registros, e o procedimento outros, e se deseja que esse conjunto total de
operações, consista em uma única UTL (para assegurarmos que se ocorrer alguma falha, seja realizado
todo o conjunto de atualizações ou nada na da base de dados).
Para isto, podemos eliminar o COMMIT do procedimento, e deixar que seja realizado na Transação (ao
retornar do procedimento para a Transação, para que seja executado ao final de todas as operações);
temos que configurar a propriedade Commit on Exit do procedimento com valor: No e deixar a
propriedade Commit on Exit da Transação com o valor por default: Yes. Mas além disso, é fundamental
que a chamada ao procedimento seja realizada antes que se execute o COMMIT na transação (já
que a idéia é que ambos os objetos tenham uma única UTL, e para ele o COMMIT deve efetuar na
transação ao retornar do procedimento); assim que a chamada ao procedimento definir na Transação
com um evento de disparo que ocorra antes da execução do COMMIT (dependendo se a transação tiver
um nível ou mais, e dos requerimentos, poderia ser AfterInsert por exemplo, AfterUpdate, ou AfterLevel
Level Atributo do 2do nível, ou BeforeComplete mas não AfterCompete).
Não existe uma única solução para personalizar uma UTL. O fundamental é analisar qual objeto pode
fazer COMMIT (podendo haver mais de uma possibilidade) e uma vez que se decida qual objeto
efetuará COMMIT, as chamadas que se requerem fazer, deverão ser efetuadas em momentos
adequados, considerando se já executou o COMMIT ou não.
________________________________________________________________________________
¹ Em ambiente Web existe uma restrição importante: se uma transação chamar outra transação, o Commit realizada
por uma não aplica sobre os registros ingressados/modificados/eliminados pela outra. Isto é, o Commit de cada
transação contém somente “visibilidade” sobre os registros operados por essa transação, e não por outra, onde duas
transações diferentes não podem ficar em uma mesma UTL. Não poderá realizar-se personalização neste caso.
Por Exemplo, para que a transação e procedimento vistos conformem uma única UTL, poderíamos ter optado
também pela alternativa de que não efetue COMMIT na transação (Commit on Exit = No), mas sim que seja
realizado pelo procedimento ao final de tudo; fazer dessa forma, não seria um erro - como o é na solução
anterior - chamar ao procedimento utilizando o evento de disparo AfterComplete, o COMMIT não será realizado
na transação, mas no procedimento.
Concluindo, precisamos decidir qual objeto fará COMMIT e que as chamadas necessárias sejam feitas em
momentos adequados, para que a UTL personalizada fique bem definida.
Outro Exemplo:
A transação “Invoice“ estudada até o momento, em um modelo de Protótipo cliente/servidor. Caso não
modificarmos o valor predeterminado da propriedade Commit on Exit.
E o usuário executa a transação, inserindo a fatura 1 e todas as suas linhas. Depois insere a fatura 2 e quando
inserir a 3era. Linha da mesma ocorre um apagão. Quando a energia volta e reinicializa a execução, quais os
registros que ficaram gravados na tabela e quais foram perdidos?
A fatura 1 inteira estará gravada (cabeçalho e suas linhas). Por quê? Porque ao terminar de inserir e passar a
inserir a fatura 2, foi efetuado um commit. A fatura 2 com os registros que gravou até o momento que faltou
energia, foi perdido. Por quê? Porque a transação realiza o rollback de tudo que foi efetuado depois do último
commit. O cabeçalho da fatura 2 e as suas linhas informadas não estavam ainda “commitadas”.
Observar então que o commit não é pela transação inteira (ou seja, todas as interações do cabeçalho e suas
linhas) e sim por cada instancia do cabeçalho e linhas.
Se o commit acontece uma única vez antes da transação ser fechada, então se tivesse sido ingressados 29
faturas e o sistema caísse na trigésima, todas as 29 faturas anteriores (todo o processo seria desfeito, já que
ainda não foi realizado o commit). Isto não é assim, quando ocorre a queda do sistema na trigésima fatura
informada, ficaram gravadas as 29 anteriores (só não foi à trigésima).
Em ambiente Web os registros “visíveis” para ser commitados por uma transação são os atualizados
pela própria transação, e pela própria transação, e pelos procedimentos que esta chame antes do
seu Commit, porém não os de outra transação.
Cada transação trabalha com diferentes UTLs.
É por este motivo que no primeiro exemplo acima apresentado, onde a transação “X” chama a
transação “Y” logo de ter inserido um registro, embora a transação “Y” realize um Commit ao final do
cabeçalho e linha são ingressadas, este Commit não valerá sobre o registro que teria sido ingressado
previamente pela transação “X”. Este registro ficará “perdido”, sem Commit.
Internet trabalha de forma diferente, as transações Web “vivem” somente o tempo em que o usuário
de um navegador seleciona o link ou pressiona um botão e a nova página é mostrada. Toda
modificação da base de dados que se faça durante a “vida” da transação deve ser confirmada ou
eliminada antes que a transação Web finalize sua execução e retorne à página resultante.
Como conseqüência, uma transação Web inicia uma UTL (Unidade Lógica de Trabalho) ao começar
a executar e fecha-a (seja por COMMIT ou ROLLBACK) antes de terminar. Não pode formar parte de
outra UTL. Se um programa chama uma transação Web, esta iniciará outra (nova) UTL.
Não acontece isso com os procedimentos. No segundo exemplo mostrado acima, vemos que
podemos formar uma UTL que envolva à transação “Y” e ao procedimento “Z”...com tudo não
podemos incluir a transação “X” na mesma UTL.
Caso seja necessário que as operações de duas ou mais transações (com ou sem procedimentos
incluídos) estejam em uma mesma UTL, pode-se usar as transações com Web Panels e Business
Components; e utilizar o comando Commit.
Aqui simplesmente vamos deixar o tema sinalizado, voltaremos nele após estudar Business
Components, onde vamos compreender esta solução.
06 it-curso gxxbr

Mais conteúdo relacionado

Semelhante a 06 it-curso gxxbr

12 db atualizacao-curso-gxxbr
12 db atualizacao-curso-gxxbr12 db atualizacao-curso-gxxbr
12 db atualizacao-curso-gxxbr
Cristiano Rafael Steffens
 
000047 como fazer totvs - v 4.0.0 - entenda o rm conversor de classis para ...
000047   como fazer totvs - v 4.0.0 - entenda o rm conversor de classis para ...000047   como fazer totvs - v 4.0.0 - entenda o rm conversor de classis para ...
000047 como fazer totvs - v 4.0.0 - entenda o rm conversor de classis para ...
kdimmg
 
Gerência de Transações Distribuídas de Consultas
Gerência de Transações Distribuídas de ConsultasGerência de Transações Distribuídas de Consultas
Gerência de Transações Distribuídas de Consultas
Wendel Moreira
 
TDC 2018 - Boas práticas no desenvolvimento de Smart Contracts
TDC 2018 - Boas práticas no desenvolvimento de Smart ContractsTDC 2018 - Boas práticas no desenvolvimento de Smart Contracts
TDC 2018 - Boas práticas no desenvolvimento de Smart Contracts
André Ferreira
 
05 ordem execucaoregrase-formulas-cursogxxbr
05 ordem execucaoregrase-formulas-cursogxxbr05 ordem execucaoregrase-formulas-cursogxxbr
05 ordem execucaoregrase-formulas-cursogxxbr
Cristiano Rafael Steffens
 
1º manual-do-sap-pm
1º manual-do-sap-pm1º manual-do-sap-pm
1º manual-do-sap-pm
Ricardo Giori França
 
Monolith - An epic journey
Monolith - An epic journeyMonolith - An epic journey
Monolith - An epic journey
Fabricio Goncalves
 
Automação ind 2_2014
Automação ind 2_2014Automação ind 2_2014
Automação ind 2_2014
Marcio Oliani
 
Control-M 6.4 Infrastructure
Control-M 6.4 InfrastructureControl-M 6.4 Infrastructure
Control-M 6.4 Infrastructure
Ohio University
 
S.o aula 3334
S.o aula 3334S.o aula 3334
S.o aula 3334
Armando Rivarola
 
Tratamento de transacao
Tratamento de transacaoTratamento de transacao
Tratamento de transacao
Evandro Polese
 
Workshop Datasul 11
Workshop Datasul 11Workshop Datasul 11
Workshop Datasul 11
Fabio Pimenta
 
ManualBPMN.pdf
ManualBPMN.pdfManualBPMN.pdf
ManualBPMN.pdf
Eduardo Antunes
 
Regiões críticas dos Sistemas Operacionais
Regiões críticas dos Sistemas OperacionaisRegiões críticas dos Sistemas Operacionais
Regiões críticas dos Sistemas Operacionais
Abadia Cardoso
 
Testes de carga com j meter
Testes de carga com j meterTestes de carga com j meter
Testes de carga com j meter
Francisco Humberto
 
Mvc delphi
Mvc delphiMvc delphi
Curso suporte nivel basico - quais as diferenças entre servidor, pdv e reta...
Curso suporte   nivel basico - quais as diferenças entre servidor, pdv e reta...Curso suporte   nivel basico - quais as diferenças entre servidor, pdv e reta...
Curso suporte nivel basico - quais as diferenças entre servidor, pdv e reta...
Lourival Domingues Junior
 
Oracleplsql
OracleplsqlOracleplsql
Oracleplsql
Glauco Moraes
 
Parte1c
Parte1cParte1c
Javascript manual
Javascript manualJavascript manual
Javascript manual
TrioBlack Trioblack
 

Semelhante a 06 it-curso gxxbr (20)

12 db atualizacao-curso-gxxbr
12 db atualizacao-curso-gxxbr12 db atualizacao-curso-gxxbr
12 db atualizacao-curso-gxxbr
 
000047 como fazer totvs - v 4.0.0 - entenda o rm conversor de classis para ...
000047   como fazer totvs - v 4.0.0 - entenda o rm conversor de classis para ...000047   como fazer totvs - v 4.0.0 - entenda o rm conversor de classis para ...
000047 como fazer totvs - v 4.0.0 - entenda o rm conversor de classis para ...
 
Gerência de Transações Distribuídas de Consultas
Gerência de Transações Distribuídas de ConsultasGerência de Transações Distribuídas de Consultas
Gerência de Transações Distribuídas de Consultas
 
TDC 2018 - Boas práticas no desenvolvimento de Smart Contracts
TDC 2018 - Boas práticas no desenvolvimento de Smart ContractsTDC 2018 - Boas práticas no desenvolvimento de Smart Contracts
TDC 2018 - Boas práticas no desenvolvimento de Smart Contracts
 
05 ordem execucaoregrase-formulas-cursogxxbr
05 ordem execucaoregrase-formulas-cursogxxbr05 ordem execucaoregrase-formulas-cursogxxbr
05 ordem execucaoregrase-formulas-cursogxxbr
 
1º manual-do-sap-pm
1º manual-do-sap-pm1º manual-do-sap-pm
1º manual-do-sap-pm
 
Monolith - An epic journey
Monolith - An epic journeyMonolith - An epic journey
Monolith - An epic journey
 
Automação ind 2_2014
Automação ind 2_2014Automação ind 2_2014
Automação ind 2_2014
 
Control-M 6.4 Infrastructure
Control-M 6.4 InfrastructureControl-M 6.4 Infrastructure
Control-M 6.4 Infrastructure
 
S.o aula 3334
S.o aula 3334S.o aula 3334
S.o aula 3334
 
Tratamento de transacao
Tratamento de transacaoTratamento de transacao
Tratamento de transacao
 
Workshop Datasul 11
Workshop Datasul 11Workshop Datasul 11
Workshop Datasul 11
 
ManualBPMN.pdf
ManualBPMN.pdfManualBPMN.pdf
ManualBPMN.pdf
 
Regiões críticas dos Sistemas Operacionais
Regiões críticas dos Sistemas OperacionaisRegiões críticas dos Sistemas Operacionais
Regiões críticas dos Sistemas Operacionais
 
Testes de carga com j meter
Testes de carga com j meterTestes de carga com j meter
Testes de carga com j meter
 
Mvc delphi
Mvc delphiMvc delphi
Mvc delphi
 
Curso suporte nivel basico - quais as diferenças entre servidor, pdv e reta...
Curso suporte   nivel basico - quais as diferenças entre servidor, pdv e reta...Curso suporte   nivel basico - quais as diferenças entre servidor, pdv e reta...
Curso suporte nivel basico - quais as diferenças entre servidor, pdv e reta...
 
Oracleplsql
OracleplsqlOracleplsql
Oracleplsql
 
Parte1c
Parte1cParte1c
Parte1c
 
Javascript manual
Javascript manualJavascript manual
Javascript manual
 

Mais de Cristiano Rafael Steffens

CONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and video
CONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and videoCONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and video
CONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and video
Cristiano Rafael Steffens
 
A pipelined approach to deal with image distortion in computer vision - BRACI...
A pipelined approach to deal with image distortion in computer vision - BRACI...A pipelined approach to deal with image distortion in computer vision - BRACI...
A pipelined approach to deal with image distortion in computer vision - BRACI...
Cristiano Rafael Steffens
 
A CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGES
A CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGESA CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGES
A CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGES
Cristiano Rafael Steffens
 
Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...
Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...
Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...
Cristiano Rafael Steffens
 
MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...
MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...
MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...
Cristiano Rafael Steffens
 
UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...
UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...
UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...
Cristiano Rafael Steffens
 
FPGA-based sensor integration and communication protocols for automated
FPGA-based sensor integration and communication protocols for automatedFPGA-based sensor integration and communication protocols for automated
FPGA-based sensor integration and communication protocols for automated
Cristiano Rafael Steffens
 
Lars 2016 A Texture Driven Approach for Visible Spectrum Fire Detection
Lars 2016 A Texture Driven Approach for Visible Spectrum Fire DetectionLars 2016 A Texture Driven Approach for Visible Spectrum Fire Detection
Lars 2016 A Texture Driven Approach for Visible Spectrum Fire Detection
Cristiano Rafael Steffens
 
Php Math and arrays
Php Math and arraysPhp Math and arrays
Php Math and arrays
Cristiano Rafael Steffens
 
ICRA 2016 - Interactive section Presentation
ICRA 2016 - Interactive section PresentationICRA 2016 - Interactive section Presentation
ICRA 2016 - Interactive section Presentation
Cristiano Rafael Steffens
 
Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...
Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...
Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...
Cristiano Rafael Steffens
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)
Cristiano Rafael Steffens
 
Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...
Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...
Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...
Cristiano Rafael Steffens
 
Automated control module based on VBM for shipyard welding applications: Stud...
Automated control module based on VBM for shipyard welding applications: Stud...Automated control module based on VBM for shipyard welding applications: Stud...
Automated control module based on VBM for shipyard welding applications: Stud...
Cristiano Rafael Steffens
 
An Unconstrained Dataset for Non-stationary Video Based Fire Detection
An Unconstrained Dataset for Non-stationary Video Based Fire DetectionAn Unconstrained Dataset for Non-stationary Video Based Fire Detection
An Unconstrained Dataset for Non-stationary Video Based Fire Detection
Cristiano Rafael Steffens
 
Introdução ao processamento de imagens com OpenCV (cont)
Introdução ao processamento de imagens com OpenCV (cont)Introdução ao processamento de imagens com OpenCV (cont)
Introdução ao processamento de imagens com OpenCV (cont)
Cristiano Rafael Steffens
 
Introdução OpenCV (Pt-Br) com exemplos
Introdução OpenCV (Pt-Br) com exemplosIntrodução OpenCV (Pt-Br) com exemplos
Introdução OpenCV (Pt-Br) com exemplos
Cristiano Rafael Steffens
 
Um Sistema De Detecção De Fogo Baseado Em Vídeo
Um Sistema De Detecção De Fogo Baseado Em VídeoUm Sistema De Detecção De Fogo Baseado Em Vídeo
Um Sistema De Detecção De Fogo Baseado Em Vídeo
Cristiano Rafael Steffens
 
Um sistema de detecção de chamas utilizando RF e SVM (Short Version)
Um sistema de detecção de chamas utilizando RF e SVM (Short Version)Um sistema de detecção de chamas utilizando RF e SVM (Short Version)
Um sistema de detecção de chamas utilizando RF e SVM (Short Version)
Cristiano Rafael Steffens
 
G xserver curso-actualizgxxev1
G xserver curso-actualizgxxev1G xserver curso-actualizgxxev1
G xserver curso-actualizgxxev1
Cristiano Rafael Steffens
 

Mais de Cristiano Rafael Steffens (20)

CONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and video
CONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and videoCONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and video
CONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and video
 
A pipelined approach to deal with image distortion in computer vision - BRACI...
A pipelined approach to deal with image distortion in computer vision - BRACI...A pipelined approach to deal with image distortion in computer vision - BRACI...
A pipelined approach to deal with image distortion in computer vision - BRACI...
 
A CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGES
A CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGESA CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGES
A CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGES
 
Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...
Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...
Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...
 
MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...
MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...
MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...
 
UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...
UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...
UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...
 
FPGA-based sensor integration and communication protocols for automated
FPGA-based sensor integration and communication protocols for automatedFPGA-based sensor integration and communication protocols for automated
FPGA-based sensor integration and communication protocols for automated
 
Lars 2016 A Texture Driven Approach for Visible Spectrum Fire Detection
Lars 2016 A Texture Driven Approach for Visible Spectrum Fire DetectionLars 2016 A Texture Driven Approach for Visible Spectrum Fire Detection
Lars 2016 A Texture Driven Approach for Visible Spectrum Fire Detection
 
Php Math and arrays
Php Math and arraysPhp Math and arrays
Php Math and arrays
 
ICRA 2016 - Interactive section Presentation
ICRA 2016 - Interactive section PresentationICRA 2016 - Interactive section Presentation
ICRA 2016 - Interactive section Presentation
 
Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...
Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...
Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)
 
Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...
Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...
Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...
 
Automated control module based on VBM for shipyard welding applications: Stud...
Automated control module based on VBM for shipyard welding applications: Stud...Automated control module based on VBM for shipyard welding applications: Stud...
Automated control module based on VBM for shipyard welding applications: Stud...
 
An Unconstrained Dataset for Non-stationary Video Based Fire Detection
An Unconstrained Dataset for Non-stationary Video Based Fire DetectionAn Unconstrained Dataset for Non-stationary Video Based Fire Detection
An Unconstrained Dataset for Non-stationary Video Based Fire Detection
 
Introdução ao processamento de imagens com OpenCV (cont)
Introdução ao processamento de imagens com OpenCV (cont)Introdução ao processamento de imagens com OpenCV (cont)
Introdução ao processamento de imagens com OpenCV (cont)
 
Introdução OpenCV (Pt-Br) com exemplos
Introdução OpenCV (Pt-Br) com exemplosIntrodução OpenCV (Pt-Br) com exemplos
Introdução OpenCV (Pt-Br) com exemplos
 
Um Sistema De Detecção De Fogo Baseado Em Vídeo
Um Sistema De Detecção De Fogo Baseado Em VídeoUm Sistema De Detecção De Fogo Baseado Em Vídeo
Um Sistema De Detecção De Fogo Baseado Em Vídeo
 
Um sistema de detecção de chamas utilizando RF e SVM (Short Version)
Um sistema de detecção de chamas utilizando RF e SVM (Short Version)Um sistema de detecção de chamas utilizando RF e SVM (Short Version)
Um sistema de detecção de chamas utilizando RF e SVM (Short Version)
 
G xserver curso-actualizgxxev1
G xserver curso-actualizgxxev1G xserver curso-actualizgxxev1
G xserver curso-actualizgxxev1
 

06 it-curso gxxbr

  • 2. Muitos administradores de bases de dados (DBMSs) contam com sistemas de recuperação anti- falhas, que permitem deixar a base de dados em estado consistente quando ocorrem imprevistos tais como apagões ou quedas do sistema.
  • 3. Os administradores de bases de dados (DBMSs) que oferecem integridade transacional, permitem estabelecer Unidades Lógicas de Trabalho (UTLs), que são, nem mais nem menos, que o conceito de transações de base de dados.
  • 4. Efetuar COMMIT em uma base de dados, significa finalizar uma Unidade Lógica de Trabalho (UTL).
  • 6. É importante comentar que o GeneXus inclui a sentença COMMIT nos programas gerados associados a transações e procedimentos, somente em ambientes de trabalho Cliente/Servidor (incluindo, portanto, os ambientes Web). O motivo disto é que em ambientes Cliente/Servidor, temos um DBMS que assegura a integridade transacional, portanto o GeneXus efetua a tarefa de definir as Unidades Lógicas de Trabalho (UTLs). Onde o GeneXus inclui COMMIT exatamente? Em cada procedimento: ao final do programa fonte. Em cada Transação: imediatamente antes das regras com evento de disparo AfterComplete. Para cada interação completa que for efetuada em tempo de execução por meio da transação, haverá um COMMIT, antes das regras com evento de disparo AfterComplete. Nota: o novo tipo de dados Business Component que estaremos vendo depois permite atualizar a base de dados desde qualquer objeto GeneXus, mas será visto que não realiza automaticamente um COMMIT.
  • 7. GeneXus oferece uma Propriedade para cada objeto transação e procedimento, para definir se deseja que seu programa gerado efetue ou não o COMMIT. O nome da Propriedade é Commit on Exit e seu valor por default é Yes (por isso, toda transação e procedimento por default efetua COMMIT). Se desejamos que certa transação ou procedimento não tenha COMMIT no programa gerado, alterar o valor da Propriedade Commit on Exit para No.
  • 8. Por que motivo pode-se querer que não seja realizado COMMIT em uma Transação ou Procedimento? Para personalizar uma Unidade Lógica de Trabalho (UTL). Isto é, podemos precisar ampliar uma Unidade de Trabalho Lógica (UTL), para que várias transações1 e/ou procedimentos, estejam em uma única Unidade de Trabalho Lógica (UTL). Exemplo (mostrado acima): A Transação “X” chama um Procedimento “Y”, e deseja-se que ambos objetos estejam em única UTL. A Transação atualiza certos registros, e o procedimento outros, e se deseja que esse conjunto total de operações, consista em uma única UTL (para assegurarmos que se ocorrer alguma falha, seja realizado todo o conjunto de atualizações ou nada na da base de dados). Para isto, podemos eliminar o COMMIT do procedimento, e deixar que seja realizado na Transação (ao retornar do procedimento para a Transação, para que seja executado ao final de todas as operações); temos que configurar a propriedade Commit on Exit do procedimento com valor: No e deixar a propriedade Commit on Exit da Transação com o valor por default: Yes. Mas além disso, é fundamental que a chamada ao procedimento seja realizada antes que se execute o COMMIT na transação (já que a idéia é que ambos os objetos tenham uma única UTL, e para ele o COMMIT deve efetuar na transação ao retornar do procedimento); assim que a chamada ao procedimento definir na Transação com um evento de disparo que ocorra antes da execução do COMMIT (dependendo se a transação tiver um nível ou mais, e dos requerimentos, poderia ser AfterInsert por exemplo, AfterUpdate, ou AfterLevel Level Atributo do 2do nível, ou BeforeComplete mas não AfterCompete). Não existe uma única solução para personalizar uma UTL. O fundamental é analisar qual objeto pode fazer COMMIT (podendo haver mais de uma possibilidade) e uma vez que se decida qual objeto efetuará COMMIT, as chamadas que se requerem fazer, deverão ser efetuadas em momentos adequados, considerando se já executou o COMMIT ou não. ________________________________________________________________________________ ¹ Em ambiente Web existe uma restrição importante: se uma transação chamar outra transação, o Commit realizada por uma não aplica sobre os registros ingressados/modificados/eliminados pela outra. Isto é, o Commit de cada transação contém somente “visibilidade” sobre os registros operados por essa transação, e não por outra, onde duas transações diferentes não podem ficar em uma mesma UTL. Não poderá realizar-se personalização neste caso.
  • 9. Por Exemplo, para que a transação e procedimento vistos conformem uma única UTL, poderíamos ter optado também pela alternativa de que não efetue COMMIT na transação (Commit on Exit = No), mas sim que seja realizado pelo procedimento ao final de tudo; fazer dessa forma, não seria um erro - como o é na solução anterior - chamar ao procedimento utilizando o evento de disparo AfterComplete, o COMMIT não será realizado na transação, mas no procedimento. Concluindo, precisamos decidir qual objeto fará COMMIT e que as chamadas necessárias sejam feitas em momentos adequados, para que a UTL personalizada fique bem definida. Outro Exemplo: A transação “Invoice“ estudada até o momento, em um modelo de Protótipo cliente/servidor. Caso não modificarmos o valor predeterminado da propriedade Commit on Exit. E o usuário executa a transação, inserindo a fatura 1 e todas as suas linhas. Depois insere a fatura 2 e quando inserir a 3era. Linha da mesma ocorre um apagão. Quando a energia volta e reinicializa a execução, quais os registros que ficaram gravados na tabela e quais foram perdidos? A fatura 1 inteira estará gravada (cabeçalho e suas linhas). Por quê? Porque ao terminar de inserir e passar a inserir a fatura 2, foi efetuado um commit. A fatura 2 com os registros que gravou até o momento que faltou energia, foi perdido. Por quê? Porque a transação realiza o rollback de tudo que foi efetuado depois do último commit. O cabeçalho da fatura 2 e as suas linhas informadas não estavam ainda “commitadas”. Observar então que o commit não é pela transação inteira (ou seja, todas as interações do cabeçalho e suas linhas) e sim por cada instancia do cabeçalho e linhas. Se o commit acontece uma única vez antes da transação ser fechada, então se tivesse sido ingressados 29 faturas e o sistema caísse na trigésima, todas as 29 faturas anteriores (todo o processo seria desfeito, já que ainda não foi realizado o commit). Isto não é assim, quando ocorre a queda do sistema na trigésima fatura informada, ficaram gravadas as 29 anteriores (só não foi à trigésima).
  • 10. Em ambiente Web os registros “visíveis” para ser commitados por uma transação são os atualizados pela própria transação, e pela própria transação, e pelos procedimentos que esta chame antes do seu Commit, porém não os de outra transação. Cada transação trabalha com diferentes UTLs. É por este motivo que no primeiro exemplo acima apresentado, onde a transação “X” chama a transação “Y” logo de ter inserido um registro, embora a transação “Y” realize um Commit ao final do cabeçalho e linha são ingressadas, este Commit não valerá sobre o registro que teria sido ingressado previamente pela transação “X”. Este registro ficará “perdido”, sem Commit. Internet trabalha de forma diferente, as transações Web “vivem” somente o tempo em que o usuário de um navegador seleciona o link ou pressiona um botão e a nova página é mostrada. Toda modificação da base de dados que se faça durante a “vida” da transação deve ser confirmada ou eliminada antes que a transação Web finalize sua execução e retorne à página resultante. Como conseqüência, uma transação Web inicia uma UTL (Unidade Lógica de Trabalho) ao começar a executar e fecha-a (seja por COMMIT ou ROLLBACK) antes de terminar. Não pode formar parte de outra UTL. Se um programa chama uma transação Web, esta iniciará outra (nova) UTL. Não acontece isso com os procedimentos. No segundo exemplo mostrado acima, vemos que podemos formar uma UTL que envolva à transação “Y” e ao procedimento “Z”...com tudo não podemos incluir a transação “X” na mesma UTL.
  • 11. Caso seja necessário que as operações de duas ou mais transações (com ou sem procedimentos incluídos) estejam em uma mesma UTL, pode-se usar as transações com Web Panels e Business Components; e utilizar o comando Commit. Aqui simplesmente vamos deixar o tema sinalizado, voltaremos nele após estudar Business Components, onde vamos compreender esta solução.