[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Re: Testes para voces fazerem com seu EP2 que nao passvaa pra gente....



Oi pessoal!

Falei besteira. Essa solucao nao funciona para multiplas threads... A 
gente ainda tem problema nisso.

O EP funciona perfeitamente, mas apenas para clientes single threaded.

O problema eh o seguinte. A gente registra o CosTransactions.Current 
como sendo o nosso TransactionCurrent. No begin, a gente coloca dentro 
do slot do PICurrent o propagationContext. No commit e rollback, a gente 
pegat o propagationContext do slot do PICurrent, e chama o 
terminator.commit/rollback.

Soh que parece que esse PICurrent tambem eh uma unica instancia. 
Independente de como a gente pega ele, seja numa Thread ou em outra, ele 
devolve a _mesma_ referencia. Isso poderia estar ok, se internamente ele 
usasse ujma politica ThreadLocal para guardar os slots. Mas pelo o que a 
gente viu, ele nao usa....

Sugestoes? Alguem mais testou o programa para cliente multithreaded?

Paulo

Paulo Silveira wrote:

> Oi pessoal.
> 
> Durante a execucao de uma transacao do cliente, antes de comitar ou dar 
> rollback, voce cria uma nova Thread, e pede para ele fazer outra 
> transacao nesse meio tempo.
> 
> Para voce ter certeza que a thread que voce criou vai executar 
> inteirinha antes de voce continuar, voce faz:
> 
>     TestaThreadDeCliente thread = new TestaThreadDeCliente();
>     thread.start();
>     thread.join();
> 
> O join vai esperar ela morrer.
> 
> Aqui a gente tinha um problema. Quando a gente dava begin, a gente tinha 
> uma referencia para um TransactionCurrent que tinha sido registrado no 
> initializer. Mas ele era uma instancia unica, entao todo mundo numa 
> mesma vm/classloader tava pegando o mesmo cara, e a transacao era a mesma.
> 
> Ai o Alex viu que eu tinha feito a besteira de guardar o 
> PropagationContext tambem como variavei de instancia do 
> TransactionCurrent, e o que a gente fez entao foi sempre ver isso no 
> slot do PICurrent, que se responsabiliza por fazer a politicagem de 
> ThreadLocal.
> 
>        
> Alguem mais fez assim?
> 
> Falou
> 
> 
> 
>