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

Re: Obtendo um PropagationContext



Oi Danilo,

Estou seguindo uma estratégia semelhante a sua ( estratégia 2 ) para 
criar um PropagationContext, e também estou tendo problemas. Andei 
pesquisando por aí e parece que existe uma estratégia para evitar 
recursões infinitas em PortableInterceptors CORBA, então acho que esta 
estratégia não é estranha. Na própria documentação da Sun sobre CORBA 
IDL que vem junto com a documentação Javadoc do JDK eles mostram um 
exemplo de implementação baseada no uso de um slot no PICurrent para 
informar que a requisição é de saída e deve ser ignorado por outras 
chamadas ao mesmo interceptador. De qualquer forma ainda não consegui 
fazer esta implementação funcionar e estou utilizando uma solução meio 
"marreta" na qual criei um flag booleano que impede a recursão infinita. 
Não gostei muito desta solução, mas parece estar funcionando.

Porém, mesmo resolvendo este problema, por alguma razão ainda estou 
tomando uma exceção de ForeignTransaction no segundo servidor. Acho que 
há algo errado com o método importTransactionPropagationContext().

E você ? Conseguiu propagar o contexto transacional usando a estratégia 2 ?

Um abraço,
Kleber

Danilo Conde wrote:

> Bom dia senhores,
>
>    Estou com um pouco de dificuldades para criar um PropagationContext 
> para passar nas requisições CORBA. Eu pensei em duas formas de fazer 
> isso:
>
> 1) Criar o PropagationContext na raça, preenchendo seus campos um por um
> 2) Pegar um referência CORBA para o servente default 
> (TransactionServiceImpl) usando a inteface Coordinator e chamar o 
> método get_txcontext()
>
>    Comecei a testar a estratégia 2, por parecer ser mais prática. 
> Implementei no TxServerClientInterceptor um método que substitui o 
> getEmptyPropagationContext() e tenta pegar uma referência para o 
> Coordinator, procurando por "UserTransaction" 
> (CorbaTransactionService.COSNAMING_USERTX_NAME) no serviço de nomes 
> CORBA. Acontece que, ao chamar um método no no serviço de nomes CORBA, 
> ele passa no TxServerClientInterceptor >> send_request() novamente, 
> que faz passar no meu método novamente, fazendo um loop infinito. Bom, 
> aparentemente não é a coisa mais difícil do mundo evitar esse loop 
> infinito, mas no fim das contas eu achei que ficou meio "estranha" 
> essa minha estratégia. E para implementar a outra estratégia, de 
> qualquer forma eu vou precisar de uma referência pra um coordenador, o 
> que eu pretendia obter através do serviço de nomes CORBA...
>
>    Alguém aí passou por esse problema ? Tem alguma sugestão ?
>    Ou fizeram isso de forma totalmente diferente ?
>    Tem algum outro jeito de obter um Coordinator ?
>
> Obrigado,
> Danilo
>  
>