Escolar Documentos
Profissional Documentos
Cultura Documentos
Transaes em Aplicaes
Corporativas com Java EE
@TransactionAttribute(REQUIRED)
public void secondMethod() {...}
ISOLAMENTO
Isolamento e Bloqueio de
Banco de Dados
O Isolamento de transao uma das partes
fundamentais de um sistema de controle de
transaes
Acesso simultneo aos mesmos dados
Condies a prevenir com o isolamento:
Leitura suja
Leituras repetveis
Leituras fantasmas
Leituras Sujas
Ocorre quando uma transao l as alteraes
no-confirmadas feitas por uma transao
anterior
Se a primeira transao for revertida, a leitura dos
dados pela segunda transao fica invlida no
h como a segunda transao ficar sabendo
Leituras Repetveis
Ocorre quando h garantias de que a leitura
dos dados seja a mesma se for feita uma nova
leitura durante a mesma transao
Ou os dados lidos esto bloqueados contra
alteraes
Ou se forem um instantneo que no reflete as
alteraes
Leituras Fantasmas
Ocorre quando novos registros adicionados ao
banco de dados podem detectados por
transaes que iniciaram antes da insero
As consultas incluiro registros adicionados por
outras transaes posteriores que a referida
transao iniciou
Bloqueios de Banco de Dados
Tipos de bloqueio:
De leitura
De gravao
De gravao exclusivos
Instantneos
Bloqueio de Leitura
Evitam que outras transaes de dados os
modifiquem durante uma transao at que
essa terminar
Outras transaes podem ler os dados, mas
no grav-los
A transao atual tambm no pode fazer
alteraes
Boqueio de registro ou tabela depende do BD
Bloqueio de Gravao
So utilizados para atualizaes
Impede que outras transaes alterem os
dados at a transao atual estar completa
Permite leituras sujas
Bloqueio de Gravao Exclusivo
Tambm so utilizados para atualizaes
Impede que outras transaes leiam ou
alterem os dados at que a transao atual
estar completa
Evita leituras sujas
Alguns bancos no permitem que transaes
leiam os seus prprios dados enquanto esto
bloqueados exclusivamente
Bloqueio Instantneo
Gera uma visualizao congelada dos dados
que tirada quando uma transao iniciada
Alguns bancos evitam o bloqueio fornecendo a
cada transao seu prprio instatneo
O problema que os dados no so em tempo
real, so antigos
Nveis de Isolamento de Transao
Nveis de isolamento so utilizados para
descrever como o bloqueio aplicado aos
dados dentro de uma transao
Leitura no-confirmada
Leitura confirmada
Leitura repetvel
Serializvel
Leitura No-Confirmada
A transao pode ler dados no-confirmados
(dados modificados por uma transao
diferente que ainda no acabou)
Mtodos de beans com esse nvel de
isolamento podem ler dados no-confirmados
Leitura Confirmada
A transao no pode ler dados no-
confirmados
No evita leituras no-repetveis e leituras
fantasmas
Mtodos de beans com esse nvel de
isolamento no podem ler dados no-
confirmados
Leitura Repetvel
A transao no pode alterar os dados que
esto sendo lidos por uma transao diferente
Podem ocorrer leituras fantasmas
Mtodos de beans com esse nvel de
isolamento tem as mesmas restries
daqueles no nvel leitura confirmada
Serializvel
A transao tem privilgios de leitura exclusiva
e de atualizao
Controlando os Nveis de Isolamento
Pode ser definido pelo desenvolvedor e
aplicado pelo servidor EJB
Exemplo:
@Resource(lookup=java:comp/env/oBd)
DataSource ds;
conn.setTransactionIsolation(
Connection.TRANSACTION_SERIALIZABLE);
Bloqueio Otimista
No bloqueia no sentido transacional
Assume-se que no vai haver acessos a dados
de forma simultnea
Recurso de versionamento do JPA
@Entity
public class Exemplo {
private long version;
...
@Version
protected long getVersion() { return version;}
}
Bloqueio Otimista
A alterao dos dados da entidade s poder
acontecer se a verso da entidade que est
sendo trabalhada na memria for igual a do
armazenamento persistente
Bloqueio Programtico
O gerenciador de entidades EntityManager
possui o mtodo lock para realizar o
bloqueio de entidades
void lock(Object entity, LockModeType type);
LockModeType.READ
LockModeType.WRITE
Gerenciamento Explcito de Transao
O gerenciamento explcito de transaes
realizado utilizando o Object Transaction
Service (OTS) da OMG
Ou a sua implementao Java o Java
Transaction Service (JTS)
Os EJBs suportam uma API mais simples, a Java
Transaction API (JTA)