[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....
- Subject: Re: Testes para voces fazerem com seu EP2 que nao passvaa pra gente....
- From: Paulo Silveira <paulo@xxxxxxxxxxxx>
- Date: Sat, 15 Nov 2003 16:41:56 -0200
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
>
>
>
>