| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/03/2010 12:08:53
|
jadirrlima
Thread.start()
![[Avatar]](/images/avatar/efb9819497c37ed33d597f4fc04c15a2.jpg)
Membro desde: 30/03/2009 10:17:12
Mensagens: 30
Offline
|
Estou desenvolvendo uma aplicação utilizando Spring + JPA + Hibernate e me deparei com um problema em persistências concorrentes, ou seja, quando duas ou mais pessoas (maquinas distintas) executam a mesma ação, ao mesmo tempo da um erro em uma das persistencias. Notei esse comportamento quando adicionei this.factory.close(); this.manager.close(); mas não tenho certeza se essa é a causa
Como poderia fazer o tratamento das persistencias concorrentes?
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/03/2010 12:39:19
|
nextuser
JavaEvangelist
![[Avatar]](/images/avatar/fe10b3c08a1273145b1df65fc4ba484b.png)
Membro desde: 15/12/2008 11:21:08
Mensagens: 400
Localização: São Paulo, Brazil
Offline
|
vc ta dizendo que tem duas apps com hibernate usando um banco só é isso??
|
Hudson Afonso
Consultor
http://penseinteligente.com.br/
Pense Inteligente:
A Inteligente é uma consultoria em tecnologia da informação, que atua na comercialização e implementação de produtos de software corporativos. Com foco no cliente, compreendemos a necessidade de nossos clientes e adicionamos valor para a condução de seus negócios.
Focus:
SPED, Saneamento de Cadastro, Saneamento de Dados, Cadastro de Clientes e Fornecedores, Cadastro da Receita Federal, CNPJ, CPF, Cadastro, Correção de Cadastro para o SPED, Exigências legais para o SPED, Cadastro CNPJ, Certidão CNPJ, Comprovante CPF, Consulta CPF, Consulta Serasa, Consulta SPC, Nota Fiscal Eletrônica, SPED Contábil, SPED Fiscal |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/03/2010 13:38:40
|
jadirrlima
Thread.start()
![[Avatar]](/images/avatar/efb9819497c37ed33d597f4fc04c15a2.jpg)
Membro desde: 30/03/2009 10:17:12
Mensagens: 30
Offline
|
Não, a aplicação é a mesma.
A mesma aplicação sendo acessada de máquinas diferentes executando a mesma ação
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/03/2010 13:40:16
|
nextuser
JavaEvangelist
![[Avatar]](/images/avatar/fe10b3c08a1273145b1df65fc4ba484b.png)
Membro desde: 15/12/2008 11:21:08
Mensagens: 400
Localização: São Paulo, Brazil
Offline
|
é uma app web que roda no browser??
This message was edited 1 time. Last update was at 09/03/2010 13:40:59
|
Hudson Afonso
Consultor
http://penseinteligente.com.br/
Pense Inteligente:
A Inteligente é uma consultoria em tecnologia da informação, que atua na comercialização e implementação de produtos de software corporativos. Com foco no cliente, compreendemos a necessidade de nossos clientes e adicionamos valor para a condução de seus negócios.
Focus:
SPED, Saneamento de Cadastro, Saneamento de Dados, Cadastro de Clientes e Fornecedores, Cadastro da Receita Federal, CNPJ, CPF, Cadastro, Correção de Cadastro para o SPED, Exigências legais para o SPED, Cadastro CNPJ, Certidão CNPJ, Comprovante CPF, Consulta CPF, Consulta Serasa, Consulta SPC, Nota Fiscal Eletrônica, SPED Contábil, SPED Fiscal |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/03/2010 14:05:44
|
jadirrlima
Thread.start()
![[Avatar]](/images/avatar/efb9819497c37ed33d597f4fc04c15a2.jpg)
Membro desde: 30/03/2009 10:17:12
Mensagens: 30
Offline
|
Isso, é uma aplicação WEB
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2010 13:21:50
|
breno500as
Virtual Machine Man
Membro desde: 11/10/2007 17:53:07
Mensagens: 614
Localização: Belo Horizonte - MG
Offline
|
A princípio seria interessante você postar o erro que está ocorrendo...
Em relação ao close você deve dar apenas em EntityManagers gerenciados pela aplicação, criados a partir de um EntityManagerFactory e é claro que vc não pode dar um close antes de ter chamado um save por exemplo...
Por este e outros problemas na minha opinião é melhor utilizar um EntityManager gerenciado pelo container(não sei se é o seu caso) pois dessa forma não é necessário ficar dando close, tratar transações, concorrência......
|
Sun Certified Java Programmer 5.0
Sun Certified Web Component Developer 5.0
Sun Certified Business Component Developer 5.0 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2010 16:36:02
|
jadirrlima
Thread.start()
![[Avatar]](/images/avatar/efb9819497c37ed33d597f4fc04c15a2.jpg)
Membro desde: 30/03/2009 10:17:12
Mensagens: 30
Offline
|
Caro Breno, Infelizmente não é possível deixar o EntityManager gerenciado pelo container, pois tenho vários datasources dinâmicos e são atribuídos pela aplicação. Tenho tb EntityManager gerenciado pelo container, este realmente não dão problemas. O erro realmente só acontece a partir dos um EntityManagerFactory's criado dentro da aplicação. Notei ainda que o erro só aconte quando depois de um persistencia fecho a sessão com EntityManagerFactory.close. caso não feche não da erro mas fica aberto sessões no banco de dados. Imagina só a cada persistencia uma sessão aberta, não dá!
Lembrando que o problema ocorre qdo 2 máquinas distintas executam o mesmo comando ao mesmo tempo.
This message was edited 1 time. Last update was at 10/03/2010 16:36:51
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2010 19:43:17
|
breno500as
Virtual Machine Man
Membro desde: 11/10/2007 17:53:07
Mensagens: 614
Localização: Belo Horizonte - MG
Offline
|
Entendi..... Mas tbm é possível ter mais de um data source em Entity Managers gerenciados pelo container, basta vc criar as unidades de persistência referentes ao seu data sorce no persistence.xml e na hora da injeção do Entity Manager diferencia-los utilizando o atributo unitName ...
Mas enfim, voltando ao seu problema não sei se é a melhor alternativa mas talvez você possa "sincronizar na mão" o acesso na hora de persistir seus dados, nem sempre essa é a melhor alternativa pelo fato de você ter uma perda com o desempenho....
Espero ter ajudado...
|
Sun Certified Java Programmer 5.0
Sun Certified Web Component Developer 5.0
Sun Certified Business Component Developer 5.0 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/03/2010 08:39:47
|
jadirrlima
Thread.start()
![[Avatar]](/images/avatar/efb9819497c37ed33d597f4fc04c15a2.jpg)
Membro desde: 30/03/2009 10:17:12
Mensagens: 30
Offline
|
Tentei listar meus DS's (são 9 bancos) no persistence.xml, mas ficou muito pesado pra fazer o deploy, e ainda com o agravante de que se pelo menos 1 banco não estiver no ar compromete a aplicaçã inteira que não carrega.
Quanto a "sincornizar na mão"...como posso fazer isso Breno?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/03/2010 12:21:04
|
breno500as
Virtual Machine Man
Membro desde: 11/10/2007 17:53:07
Mensagens: 614
Localização: Belo Horizonte - MG
Offline
|
Sincronizar seria algo do tipo:
Mas como te falei nem sempre é a melhor alternativa....
Com esse número alto de data sources eu pensaria em algo como desacoplar suas entidades específicas e modularizar sua aplicação...
|
Sun Certified Java Programmer 5.0
Sun Certified Web Component Developer 5.0
Sun Certified Business Component Developer 5.0 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/03/2010 13:14:39
|
jadirrlima
Thread.start()
![[Avatar]](/images/avatar/efb9819497c37ed33d597f4fc04c15a2.jpg)
Membro desde: 30/03/2009 10:17:12
Mensagens: 30
Offline
|
OK, vou ver o que consigo por aqui, obrigado pelas sugestões. Acho realemte que modularizar a aplicação é uma boa tipow, criar um pool de conexões separados e tals, vou amadurecer a idéa . obrigado e abraços.
|
|
|
 |
|
|