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

Re: Prefixo automático



Hmm... Esta resposta vai ser longa...

Se você especifica (no jboss.xml) que o seu bean usa IIOP, o comportamento
default do JBoss é registrar o home do bean em dois lugares:

(1) no contexto raiz do serviço de nomes CORBA
(2) no serviço de nomes JNP do JBoss, no subcontexto especificado
    pelo elemento jnp-context do jboss.xml ou do standardjboss.xml. 
    O standardjboss.xml define <jnp-context>iiop</jnp-context>.

Você pode pegar o home com um lookup JNDI em (1) ou com um lookup JNDI
em (2). Para pegar o home de (1), faça algo como

  Properties props = new Properties();
  props.add("java.naming.factory.initial", 
            "com.sun.jndi.cosnaming.CNCtxFactory");
  props.add("java.naming.provider.url",
            "corbaloc::server.host.name:3528/JBoss/Naming/root");
  Context ctx = new InitialContext(props);
  Object homeRef = ctx.lookup("MyEJBName"); // com prefixo "iiop"
  MyEJBHome home = 
     (MyEJBHome) PortableRemoteObject.narrow(homeRef, MyEJBHome.class);

Para pegar o home de (2), faça algo como

  Context ctx = new InitialContext(); // construtor sem args
  Object homeRef = ctx.lookup("iiop/MyEJBName"); // sem prefixo "iiop"
  MyEJBHome home = 
     (MyEJBHome) PortableRemoteObject.narrow(homeRef, MyEJBHome.class);

Para tirar o prefixo "iiop" de (2), faça algo assim no jboss.xml:

<jboss>

  <enterprise-beans>
    <session>
      <ejb-name>...</ejb-name>
      <jndi-name>...</jndi-name>
      <configuration-name>Standard Stateful SessionBean</configuration-name>
      <invoker-bindings>
        <invoker>
          <invoker-proxy-binding-name>custom-iiop</invoker-proxy-binding-name>
        </invoker>
      </invoker-bindings>
    </session>
  </enterprise-beans>

  <invoker-proxy-bindings>
    <invoker-proxy-binding>
      <name>custom-iiop</name>
      <invoker-mbean>jboss:service=invoker,type=iiop</invoker-mbean>
      <proxy-factory>org.jboss.proxy.ejb.IORFactory</proxy-factory>
      <proxy-factory-config>
        <web-class-loader>org.jboss.iiop.WebCL</web-class-loader>
        <poa>per-servant</poa>
        <register-ejbs-in-jnp-context>true</register-ejbs-in-jnp-context>
        <jnp-context></jnp-context>
      </proxy-factory-config>
    </invoker-proxy-binding>
  </invoker-proxy-bindings>

</jboss>

Note que o bean usa um invoker-proxy-binding customizado que define 
o elemento jnp-context como vazio. Essa é uma maneira de tirar o prefixo 
"iiop" do binding do home. A outra maneira (mais simples) é não definir 
um jnp-context na proxy-factory-config.

Reverbel

On Fri, Dec 03, 2004 at 08:37:34PM -0200, Giuliano Mega wrote:
>    Oi pessoal,
> 
>    Alguém aí conhece um jeito de impedir que o JBoss insira um prefixo 
> "iiop" no binding JNDI que eu especifiquei para o meu bean no 
> jboss.xml?? Aparentemente ele faz isso automaticamente quando você usa o 
> invoker iiop.
> 
>    Abraços,
> 
>       Giuliano
>