Você está na página 1de 46

Instituto Federal de Educao, Cincia e Tecnologia do Rio Grande do Norte

Diretoria Acadmica de Gesto e Tecnologia da Informao


Curso de Tecnologia em Anlise e Desenvolvimento de Sistemas

Transaes em Aplicaes
Corporativas com Java EE

Prof. Fellipe Aleixo (fellipe.aleixo@ifrn.edu.br)


Transaes
Necessrias para a implementao de
funcionalidades crticas, para as quais se
deseja: confiabilidade e integridade dos dados
Exemplos:
Banco: depsito, saque, transferncia, etc.
Livraria on-line: compra de livros
Sistema mdico: gerenciamento de consultas,
procedimentos, tratamentos e medicamentos
Composta por uma ou mais tarefas individuais
Transaes
Exemplo de transao: efetuar transferncia
1. identificao das contas: origem e destino
2. verificao do saldo
3. saque na conta de origem
4. depsito da conta de destino
5. registrar a movimentao nas duas contas
Transaes so ACID
Atmica
Executa tudo ou nada
Consistente
Integridade no armazenamento de dados
Isolada
Permisso para executar sem interferncias
Durvel
Alteraes nos dados de forma persistente
JTA Java Transaction API
Define a interface UserTransaction
Recuperam do JNDI (java:comp/UserTransaction)
Aplicaes utilizam as funcionalidades: start,
commit e roll back; exemplo (pseudocdigo):
begin transaction
debit checking account
credit savings account
update history log
commit transaction
Transaes Gerenciadas pelo
Continer
uma das principais vantagens dos EJBs
No necessria uma demarcao explcita no
cdigo, nem fazer uso de uma API especfica
O gerenciamento declarativo de transao,
pode ser definido:
Atravs de anotaes
@javax.ejb.TransactionAttribute
(ou) Atravs do descritor de implantao EJB
Transaes Gerenciadas pelo
Continer
O comportamento transacional de um EJB
pode ser alterado em alterar a lgica do
negcio do EJB
Reduz a complexidade das transaes para os
desenvolvedores
Torna mais fcil a criao de aplicativos
transacionais robustos
Escopo de Transao
Refere-se aos EJBs (sessions e MDBs) que esto
participando de uma transao
Iniciado o escopo de transao, ele
propagado para os envolvidos (EJBs, servio de
mensagens e gerenciador de entidades)
Em se tratando de EJBs, as tarefas especficas
consistem de cada mtodo de um EJB
invocado em uma transao
Escopo de Transao
Participam do escopo de transao todos os
EJBs que participam da unidade de trabalho
Rastreamento do escopo:
A execuo de um mtodo inicia uma transao
A transao propagada para um EJB se este tem
um dos seus mtodos invocados
O mesmo acontece aos servios transacionais,
incluindo o contexto de persistncia
Atributos de Transao
Utilizando EJBs a transao no precisa ser
controlada explicitamente
A gerencia de transaes acontece de forma
implcita com base nos atributos de transao
Required, RequiresNew, Mandatory,
NotSupported, Supports, e Never
Um atributo pode ser configurado para um EJB
inteiro ou para mtodos individuais
Atributos de Transao
Atributos de Transao
Exemplo:
@TransactionAttribute(NOT_SUPPORTED)
@Stateful
public class TransactionBean {
...
@TransactionAttribute(REQUIRES_NEW)
public void firstMethod() {...}

@TransactionAttribute(REQUIRED)
public void secondMethod() {...}

public void thirdMethod() {...}

public void fourthMethod() {...}


}
Atributos de Transao
Nesse EJB exemplo:
O atributo de transao padro ser
NOT_SUPPORTED
O padro sobrescrito com a aplicao do
atributo REQUIRED e REQUIRES_NEW mtodos
especficos
Caso no seja especificado um atributo de
transao e no houver um descritor de
implantao o padro ser REQUIRED
Configurao de Transao no
Descritor de Implantao
<ejb-jar ...>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>ExemploBean</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>NotSupported</trans-attribute>
</container-transaction>
<container-transaction>
<method>
<ejb-name>ExemploBean</ejb-name>
<method-name>metodoTransacional</method-
name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
Atributo Required
O mtodo do EJB deve
ser invocado de dentro
de um contexto de
transao
Se o cliente no estiver
em uma transao
iniciada uma prpria
Atributo RequiresNew
Uma nova transao
sempre iniciada quando
um mtodo do EJB
invocado
Se o cliente estiver em
uma transao, esta
suspensa at a
concluso do mtodo
Atributo Mandatory
Indica que o mtodo do
EJB sempre deve ser
parte do escopo de
transao
Se o cliente no fizer
parte de uma transao
lana exceo de
transao
Atributo NotSupported
Ao invocar um mtodo
de um EJB com este
atributo a transao
suspensa at o mtodo
completar
Atributo Supports
Esse atributo significa
que o mtodo do EJB
ser includo no escopo
de transao se for
invocado dentro de
uma transao
Propaga a transao
Atributo Never
Significa que o mtodo
do EJB nunca deve ser
invocado dentro do
escopo de transao
Se for invocado de
dentro de uma
transao lana uma
exceo EJB
Atributos de Persistncia e de
Transao
A especificao EJB recomenda que o
EntityManager seja acessado dentro do
escopo de uma transao
Em caso de encapsular o acesso s entidades
persistentes com EJB, utilize apenas:
Required, RequiresNew e Mandatory
Beans Orientados a Mensagens e
Atributos de Transao
Beans orientados mensagens s podem
declarar os atributos NotSupported ou
RequiresNew
Os demais atributos no fazem sentido para
um bean orientado mensagem pois este
desacoplado do cliente
Papel do Servidor EJB
Como um monitor de transao, um servidor
EJB observa cada chamada de mtodo na
transao
Se uma das atualizaes falhar, todas as
atualizaes para todos EJBs e entidades so
revertidas (rollback)
Sem falhas, as atualizaes so confirmadas
atualizao permanente (commit)
Roll Back em uma Transao
Gerenciada pelo
Duas formas de ser realizado
Se uma exceo for lanada
Invocando o mtodo setRollbackOnly da interface
EJBContext
Sincronizando as Variveis de Instncia
de um Bean de Sesso
A interface SessionSynchronization opcional
Permite a instncias um bean de sesso receber
notificaes de transaes
Mtodos: afterBegin, beforeCompletion e
afterCompletion
No Permitidos nas Transaes
Gerenciadas pelo Continer
Mtodos proibidos:
Os mtodos commit, setAutoCommit e rollback de
java.sql.Connection
O mtodo getUserTransaction de
javax.ejb.EJBContext
Qualquer mtodo de
javax.transaction.UserTransaction
Garantias de

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;

Connection conn = ds.getConnection();

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)

Você também pode gostar