| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/07/2006 15:25:55
|
Sérgio Paulo
Thread.start()
Membro desde: 27/02/2005 20:58:10
Mensagens: 32
Offline
|
Pessoal estou aprendendo j2ee e tenho uma duvida com relação ao controle de trasação.
Imagine que vc tem um EJB1 que chama um DAO para realizar um insert em uma tbl e esse DAO usa o data source e commita a operação. Um outro EJB2 tem o mesmo comportamento. Se eu invocar um metodo do EJB3 que chama um metodo do EJB1 e EJB2, o controle de transação fica garantido? Se o metodo do EJB2 falhar as alterações feitas pelo EJB1 serão desfeitas?
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/07/2006 16:00:17
|
gianbala
Smalltalk
Membro desde: 03/05/2006 18:46:08
Mensagens: 3
Localização: Mato Grosso - Brasil
Offline
|
tente fazer o commit no EJB3
eu tava justamente com esse problema ontem mas não estava usando o EJB então fiz o commit/rollbak pela camada facade, ou seja antes da DAO.
Não sei se t ajudei ?
|
Gian - :> |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/07/2006 16:33:44
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
Deixa eu ver se entendi:
Você tem a sequência de fluxo:
EJB1 -> EJB2 -> EJB3
E quer saber se EJB2 falhar as modificações em EJB1 serão desfeitas.
Depende de como está organizada sua transação. Se você configurou seus EJBs para atuarem numa única transação (atributo Required, por exemplo), sim, se não o EJB2 pode executar uma transação paralela e independente.
Normalmente se usa 'required', então geralmente este rollback é feito.
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/07/2006 11:22:13
|
Sérgio Paulo
Thread.start()
Membro desde: 27/02/2005 20:58:10
Mensagens: 32
Offline
|
Eu coloquei como required, mas mesmo assim a transação não fica garantida. Acho que talvez a forma com que o DAO esta escrito está errada pois cada DAO recupera uma conexão do data source e faz um commit independente. Se isso for verdade onde deveria estar o connection.commit?
Só pra esclarecer um pouco a estrutura é assim:
[code]
public class ejb3{
op(){
ejb1.op();
ejb2.op();
op();
}
}
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/07/2006 13:37:12
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
Não faça commit manual. Após serem executados os métodos o container faz o commit.
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/07/2006 14:37:50
|
Fabricio Cozer Martins
GUJ Ranger
![[Avatar]](/images/avatar/2ecd2bd94734e5dd392d8678bc64cdab.jpg)
Membro desde: 08/05/2004 10:22:03
Mensagens: 935
Localização: Salvador/Brasil
Offline
|
Sérgio Paulo wrote:
[code]
public class ejb3{
op(){
ejb1.op();
ejb2.op();
op();
}
}
recursivo ?
Bem, existem algumas diretivas quanto a utilização de transação no EJB, como foi citado pelo Phillip, além da Required, exite ainda RequiresNew sempre abre uma nova transação, suspendendo alguma que já existe), NotSupported (não exige transação nenhuma, executa no contexto não transacional ), Supports, Mandatory, e Never.
Me diz uma coisa, quais são os tipos de EJB ? Entity, Session ?
Pq vc pode criar um Session Façade , que determina a sequencia de operações são executadas, não gosto muito desse tipo de implementação, mas é uma saída, aí nesse Session você controla a transação, caso dê alguma exceção você dá um rollback, dessa forma deixe o tipo como Required, funciona blza!
|
Fabrício Cozer Martins
Analista de Sistemas
Bacharel em Ciência da Computação da UFBa
Sun Certified Programmer for Java 2 Platform 1.4
Sun Certified Web Component Developer for J2EE 1.4 |
|
|
 |
|
|