[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?
- Subject: Re: [reverbel-sma] 1) tenho q me preocupar com ClassLoader 2) POA persistente! O que é isso?
- From: "Ivan Neto" <ivanneto@xxxxxxxxx>
- Date: Sat, 21 Oct 2006 19:22:42 -0300
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