| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2005 14:44:03
|
skill_ufmt
JavaEvangelist
![[Avatar]](/images/avatar/8248a99e81e752cb9b41da3fc43fbe7f.png)
Membro desde: 20/05/2003 18:02:23
Mensagens: 318
Localização: Cuiabá - MT
Offline
|
Galera,
Vi alguns controles de transação em algumas aplicações por aqui, mas não estou concordando muito com a forma como estão.
Tem app que quando precisa-se criar mais de um DAO ou fazer mais de uma operação com o banco, simplemente passando a conexao via set, para dentro do VO, onde exixste uma váriavel de Connnection, passa-se esse VO para o método do DAO, inserir(VO), e lá dentro verificam se essa variávle está null ou não para criar ou não outra conexão.
Também tem outra app em que as conexões são passadas no cabeçalho do método, inserir(AlgumaCoisa, conexão).
E uma que fiquei mais intrigado, é que a conexão é passada na criação do DAO, new DAO(conexão, flag), onde passam true ou false no flag, pra saber se vão ou não fechar essa conexão.
Enfim,
Como você geralemtne gerenciam suas transações quando necessitam de numa mesma conexão efetuar mais de uma operaçao com o banco, mais de uma instanciação de DAO, JTS, JTA, conexão no cabeçalho mesmo?
Uma maneira elegante, simples e certa de preferência
Agraço
|
Windows: Not Plug & Play, but Bug & Pay!
_________________________________________________
Kivanio Pereira Barbosa
Bacharel em Ciência da Computação
CUIABÁ JAVA USERS
www.cajumt.com.br |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2005 14:59:11
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
Usando uma thread-bound Connection.
Em ambientes web tem um servlet-filter responsavel por gerenciar conexões e transações.
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2005 15:12:26
|
skill_ufmt
JavaEvangelist
![[Avatar]](/images/avatar/8248a99e81e752cb9b41da3fc43fbe7f.png)
Membro desde: 20/05/2003 18:02:23
Mensagens: 318
Localização: Cuiabá - MT
Offline
|
louds wrote:Usando uma thread-bound Connection.
Em ambientes web tem um servlet-filter responsavel por gerenciar conexões e transações.
seria uma aplicaçãozinha web, que vai rodar no tomcat por exemplo ou jetty como queiram.
|
Windows: Not Plug & Play, but Bug & Pay!
_________________________________________________
Kivanio Pereira Barbosa
Bacharel em Ciência da Computação
CUIABÁ JAVA USERS
www.cajumt.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2005 15:25:31
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
Eu faço isso porque é a forma mais facil...
É só colocar num servlet filter para sempre executar o release ao final do processamento e pronto. Veja que o exemplo tá bem simplificado pois não preve coisas como checkpointing, early commit/rollback e qualquer requisito de transacional que não seja o básico (1 con - 1 tx local - 0 cp).
Nos daos ai é só fazer assim:
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2005 15:33:18
|
skill_ufmt
JavaEvangelist
![[Avatar]](/images/avatar/8248a99e81e752cb9b41da3fc43fbe7f.png)
Membro desde: 20/05/2003 18:02:23
Mensagens: 318
Localização: Cuiabá - MT
Offline
|
louds wrote:Eu faço isso porque é a forma mais facil...
Valeu pela dica.
O pessoal ta querendo matar umas focas usando struts, sabe se ele implementa algo relacionado a autenticação? ou algo relacionado a essas transações?
|
Windows: Not Plug & Play, but Bug & Pay!
_________________________________________________
Kivanio Pereira Barbosa
Bacharel em Ciência da Computação
CUIABÁ JAVA USERS
www.cajumt.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2005 15:39:21
|
skill_ufmt
JavaEvangelist
![[Avatar]](/images/avatar/8248a99e81e752cb9b41da3fc43fbe7f.png)
Membro desde: 20/05/2003 18:02:23
Mensagens: 318
Localização: Cuiabá - MT
Offline
|
louds wrote:Eu faço isso porque é a forma mais facil...
Esse exemplo seu é algo parecido com isso:
e com os devidos, rollback e closes ?
|
Windows: Not Plug & Play, but Bug & Pay!
_________________________________________________
Kivanio Pereira Barbosa
Bacharel em Ciência da Computação
CUIABÁ JAVA USERS
www.cajumt.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2005 15:45:28
|
danieldestro
Moderador
![[Avatar]](/images/avatar/a5bfc9e07964f8dddeb95fc584cd965d.png)
Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline
|
louds, como fica a concorrência, neste caso?
|
gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2005 15:53:49
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
daniel, a implementação usa uma ThreadLocal para manter o estado de cada thread, isso elimina problemas de concorrencia.
skill_ufmt, sim, bem parecido. A diferença é o local onde se inicia e termina a transação, no seu exemplo fica no meio do código de negocios, no meu fica em um servlet filter separado. A vantagem de fazer tudo de um lugar só é permitir compor código transacional sem se preocupar com criação espuria de múltiplas transações.
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2005 15:54:39
|
skill_ufmt
JavaEvangelist
![[Avatar]](/images/avatar/8248a99e81e752cb9b41da3fc43fbe7f.png)
Membro desde: 20/05/2003 18:02:23
Mensagens: 318
Localização: Cuiabá - MT
Offline
|
Se bem entedi, o modo do louds, poderia fazer assim que daria no mesmo:
Mas como o Daniel disse, como fica a concorrência neste caso? coloco syncronized no método?
|
Windows: Not Plug & Play, but Bug & Pay!
_________________________________________________
Kivanio Pereira Barbosa
Bacharel em Ciência da Computação
CUIABÁ JAVA USERS
www.cajumt.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2005 15:55:29
|
danieldestro
Moderador
![[Avatar]](/images/avatar/a5bfc9e07964f8dddeb95fc584cd965d.png)
Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline
|
Hummmm.. mto interessante. E eu sempre me perguntava como isso era feito.... hahahhahhahaaa
|
gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2005 15:56:14
|
skill_ufmt
JavaEvangelist
![[Avatar]](/images/avatar/8248a99e81e752cb9b41da3fc43fbe7f.png)
Membro desde: 20/05/2003 18:02:23
Mensagens: 318
Localização: Cuiabá - MT
Offline
|
louds wrote:
skill_ufmt, sim, bem parecido. A diferença é o local onde se inicia e termina a transação, no seu exemplo fica no meio do código de negocios, no meu fica em um servlet filter separado. A vantagem de fazer tudo de um lugar só é permitir compor código transacional sem se preocupar com criação espuria de múltiplas transações.
ah ta, concordo, então estes dois exemplos que coloquei aqui, estão certos, só faltando mesmo refinar no quesito de favorecer composição.
|
Windows: Not Plug & Play, but Bug & Pay!
_________________________________________________
Kivanio Pereira Barbosa
Bacharel em Ciência da Computação
CUIABÁ JAVA USERS
www.cajumt.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2005 16:00:02
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
Sim, nunca manipule a transação dentro de um DAO. Existem alguns muito poucos cenarios que justifica fazer isso.
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2005 16:00:07
|
skill_ufmt
JavaEvangelist
![[Avatar]](/images/avatar/8248a99e81e752cb9b41da3fc43fbe7f.png)
Membro desde: 20/05/2003 18:02:23
Mensagens: 318
Localização: Cuiabá - MT
Offline
|
louds wrote:daniel, a implementação usa uma ThreadLocal para manter o estado de cada thread, isso elimina problemas de concorrencia.
Poderia postar um código exemplo dessa sua Thread?
Você abre uma Thread para cada conexão? cada método? cada transação, jogando a conexão nessa thread?
|
Windows: Not Plug & Play, but Bug & Pay!
_________________________________________________
Kivanio Pereira Barbosa
Bacharel em Ciência da Computação
CUIABÁ JAVA USERS
www.cajumt.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2005 16:04:20
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
skill_ufmt wrote:Poderia postar um código exemplo dessa sua Thread?
Você abre uma Thread para cada conexão? cada método? cada transação, jogando a conexão nessa thread?
Não... O problema de concorrencia é quando varias threads acessam o mesmo recurso, se eu criasse mais threads, só pioraria.
Em vez disso uso a class java.lang.ThreadLocal. Ela permite de forma facil guarda uma variavel que o valor depende da thread acessando.
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2005 16:18:54
|
skill_ufmt
JavaEvangelist
![[Avatar]](/images/avatar/8248a99e81e752cb9b41da3fc43fbe7f.png)
Membro desde: 20/05/2003 18:02:23
Mensagens: 318
Localização: Cuiabá - MT
Offline
|
louds wrote:Sim, nunca manipule a transação dentro de um DAO. Existem alguns muito poucos cenarios que justifica fazer isso.
vo usar um método do mister_m hehe
me diga um caso de uso exemplo, onde justifica este uso?
Lembrando que a equipe quer usar usar struts, esse controle de trheads teu, ficaria onde neste cenário? Action? uma clase para que as Action usem? no Tomcat?
|
Windows: Not Plug & Play, but Bug & Pay!
_________________________________________________
Kivanio Pereira Barbosa
Bacharel em Ciência da Computação
CUIABÁ JAVA USERS
www.cajumt.com.br |
|
|
 |
|
|