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

Re: [reverbel-sma] 1) tenho q me preocupar com ClassLoader 2) POA persistente! O que é isso?



Olá Alexandre.

On 10/20/06, Alexandre Freire <chegado@xxxxxxxxx> wrote:
olá,

estou com duas dúvidas:

1) tenho que me preocupar com ClassLoaders? se sim, por que?
Em outras palavras, no método invoke eu preciso desse código:

ClassLoader oldCl = TCLAction.UTIL.getContextClassLoader();
                                         .
                                         .
finally {
        TCLAction.UTIL.setContextClassLoader(oldCl);
}
Esse trecho de código que você mencionou serve para "salvar" o context
classloader, pois parece que algum interceptador define um novo
context classloader depois que a requisição é encaminhada para o MBean
server (tem um comentário "The cl on the thread should be set in
another interceptor"). Não sei se há algum problema se o context
classloader não for restaurado após cada chamada ao MBean server, mas
por via das dúvidas eu deixaria essa chamada aí :-).

2) No enunciado consta o seguinte trecho: "Use o método startService()
para registrar o servente CORBA com um POA persistente ...". POA
persistente! O que é isso?
Um POA persistente é um POA configurado com a política PERSISTENT.
Isso quer dizer que uma referência CORBA obtida pelo cliente é
persistente, ou seja, se o servidor sofrer uma queda, por exemplo,
após o servidor se levantar novamente o cliente pode continuar fazendo
requisições utilizando a mesma referência CORBA. Se o POA fosse
TRANSIENT (que é o default) e um cliente tentasse fazer uma requisição
após uma queda do servidor, tal cliente receberia uma exceção
OBJECT_NOT_EXIST.

Estou fazendo o seguinte:

     // o rootPOA é um poa persistente ou eu tenho que alterar aquelas
políticas?
     POA rootPoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
O Root POA não é PERSISTENT. Você terá que criar um novo POA com essa política.

     rootPoa.the_POAManager().activate();

     //estou registrando o servente nessa linha?
     rootPoa.servant_to_reference(this)
Se o POA onde você estiver registrando o servente estiver configurado
com a política IMPLICIT_ACTIVATION, acredito que isso é tudo o que
você precisa. Porém, se o POA estiver configurado com a política
NO_IMPLICIT_ACTIVATION, daí você vai precisar chamar activate_object
ou activate_object_with_id, dependendo da política de Id Assignment do
POA.


Valeu!

Abraços.

--
Ivan Neto