[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
Re: Desespero total
- Subject: Re: Desespero total
- From: Francisco Reverbel <reverbel@xxxxxxxxxx>
- Date: Sun, 12 Dec 2004 16:14:34 -0200
On Sat, Dec 11, 2004 at 08:44:29PM -0200, Danilo Conde wrote:
> Eu estava usando o serviço de nomes do CORBA (*) no SA2 para pegar a
> referência do EJB no SA1. Aparentemente, tudo funcionava, mas desse
> jeito aí, o único interceptador que eu via ser chamado era o
> TxServerInterceptor. Os outros dois eu não vi serem chamados nenhuma
> vez...
Eles não são chamados porque a fábrica de contextos precisa registrar
com algum ORB os stubs que representam contextos CORBA remotos, mas
ela não conhece o ORB do JBoss, que tem os interceptadores. Por isso
ela dá ORB.init(...) e obtém uma nova instância de ORB, sem interceptador
algum!
Uma maneira de corrigir isso é setar uma propriedade informando à classe
com.sun.jndi.cosnaming.CNCtxFactory qual o ORB que ela deve usar:
Context initialCtx = new InitialContext();
java.util.Hashtable env = new java.util.Hashtable();
env.put("java.naming.factory.initial",
"com.sun.jndi.cosnaming.CNCtxFactory");
env.put("java.naming.provider.url",
"corbaloc::server.host.name:port/JBoss/Naming/root");
env.put("java.naming.corba.orb", initialCtx.lookup("java:comp/ORB"));
Context remoteContext = new InitialContext(env);
Object objref = remoteContext.lookup("NomeDoSeuEJB");
SeuEJBHome home = (SeuEJBHome)
PortableRemoteObject.narrow(objref, SeuEJBHome.class);
A propriedade java.naming.corba.orb faz toda a diferença aqui.
O valor dessa propriedade deve ser o ORB do servidor de aplicações,
associado a "java:comp/ORB" no contexto de nomes inicial.
Tem uma maneira bem mais limpa de fazer isso. Vou mandar um email
separado sobre ela.
Reverbel