[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
Re: Obtendo um PropagationContext
- Subject: Re: Obtendo um PropagationContext
- From: Kleber Xavier <kxavier@xxxxxxxxxx>
- Date: Sun, 19 Dec 2004 01:23:14 -0300
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
>
>