| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/10/2009 10:11:10
|
Claudio Nazzari
Debugger
![[Avatar]](/images/avatar/17834a259d3d4f21a1d6f100b015ec93.jpg)
Membro desde: 18/07/2006 09:59:56
Mensagens: 57
Offline
|
Opa!
Criei um sistema com Spring, Hibernate e JSF. Porem nao estou conseguindo criar Transactions nos meus metodos de negocio. O Sistema funciona perfeitamente, mas o controle de transação aparentemente nao existe.
Gostaria que todas as minhas classes de negocio faça o commit apenas no retorno do metodo e faça rollback quando lança Exception, algo similar com o controle de transação do EJB Session. Meu codigo é o seguinte:
ClientBusiness.java
ClientBusinessImpl.java
applicationContext.xml
Dessa forma configurada não funciona de geito nenhum !
Alguem pode me ajudar?
Obrigado !
This message was edited 2 times. Last update was at 15/10/2009 11:10:40
|
-------------------------
Claudio Nazzari
clanazzari@gmail.com
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/10/2009 16:38:16
|
maschiojv
JavaChild
![[Avatar]](/images/avatar/9952cb25b58c5f4832396abf2bcfd66d.jpg)
Membro desde: 27/02/2007 18:29:37
Mensagens: 119
Offline
|
Não tenho certeza, mas acho que anotações não são extensíveis, ou seja, a anotação @Transactional no caso só é aplicada para ClientBusiness e nao para ClientBusinessImpl.
tente colocar no ClientBusinessImpl e ver se rosolve
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2009 09:44:50
|
Claudio Nazzari
Debugger
![[Avatar]](/images/avatar/17834a259d3d4f21a1d6f100b015ec93.jpg)
Membro desde: 18/07/2006 09:59:56
Mensagens: 57
Offline
|
maschiojv wrote:Não tenho certeza, mas acho que anotações não são extensíveis, ou seja, a anotação @Transactional no caso só é aplicada para ClientBusiness e nao para ClientBusinessImpl.
tente colocar no ClientBusinessImpl e ver se rosolve
Coloquei mas o problema continua...
É como se nao existise nenhuma transação nos metodos, ja tentei colocar @Transactional nos metodos mas tambem nao funciona.
|
-------------------------
Claudio Nazzari
clanazzari@gmail.com
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2009 10:06:46
|
jgbt
GUJ Master
![[Avatar]](/images/avatar/25df35de87aa441b88f22a6c2a830a17.png)
Membro desde: 04/06/2003 15:01:48
Mensagens: 1286
Localização: Porto Alegre/RS
Offline
|
Pergunta:
O seu banco suporta transações?
[]´s
|
João Bier
Desenvolvedor Java |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2009 10:09:10
|
legionarioba
JavaTeenager
![[Avatar]](/images/avatar/d58072be2820e8682c0a27c0518e805e.jpg)
Membro desde: 24/03/2003 00:40:42
Mensagens: 171
Localização: Salvador
Offline
|
A documentação do Spring sugere o uso da anotação @Transactional nas classes concretas:
Spring recommends that you only annotate concrete classes (and methods of concrete classes)
with the @Transactional annotation, as opposed to annotating interfaces. You certainly
can place the @Transactional annotation on an interface (or an interface method), but
this works only as you would expect it to if you are using interface-based proxies. The fact
that annotations are not inherited means that if you are using class-based proxies
(proxy-target-class="true") or the weaving-based aspect (mode="aspectj"),
then the transaction settings are not recognized by the proxying and weaving infrastructure,
and the object will not be wrapped in a transactional proxy, which would be decidedly bad.
Spring Documentation - Part IV (Data Access) - 10.5 Declarative transaction management - Using @Transactional
Outra coisa, sua classe está no base-package que você definiu no elemento <context:component-scan>?
|
http://silvioluiz.wordpress.com
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2009 10:44:10
|
Claudio Nazzari
Debugger
![[Avatar]](/images/avatar/17834a259d3d4f21a1d6f100b015ec93.jpg)
Membro desde: 18/07/2006 09:59:56
Mensagens: 57
Offline
|
jgbt wrote:Pergunta:
O seu banco suporta transações?
[]´s
Olha, eu acho que sim haha !
Estou usando HSQLDB e Porsgresql e em ambos nao esta funcionando. Busquei na internet e os dois bancos suportam transação.
|
-------------------------
Claudio Nazzari
clanazzari@gmail.com
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2009 10:47:15
|
Claudio Nazzari
Debugger
![[Avatar]](/images/avatar/17834a259d3d4f21a1d6f100b015ec93.jpg)
Membro desde: 18/07/2006 09:59:56
Mensagens: 57
Offline
|
legionarioba wrote:A documentação do Spring sugere o uso da anotação @Transactional nas classes concretas:
Spring recommends that you only annotate concrete classes (and methods of concrete classes)
with the @Transactional annotation, as opposed to annotating interfaces. You certainly
can place the @Transactional annotation on an interface (or an interface method), but
this works only as you would expect it to if you are using interface-based proxies. The fact
that annotations are not inherited means that if you are using class-based proxies
(proxy-target-class="true") or the weaving-based aspect (mode="aspectj"),
then the transaction settings are not recognized by the proxying and weaving infrastructure,
and the object will not be wrapped in a transactional proxy, which would be decidedly bad.
Spring Documentation - Part IV (Data Access) - 10.5 Declarative transaction management - Using @Transactional
Outra coisa, sua classe está no base-package que você definiu no elemento <context:component-scan>?
O component-scan esta correto, ate porque o sistema esta funcionando normalmente. O Problema é que ele esta com "autocommit" nos inserts e nao esta fazendo rollback nas exeptions, ou seja, a transaction esta sendo ingorada. Mesmo com o @Transaction no Impl
|
-------------------------
Claudio Nazzari
clanazzari@gmail.com
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2009 11:51:31
|
legionarioba
JavaTeenager
![[Avatar]](/images/avatar/d58072be2820e8682c0a27c0518e805e.jpg)
Membro desde: 24/03/2003 00:40:42
Mensagens: 171
Localização: Salvador
Offline
|
Auto-commit no banco? Dê uma olhada no log, mas que eu lembre, mesmo que seu banco esteja configurado assim, o Transaction Manager do Spring desabilita o mesmo. Se eu conseguir gerar um log te confirmo, mas isso não seria de fato empecilho pra que o rollback seja efetuado... Copie o log gerado pelo Spring pra operação que você está tentando executar pra analisarmos aqui...
|
http://silvioluiz.wordpress.com
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2009 14:31:27
|
Claudio Nazzari
Debugger
![[Avatar]](/images/avatar/17834a259d3d4f21a1d6f100b015ec93.jpg)
Membro desde: 18/07/2006 09:59:56
Mensagens: 57
Offline
|
legionarioba wrote:Auto-commit no banco? Dê uma olhada no log, mas que eu lembre, mesmo que seu banco esteja configurado assim, o Transaction Manager do Spring desabilita o mesmo. Se eu conseguir gerar um log te confirmo, mas isso não seria de fato empecilho pra que o rollback seja efetuado... Copie o log gerado pelo Spring pra operação que você está tentando executar pra analisarmos aqui...
Opa, obrigado pela ajuda.
Na verdade o "autocomit" foi apenas exemplificando. A propriedade do hibernate esta com autocomit = false mesmo...
Aqui estou testando da seguinte maneira:
1- Debugo o codigo logo apos a chamada do metodo "create" e verifico se, antes de retornar o metodo, o registro foi gravado. Neste caso esta gravando antes de retornar.
2- Forço uma exception na minha DAO e lanço como MulunguException, o que deveria fazer o rollback dos registros inseridos, o que tambem nao ocorre.
Obrigado!
|
-------------------------
Claudio Nazzari
clanazzari@gmail.com
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2009 14:34:42
|
Claudio Nazzari
Debugger
![[Avatar]](/images/avatar/17834a259d3d4f21a1d6f100b015ec93.jpg)
Membro desde: 18/07/2006 09:59:56
Mensagens: 57
Offline
|
legionarioba wrote:Auto-commit no banco? Dê uma olhada no log, mas que eu lembre, mesmo que seu banco esteja configurado assim, o Transaction Manager do Spring desabilita o mesmo. Se eu conseguir gerar um log te confirmo, mas isso não seria de fato empecilho pra que o rollback seja efetuado... Copie o log gerado pelo Spring pra operação que você está tentando executar pra analisarmos aqui...
O Log que esta gerando é de sucesso, ele consegue inserir mas não tem como regra comitar apenas no final
|
-------------------------
Claudio Nazzari
clanazzari@gmail.com
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2009 14:47:09
|
legionarioba
JavaTeenager
![[Avatar]](/images/avatar/d58072be2820e8682c0a27c0518e805e.jpg)
Membro desde: 24/03/2003 00:40:42
Mensagens: 171
Localização: Salvador
Offline
|
Esse é o log do Hibernate. Tenta colocar o log do Spring, ele vai mostrar o momento em que a transação está sendo aberta, quando a conexão JDBC é criada, quando acontece commit, rollback etc..deve ajudar..
|
http://silvioluiz.wordpress.com
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2009 15:44:09
|
Claudio Nazzari
Debugger
![[Avatar]](/images/avatar/17834a259d3d4f21a1d6f100b015ec93.jpg)
Membro desde: 18/07/2006 09:59:56
Mensagens: 57
Offline
|
legionarioba wrote:Esse é o log do Hibernate. Tenta colocar o log do Spring, ele vai mostrar o momento em que a transação está sendo aberta, quando a conexão JDBC é criada, quando acontece commit, rollback etc..deve ajudar..
This message was edited 1 time. Last update was at 15/10/2009 15:49:43
|
-------------------------
Claudio Nazzari
clanazzari@gmail.com
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2009 16:41:15
|
legionarioba
JavaTeenager
![[Avatar]](/images/avatar/d58072be2820e8682c0a27c0518e805e.jpg)
Membro desde: 24/03/2003 00:40:42
Mensagens: 171
Localização: Salvador
Offline
|
Claudio Nazzari wrote:
legionarioba wrote:Esse é o log do Hibernate. Tenta colocar o log do Spring, ele vai mostrar o momento em que a transação está sendo aberta, quando a conexão JDBC é criada, quando acontece commit, rollback etc..deve ajudar..
Tente mandar o log no momento em que você invoca a operação que deveria gerar o rollback...
|
http://silvioluiz.wordpress.com
 |
|
|
 |
|
|
|
|