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



On 10/21/06, Ivan Neto <ivanneto@xxxxxxxxx> wrote:
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

Oi Ivan.

Há algum problema em usar um default servant? (eu crio um POA com as
policies adequadas e chamo o set_servant).

Estou obtendo o rootPoa via jndi ("java:/" +
CorbaORBService.POA_NAME), imagino que seja equivalente a usar o
resolve_initial_references. Está certo?

Obrigado;
--
Rafael de F. Ferreira.