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

Re: Obtendo um PropagationContext



Olá Kleber,

    Eu consegui propagar o contexto usando aquela estratégia, sim. 
Também usei uma variável boolean evitar o loop infinito.
    Quanto à exceção de ForeignTransaction, a implementação do método 
importTransactionPropagationContext() tenta encontrar a transação com o 
Id que você passou no contexto no servidor onde ele é chamado (no 
servidor "alvo" - SA2), mas ela só existe no servidor que gerou o 
contexto propagado (SA1), por isso a exceção está sendo lançada.
    Eu alterei o método importTransactionPropagationContext() para que 
ele crie uma TransactionImpl em SA2 quando receber um contexto que 
possui um Coordinator. Essa transação fica "dependente" da transação 
remota. Quando alguém chama enlistResource() nela, eu chamo 
register_resource no Coordinator passando essa transação como um 
org.omg.CosTransactions.Resource (fiz um adapter para a transação se 
passar por Resource CORBA.)
    Espero que isso ajude.

Danilo

PS: apenas esclarecendo: o que eu chamei de SA1 é o servidor que contém 
um EJB que acessa um EJB em outro servidor, SA2.

O que eu fiz, ao receber um contexto que possui uma transação e um 
Coordinator, eu crio uma TransactionImpl em SA2 que

Kleber Xavier wrote:

> 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
>>  
>>
>
>
>