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

Re: Desespero total



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