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

Re: Erro utilizando o codec



On Sun, 9 Nov 2003, Emilio de Camargo Francesquini wrote:

> Estou tendo alguns problemas tentando passar o PropagationContext na
> requisição. No interceptador do lado do cliente faço:
> 
> Any pcAny = org.omg.CORBA.ORB.init().create_any();
> org.omg.CosTransactions.PropagationContextHelper.insert(pcAny, pc);
> byte[] pcEncoded = _codec.encode_value(pcAny);
> ServiceContext sc = new ServiceContext(0, pcEncoded);
> ri.add_request_service_context(sc, false);
> 
> no servidor faço:
> 
> sc = ri.get_request_service_context(0);
> byte[] cd = sc.context_data;
> Any any = _codec.decode_value(cd, PropagationContextHelper.type());
> PropagationContext dec = PropagationContextHelper.extract(any);

Na minha resposta anterior a esta mensagem eu me concentrei
no problema (agora resolvido) que estava acontecendo e acabei
deixando de notar outra coisa. 

Provavelmente os fragmentos de código acima foram escritos
para testes e seriam alterados depois que o problema fosse
resolvido... Em todo caso, é bom deixar claro que o interceptador
do lado do cliente não deveria criar um ServiceContext. Ele 
deveria pegar o ServiceContext de um slot do PICurrent 
(PortableInterceptor::Current) e colocá-lo na requisição. O
"begin transaction" é que cria o ServiceContext e o coloca
num slot do PICurrent.

Do lado do servidor, o interceptador só pega um ServiceContext
da requisição e o coloca num slot do PICurrent. O IIOP invoker,
quando for tratar essa requisição, pegará o ServiceContext do
PICurrent e decodificará esse contexto para obter um PropagationContext, 
que ele colocará (traduzido para javax.transaction.Transaction)
na invocação do JBoss.

Prá variar acho que eu falei demais... Bom, espero que tudo tenha 
ficado claro.

Reverbel