| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/06/2007 03:59:19
|
Maracuja
GUJ Ranger
![[Avatar]](/images/avatar/aceacd5df18526f1d96ee1b9714e95eb.jpg)
Membro desde: 28/03/2006 10:18:44
Mensagens: 940
Localização: Behind the screen
Offline
|
Olá meus jovens amigos, já é tarde e estou com um problema, gostaria de vossas opiniões! ahIUAHuiahIUAHuiahIUAh
Bom, vamos lá estou brincando aqui; construindo um brinquedo com as seguintes camadas Action -> BusinessDelegate -> SessionFacade(EJB3) -> ApplicationService -> BusinessObject -> DAO (JPA)
Porém não estou conseguindo persistir dados com um bean CMT e esta arquitetura.... consigo apenas se estiver persistindo no proprio CMT!!!!
Bean
o AS
ai vem o BO somente efetuando as chamadas e no DAO esta assim
so que no flush recebo um
javax.persistence.TransactionRequiredException: no transaction is in progress
Viram???
Somente estou conseguindo persistir por enquanto da seguinte forma
Outro método do mesmo Bean
poderia fazer o metodo com a anotação @TransactionManagement(TransactionManagementType.CONTAINER)
mas não importa...
Agora vejam o AS como ficou
onde AbstractApplicationService é
e a PersistenceUtil é
no meu dao agora tenho a mesma coisa de antes
pra completar a minha entity
Deu pra entender?
Parece que a transação não é propagada no bean CMT, somente funciona com o BMT, porém assim preciso garantir a Atomicidade da transação na "mão".
Aindo to estudando e brincando com isso, amanhã continua, mas se alguem puder me ajudar... hehehehehehe
Fico grato pela ajuda.
|
"Nunca deixarei de reclamar, mas espero reclamar de coisas melhores a cada dia..." Um amigo muito sabio |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/06/2007 04:52:05
|
Henrik
JavaChild
Membro desde: 26/03/2006 22:06:12
Mensagens: 100
Offline
|
nao posso ajudar, mas voce pode me ajudar
eu ia tirar esse fim de semana pra dar uma olhada exatamente nesses conceitos, se voce pudesser compartilhar este seu projetinho
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/06/2007 12:48:48
|
micheldemontalvao
Debugger
Membro desde: 20/04/2006 10:32:12
Mensagens: 59
Offline
|
Maracuja wrote:
Parece que a transação não é propagada no bean CMT, somente funciona com o BMT, porém assim preciso garantir a Atomicidade da transação na "mão".
Olhando seu código da para perceber que você está controlando a gerência do EntityManager manualmente:
Eu ainda não dei uma olhada profunda na especificação do EJB3, mas acho que não mudou neste aspecto para a especificação do EJB 2.1. Ou seja, se deseja que o Transaction Manager controle toda a transação, tem que garantir que todos os seus provedores de serviços podem ser anexados ao JTA. Pode ser que a definição manual possa estar atrapalhando a mesma.
Uma pergunta, não conheço seu projeto mas haveria algum problema se alterrase seu DAO para um Session Bean Stataless e ussase a atribuição do PersistenteContexte por injeção de dependência pelo container assim:
Dai chamaria seu DAO também por Injecção de dependência assim:
Espero que lhe ajude em algo!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/06/2007 14:36:45
|
Maracuja
GUJ Ranger
![[Avatar]](/images/avatar/aceacd5df18526f1d96ee1b9714e95eb.jpg)
Membro desde: 28/03/2006 10:18:44
Mensagens: 940
Localização: Behind the screen
Offline
|
Então, é justamente o que estou dizendo, controlando a transação na "mão" em um bean BMT funciona numa boa, o problema é mesmo com o CMT.
Existem dois casos.
Bean BMT com controle de transação feito na mão que eu ja fiz e funciona numa boa.
Bean CMT, sem fazer o controle transacional na mão, ao tentar pesistir, ocorre o erro.
Concerteza, entre minhas brincadeiras ja fiz e funciona perfeitamente se eu injtar o EntityManager no meu Bean, ou até usar no meu DAO um outro
bean... a questão é que queria entender melhor esta situação específica!!!!
Mesmo que eu fizesse isso
ocorre o mesmo erro... pq neste momento parece não haver uma transação em andamento....
|
"Nunca deixarei de reclamar, mas espero reclamar de coisas melhores a cada dia..." Um amigo muito sabio |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/06/2007 16:25:58
|
andre_salvati
GUJ Ranger
Membro desde: 02/06/2005 16:28:38
Mensagens: 939
Offline
|
Maracuja wrote:
Concerteza, entre minhas brincadeiras ja fiz e funciona perfeitamente se eu injtar o EntityManager no meu Bean, ou até usar no meu DAO um outro
bean... a questão é que queria entender melhor esta situação específica!!!!
A questão é: pq vc precisa dessa situação específica, se o AS já injeta o EntityManager para vc!? Ou seja, qual a vantagem dessa abordagem!?
|
Ajude na criação do StackOverflow em português!!!
http://area51.stackexchange.com/proposals/23539/software-development-in-portuguese?referrer=tI8Uon7RDszY236h5e0UuA2
http://www.empresadigital.inf.br
http://twitter.com/afsalvati |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/06/2007 18:09:49
|
Maracuja
GUJ Ranger
![[Avatar]](/images/avatar/aceacd5df18526f1d96ee1b9714e95eb.jpg)
Membro desde: 28/03/2006 10:18:44
Mensagens: 940
Localização: Behind the screen
Offline
|
Eu queria que o Container gerencia-se a transação para mim; porém mantendo esta arquitetura....
|
"Nunca deixarei de reclamar, mas espero reclamar de coisas melhores a cada dia..." Um amigo muito sabio |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/06/2007 18:46:49
|
andre_salvati
GUJ Ranger
Membro desde: 02/06/2005 16:28:38
Mensagens: 939
Offline
|
Sim, e qual a vantagem dessa abordagem?
Maracuja wrote:
Não é mais fácil injetar o EntityManager?
|
Ajude na criação do StackOverflow em português!!!
http://area51.stackexchange.com/proposals/23539/software-development-in-portuguese?referrer=tI8Uon7RDszY236h5e0UuA2
http://www.empresadigital.inf.br
http://twitter.com/afsalvati |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/06/2007 20:37:56
|
Maracuja
GUJ Ranger
![[Avatar]](/images/avatar/aceacd5df18526f1d96ee1b9714e95eb.jpg)
Membro desde: 28/03/2006 10:18:44
Mensagens: 940
Localização: Behind the screen
Offline
|
Talvez, se conseguisse injetar aí o EntityManager, mas só consigo injetar isso no meu EJB!!!!
Tentei injetar no DAO, mas recebi um null. Injetando no EJB funciona na boa.
Porém acredito que mesmo que eu injetasse o entity manager, perigava eu ainda receber um
Acho que vou tranformar meus DAO's em EJB's tb e td será resolvido. eu não queria.... bom ainda to avaliando novas abordagens...
|
"Nunca deixarei de reclamar, mas espero reclamar de coisas melhores a cada dia..." Um amigo muito sabio |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/06/2007 20:53:39
|
andre_salvati
GUJ Ranger
Membro desde: 02/06/2005 16:28:38
Mensagens: 939
Offline
|
Maracuja wrote:
Acho que vou tranformar meus DAO's em EJB's tb e td será resolvido. eu não queria.... bom ainda to avaliando novas abordagens...
Mas é isso mesmo, dê uma olhada...
http://www.hibernate.org/328.html
|
Ajude na criação do StackOverflow em português!!!
http://area51.stackexchange.com/proposals/23539/software-development-in-portuguese?referrer=tI8Uon7RDszY236h5e0UuA2
http://www.empresadigital.inf.br
http://twitter.com/afsalvati |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/08/2007 19:10:56
|
mrmarcondes
Thread.start()
Membro desde: 02/08/2007 09:50:01
Mensagens: 34
Offline
|
Boa noite Maracuja,
estou participando de um projeto onde desenhamos essa mesma arquitetura de camadas e estamos enfrentando o mesmo problema em relacao a transacao gerenciada pelo container. Voce chegou a alguma conclusao sobre isso? Como propagar a transacao a partir de um session bean(delegate) ate a camada DAO(POJO)?
Obrigado,
Marco.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/08/2007 00:28:23
|
Maracuja
GUJ Ranger
![[Avatar]](/images/avatar/aceacd5df18526f1d96ee1b9714e95eb.jpg)
Membro desde: 28/03/2006 10:18:44
Mensagens: 940
Localização: Behind the screen
Offline
|
Bom, cheguei a conclusão que não tem jeito... se vc quiser utilizar uma transação CMT com esta arquitetura vc teria que utilizar um EntityManager injetado pelo container e seta-lo na ThreadLocal de um PersistenceUtil (sic) !!!!!
Só fazendo gambiarra!!!!
na real.... só ... como sugerido pelo Taz
http://www.hibernate.org/328.html
Writing DAOs as managed EJB 3.0 components
|
"Nunca deixarei de reclamar, mas espero reclamar de coisas melhores a cada dia..." Um amigo muito sabio |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/08/2007 18:45:10
|
mrmarcondes
Thread.start()
Membro desde: 02/08/2007 09:50:01
Mensagens: 34
Offline
|
Maracuja,
obrigado pelo pronta resposta. Isso e decepcionante, mas vou dar uma olhada com calma no site indicado.
Abracos,
Marco.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/08/2007 10:32:09
|
thiago_santos
Thread.start()
![[Avatar]](/images/avatar/6ae2e6c404abc28406ee88e3ac525aae.jpg)
Membro desde: 28/12/2006 11:02:18
Mensagens: 41
Offline
|
Olá a todos....
Tenho uma aplicação EJB3 rodando dentro do Jboss4.0.5GA, onde estou numa situação assim: minha aplicação tem uma rotina que salva um registro numa tabela de um outro banco através de um DBLINK, e nessa tabela tem um trigger que que ao cair registro lê o mesmo. Mas o problema é que quando eu do um flush() na aplicação para salvar o registro é ativada a trigger onde da um erro na trigger e acaba retornando uma excessão para o jboss quebrando toda a sessão dele, assim não cosigo remover esse registro que está dando erro e a aplicação entra num loop infinito. Como faço para capturar essa excessão sem quebrar as transações do jboss? Alguém poderia me ajudar? Lembrando que a trigger nós aqui não mexemos, e o cliente não quer alterar para corrigir esse erro.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/08/2007 14:06:16
|
Tecnoage
GUJ Master
Membro desde: 13/03/2005 23:18:07
Mensagens: 1723
Localização: SP
Offline
|
Maracuja wrote:Bom, cheguei a conclusão que não tem jeito... se vc quiser utilizar uma transação CMT com esta arquitetura vc teria que utilizar um EntityManager injetado pelo container e seta-lo na ThreadLocal de um PersistenceUtil (sic) !!!!!
Só fazendo gambiarra!!!!
na real.... só ... como sugerido pelo Taz
http://www.hibernate.org/328.html
Writing DAOs as managed EJB 3.0 components
Exato. Estamos usando uma arquitetura parecida aqui... utilizando DAOS como EJBs. Fica estranho mesmo a arquitetura. E até chego a perguntar: Até aonde vale a pena utilizar DAO numa arquitetura dessas?
|
Arquiteto de Software
Sysped Solutions
R3 SAP CAT-83, NF-e, ECD, EFD, CT-e, MANAD, IN86
www.sysped.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/12/2007 16:07:07
|
Luiz_Gustavo
Virtual Machine Man
![[Avatar]](/images/avatar/012d9fe15b2493f21902cd55603382ec.png)
Membro desde: 30/04/2005 12:55:11
Mensagens: 518
Localização: Assis
Offline
|
Galera, olhando este post vejo que tem algo a ver com a questão que estou enfrentando.
No meu caso, todos os objetos envolvidos são EJBs.... Tenho um EJB Statefull que chama vários EJBs Stateless, e gostaria que as transações fossem iniciadas e finalizadas no Stateful... ou seja, as transações deveriam ser propagadas para os Stateless.
Estava fazendo com injeção de dependência e tudo estava beleza, mas um requisito da aplicação me força a mudar parâmetros do EntityManager em tempo de execução, para pegar conexões de acordo com o usuário logado (cada usuário do sistema tem um usuário paralelo no banco).
Desta forma, preciso pegar minhas referências de EntityManager da seguinte forma:
onde props é um Map com as propriedades que tenho que passar para o EntityManager.
dessa forma, preciso criar a transação com entityManager.getTransaction().begin;
a questão é como propagá-la para os demais EJB sem estado.
alguma sugestão?
[]'s
|
Analista e Desenvolvedor de Sistemas
http://luizgustavoss.blogspot.com/
http://luizgustavoss.wordpress.com/
http://www.linkedin.com/in/luizgustavoss
Procurando uma especialização em Java, SOA e Android? Conheça a TNT Educacional
|
|
|
 |
|
|