| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/11/2008 16:20:56
|
osmio
Java Ninja
Membro desde: 22/08/2006 20:27:54
Mensagens: 252
Offline
|
kinow wrote:
Acho que ele não pode fazer desta maneira porque precisa garantir que as duas funcionarão ou nenhuma funcionará. Não pode ocorrer casos em que Y funcione e X não. Mas issio ele pode confirmar melhor.
Exatamente isso!
Ou faz tudo, ou não faz nada.
8 ou 80!!
|
"O pensamento lógico pode levar você de A a B, mas a imaginação te leva a qualquer parte do universo."
- Einstein, Albert |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/11/2008 16:42:05
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
osmio wrote:Boa tarde galera!
To passando por sérios apuros aqui!!
Gostaria de algumas sugestões e opiniões de vocês.
O problema é o seguinte:
Tenho duas bases de dados distintas e um processo batch que captura alguns dados da base X, consolida e insere na base Y.
Bom, quanto a isso, nenhum problema, desde que as duas bases estejam no ar e operando normalmente.
O problema maior é que eu tenho que garantir a consistência dos dados em ambos os lados, ou seja, eu pego alguns registros na base X e insiro na base Y e como resultado a inserção na base Y, eu atualizo alguns campos na base X.
Como eu poderia garantir a consistência dessas transações, uma vez que dependo do acesso a rede e de máquinas e bases diferentes?
AO Transaction Manager importa um pepino se são máquinas ou bases diferentes.
O que vc faz é colocar o transaction manager a funcionar ( se usar um servidor JEE ele já está funcionando)
Abrea transação, le de X, grava em Y, le de Y grava em X e commita a transação. Simples assim.
Todo o trabalho de controle é feito pelo transaction manager.
Se vc não tem um transaction manager, a solução é arranjar um. O JTOM é uma boa tem até um tutorial de como instalalo no tomcat sem ser preciso servidor de aplicação, mas a melhor opção é realmente usar um servidor de aplicação que é para isso que eles servem.
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/11/2008 08:21:16
|
osmio
Java Ninja
Membro desde: 22/08/2006 20:27:54
Mensagens: 252
Offline
|
sergiotaborda wrote:
AO Transaction Manager importa um pepino se são máquinas ou bases diferentes.
O que vc faz é colocar o transaction manager a funcionar ( se usar um servidor JEE ele já está funcionando)
Abrea transação, le de X, grava em Y, le de Y grava em X e commita a transação. Simples assim.
Todo o trabalho de controle é feito pelo transaction manager.
Se vc não tem um transaction manager, a solução é arranjar um. O JTOM é uma boa tem até um tutorial de como instalalo no tomcat sem ser preciso servidor de aplicação, mas a melhor opção é realmente usar um servidor de aplicação que é para isso que eles servem.
Qual a porcentagem de garantias que eu teria utilizando um Transaction Manager??
Porque, por exemplo, eu tenho uma pequena solução que contorna alguns possíveis erros. Isso me dá uma margem de aproximadamente 92% de garantias de que as transações (em ambos os lados) serão efetuadas.
8% de possibilidade de acontecer alguma coisa que não deveria, para mim é uma margem absurdamente grande.
Utilizando JTA ou o próprio JTOM (citado acima) eu conseguiria aumentar em quanto os meus 92% de garantia??
At.
|
"O pensamento lógico pode levar você de A a B, mas a imaginação te leva a qualquer parte do universo."
- Einstein, Albert |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/11/2008 08:47:25
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
osmio wrote:
sergiotaborda wrote:
AO Transaction Manager importa um pepino se são máquinas ou bases diferentes.
O que vc faz é colocar o transaction manager a funcionar ( se usar um servidor JEE ele já está funcionando)
Abrea transação, le de X, grava em Y, le de Y grava em X e commita a transação. Simples assim.
Todo o trabalho de controle é feito pelo transaction manager.
Se vc não tem um transaction manager, a solução é arranjar um. O JTOM é uma boa tem até um tutorial de como instalalo no tomcat sem ser preciso servidor de aplicação, mas a melhor opção é realmente usar um servidor de aplicação que é para isso que eles servem.
Qual a porcentagem de garantias que eu teria utilizando um Transaction Manager??
Porque, por exemplo, eu tenho uma pequena solução que contorna alguns possíveis erros. Isso me dá uma margem de aproximadamente 92% de garantias de que as transações (em ambos os lados) serão efetuadas.
8% de possibilidade de acontecer alguma coisa que não deveria, para mim é uma margem absurdamente grande.
Utilizando JTA ou o próprio JTOM (citado acima) eu conseguiria aumentar em quanto os meus 92% de garantia??
At.
?? 92% de garantia ? como vc chega nesse numero ?
Independentemente disso, 92% ou zero é a mesma coisa.
O Transaction Manager da JTA ( da qual o JTOM é uma implementação) lhe dá 100% garantia. Não poderia ser de outra forma já que as transações do JTA são ACID . A letra importante aqui é A (Atómica) que significa : ou faz tudo, ou não faz nada.
92% não faz nenhum sentido. Isso significaria que , para começo de conversa as suas transações não são atomicas. Se elas não são atomicas, mais vale nem usar transação. 92% significaria que faz quase tudo , mas o que não faz é suficiente para destruir o sistema. Nem que fosse 0.000...1%
Não faz sentido falar de porcentagem num ambiente ACID:
Atomico : ou tudo ou nada. Não ha meia alteração , nem 87% de alteração.
Consistente : o estado do sistema, antes, durante e depois da transação, independente se deu commit ou roolback é consistente, i.e. não se perde informação e não ha informação "lixo" sendo gerada.
Isolado: uma transação não interfere com a outra.
Duravél: se a transação altera o estado do sistema, o sistema permanece nesse estado.
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/11/2008 08:54:18
|
osmio
Java Ninja
Membro desde: 22/08/2006 20:27:54
Mensagens: 252
Offline
|
sergiotaborda wrote:
?? 92% de garantia ? como vc chega nesse numero ?
Independentemente disso, 92% ou zero é a mesma coisa.
O Transaction Manager da JTA ( da qual o JTOM é uma implementação) lhe dá 100% garantia. Não poderia ser de outra forma já que as transações do JTA são ACID . A letra importante aqui é A (Atómica) que significa : ou faz tudo, ou não faz nada.
92% não faz nenhum sentido. Isso significaria que , para começo de conversa as suas transações não são atomicas. Se elas não são atomicas, mais vale nem usar transação. 92% significaria que faz quase tudo , mas o que não faz é suficiente para destruir o sistema. Nem que fosse 0.000...1%
Não faz sentido falar de porcentagem num ambiente ACID:
Atomico : ou tudo ou nada. Não ha meia alteração , nem 87% de alteração.
Consistente : o estado do sistema, antes, durante e depois da transação, independente se deu commit ou roolback é consistente, i.e. não se perde informação e não ha informação "lixo" sendo gerada.
Isolado: uma transação não interfere com a outra.
Duravél: se a transação altera o estado do sistema, o sistema permanece nesse estado.
Então, é exatamente isso o que eu preciso!
A porcentagem que eu citei, não corresponde a "gravar X %" dos dados, e sim da possibilidade de não acontecer nenhum problema de rede e/ou conexão com as bases.
Vou dar uma olhada no JTOM pra ver como funciona.
At.
|
"O pensamento lógico pode levar você de A a B, mas a imaginação te leva a qualquer parte do universo."
- Einstein, Albert |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/11/2008 10:01:23
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
osmio wrote:
Então, é exatamente isso o que eu preciso!
A porcentagem que eu citei, não corresponde a "gravar X %" dos dados, e sim da possibilidade de não acontecer nenhum problema de rede e/ou conexão com as bases.
O ponto é que isso é irrelevante para o controle de transação.. Se ha um problema na comunicação a transação simplesmente é abortada e o programa informado. Ele pode repetir a ação mais tarde.
A disponibilidade da conexão e do banco são fatores importantes, mas para a aplicação como um todo, não para o controle de transação.
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/11/2008 11:29:46
|
clone_zealot
JavaEvangelist
Membro desde: 21/11/2004 16:40:00
Mensagens: 424
Offline
|
Em teoria, Two Phase Commit resolve exatamente o seu problema.
Se o seu processo realmente é batch, sem nenhum estresse com usuários alterando os dados durante o processo, Two Phase é o mais simples de implementar, e não precisa usar nenhum framework. Já está implementado no driver JDBC.
Dá uma pesquisa por XATransaction. O Oracle e o DB2 eu sei que suportam isso.
E é 100% de certeza que eles garantem ACID =D
A não ser que tiver bugs no banco, mas dai não há milagre que resolva a parada.
[edit]
Two Phase só faz o commit quando as duas bases dão o OK final.
[/edit]
This message was edited 1 time. Last update was at 12/11/2008 11:31:49
|
"Não amo a espada por sua agudez,
não amo a flecha por sua rapidez,
não amo o homem por sua glória,
amo sim, tudo o que eles defendem"
Faramir, Príncipe de Ithilien |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/11/2008 13:27:52
|
osmio
Java Ninja
Membro desde: 22/08/2006 20:27:54
Mensagens: 252
Offline
|
clone_zealot wrote:Em teoria, Two Phase Commit resolve exatamente o seu problema.
Se o seu processo realmente é batch, sem nenhum estresse com usuários alterando os dados durante o processo, Two Phase é o mais simples de implementar, e não precisa usar nenhum framework. Já está implementado no driver JDBC.
Dá uma pesquisa por XATransaction. O Oracle e o DB2 eu sei que suportam isso.
E é 100% de certeza que eles garantem ACID =D
A não ser que tiver bugs no banco, mas dai não há milagre que resolva a parada.
[edit]
Two Phase só faz o commit quando as duas bases dão o OK final.
[/edit]
Bom, uma das minhas bases é Oracle, a outra é SQLServer...
O processo é batch mesmo, sem intervenção de usuários.
O que eu preciso garantir eh de fato a consistência dos dois lados.
Vou dar uma pesquisada sobre Two Phase.
At.
|
"O pensamento lógico pode levar você de A a B, mas a imaginação te leva a qualquer parte do universo."
- Einstein, Albert |
|
|
 |
|
|