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

Re: (Ainda) Duvidas no EP2



Olá Daniel.

Desculpe a demora para responder. Estou enviando a resposta para a
lista, pois talvez ela seja útil para outros alunos.

On 10/27/06, Daniel Creão <ldaugusto@xxxxxxxxx> wrote:
...
1) Meu JavaIIOPInvoker estende de ServiceMBeanSupport e não de InvokerPOA,
como tradicionalmente fizemos em SOD. Em uma mensagem você disse que
deveriamos usar InvokerPOATie nesses casos. Então dentro do startService()
quando estiver definindo as políticas do POA, devo fazer igual ao código
abaixo?

            POA invoker_poa =
rootPOA.create_POA("invokerPOA",rootPOA.the_POAManager(),policies);
            InvokerPOATie poatie = new InvokerPOATie(this, invoker_poa);
Eu faria assim:

     InvokerPOATie invokerPOATie = new InvokerPOATie(this);
     invoker_poa.activate_object(invokerPOATie);
     org.omg.CORBA.Object ref =
invoker_poa.servant_to_reference(invokerPOATie);

Não consegui achar muita informação sobre esse construtor que você
utilizou. Só achei o seguinte:

"public <interface>POATie (final <interface>Operations _delegate,
final org.omg.PortableServer.POA _poa)

     The constructor which initializes the delegate object and the
default POA servant."

Portanto, acho que esse método não faz a mesma coisa que o código que
eu coloquei acima.

2) Em uma das mensagens, comentando sobre o JavaIIOPInvokerProxy, você
disse: "Seu invoker precisa implementar java.io.Externalizable e
org.jboss.invocation.Invoker". A IDL passada para o EP cria um
org.jboss.invocation.javaiiop.Invoker . Não ficou claro pra
mim pq JavaIIOPInvokerProxy não deve implementar a classe gerada no IDL.
Além disso, o InvokerProxy deve ter 'remoteInvoker' que é (aí sim)
org.jboss.invocation.javaiiop.Invoker e não
org.jboss.invocation.Invoker , certo? Afinal é a interface que o MBean
implementa...
Quem precisa implementar  java.io.Externalizable e
org.jboss.invocation.Invoker é o invoker proxy. Ele precisa
implementar org.jboss.invocation.Invoker porque é essa interface que o
stub gerado pelo servidor de aplicações espera de um invoker proxy.
Todos os invoker proxies, independentemente do protocolo utilizado na
comunicação com o servidor, implementam essa mesma interface
(org.jboss.invocation.Invoker). Se você observar o
org.jboss.invocation.jrmp.interfaces.JRMPInvokerProxy, vai ver que ele
também implementa a interface em questão.

A interface "org.jboss.invocation.javaiiop.Invoker", que foi gerada
pelo compilador IDL, deve ser implementada por um servente CORBA do
lado servidor (esse servente provavelmente será a mesma classe que
implementa as operações do seu MBean).

3) Como ainda não consegui testar corretamente, fiquei com uma dúvida
básica: assim como uma aplicação CORBA 'cliente', JavaIIOPInvokerProxy vai
iniciar um ORB e pegar no JNDI a referencia ao JavaIIOPInvoker? Fiquei com
essa dúvida pq JRMPInvokerProxy não é um objeto remoto.
Sim e não. Sim, o JavaIIOPInvokerProxy vai iniciar um ORB. Porém, ele
não vai "pegar no JNDI a referencia ao JavaIIOPInvoker". É por isso
que o JavaIIOPInvokerProxy precisa  implementar
java.io.Externalizable. O JavaIIOPInvokerProxy é transmitido para o
cliente através de seriação Java, e junto o invoker proxy seriado vai
a IOR para o servente CORBA que fica do lado servidor. Portanto, a IOR
é transmitida juntamente com o objeto seriado, e assim não há
necessidade de um lookup no JNDI.

4) JavaIIOPInvoker, JavaIIOPInvokerMBean e JavaIIOPInvokerProxy são
realmente as únicas classes que devemos implementar?
Vocês terão que implementar: (1) o invoker proxy, (2) o servente CORBA
e (3) o MBean. Tudo isso pode ser implementado nas três classes que
você mencionou acima, mas as classes de cada implementação podem (e
provavelmente vão) variar.

Abraços.

--
Ivan Neto