LookUp de Stateful session bean não funfa =/

Boa tarde pessoal!

Então, tenho alguns beans no meu servidor (uso Jboss 4.2.2 e EJB3).
Esses beans são do tipo Stateless e consigo dar o lookup deles normalmente.
Gostaria muito de muda-los pra Stateful, mas ao trocar a Annotattion o lookup não funciona mais =/
O session bean é esse:

 @Stateless
@Remote(PedidoCompra.class)
@RemoteBinding(jndiBinding = "PedidoCompraBean")
public class PedidoCompraBean implements PedidoCompra{
...
}

Desse jeito funciona perfeitamente quando dou um lookup assim:

  Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
            env.put(Context.PROVIDER_URL, "127.0.0.1" + ":" + "1099");
            env.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");

            Context initctx = new InitialContext(env);
            pedidoCompraBean = (PedidoCompra) initctx.lookup("PedidoCompraBean");

Mas se eu trocar para Stateful o lookup nao funciona e joga um ClassCastException $Proxy (algum numero).

Ja tentei limpar o JBoss todo e reinicia-lo (nao necessariamente nessa ordem). Etc etc etc…
A sim, atualizei o Jar no cliente.

Alguem saberia me dizer ou suspeita o que esta gerando esse erro? E por que o ClassCastException?

Abraços!

tenta

Tentei e nada =/
Ta dando esse erro:

O tipo da Exception é um “NotContextException”.
Tem algo mais que devo configurar?!

Em alguns containers mesmo usando EJB3 você precisa fazer PortableRemoteObject.narrow().

No glassfish você não precisa, porém no OC4J você precisa. Veja se não é isso.

XXXX home = (XXXX) initctx.lookup("PedidoCompraBean"); PedidoCompra pedidoCompraBean = (PedidoCompra) PortableRemoteObject.narrow(home, PedidoCompra.class);

Sendo XXXX a classe do conteiner que o initctx.lookup te retornar, não lembro qual é de cabeça. Mas você pode descobrir fazendo um debug nesse método.

Cara, tbm não foi.
Tentei até usando thread e nada!
o lookup até retorna um objeto, anexei um debuger e verifiquei o valor do objeto a cada passo e o lookup retorna o tal $Proxy94 (as vezes esse número varia).
O que posso estar fazendo errado? =(
Pra Stateless funciona perfeitamente mas Stateful nem com reza brava =(

Mais uma pergunta: se eu não especificar o remote binding assim:

Qual era mesmo o padrão que devo montar a string no lookup?

Abraços.

Para fins de informação do problema.
O engraçado é notar que se eu colocar dessa forma:

Ele da um classCastException

Mas se eu colocar dessa forma:

Ele da um NotContextException =(

Tchello, da forma que te falei não tem como dar erro. Infelizmente não tenho jboss aqui para te passar certinho como fazer.

Mas enfim, faça isso aqui:

E me diga o que retornou. No OC4J ele me retornou uma interface proprietária do OC4J que extende EJBHome. Assim foi super simples fazer o create. Não entendo o porque disso, já que estamos no EJB3, e o EJBHome.create() deveria ser implicito pelo container.

Gracia, aquele sout ali ta retornando isso:

Esquisito, não?

Suspeito que eu tenha feito errado aquele narrow que sugeriu, ainda não entendi exatamente o que substituir pelo XXX seria um EJBHome? mas não tenho isso em EJB3, terei que cria-lo?
Na dúvida coloquei um Object.

Abraços.

Baseado naquela sugestão do narrow e no post anterior tentei assim:

Deu na mesma =/
Desculpem-me pela encheção, é que isso ta me quebrando a cabeça =/

Abraços.

Tchello, será que você não fez algo errado? Criei um projeto bem rápido aqui para você testar. Aqui rodou tudo direitinho usando EJB remoto e Stateful.

Interface do EJB

[code]@Remote
public interface EchoService {

String echo();

}[/code]

Implementação:

[code]@Stateful
@Remote(EchoService.class)
@RemoteBinding(jndiBinding = “EchoService”)
public class EchoServiceBean
implements EchoService {

@Override
public String echo() {
    return new Date().toString();
}

}[/code]

Classe de teste

[code]public class ServiceTesting {

@SuppressWarnings("unchecked")
public static void main(String[] args)
    throws Exception {
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
    env.put(Context.PROVIDER_URL, "127.0.0.1:1099");
    env.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");

    Context ctx = new InitialContext(env);
    EchoService echoService = (EchoService) ctx.lookup("EchoService");

    System.out.println(echoService.echo());
}

}[/code]

E por final rodando o método de teste resulta em:

Ahhh, mas peraí… você está usando Jboss 4.2.2, é? Não é essa versão do Jboss que possui um pseudo-suporte a EJB3? Você pode atualizar para a versão 5 ou tem que usar a 4.2.x?

Garcia, ta identico.
Temos até outros projetos aqui que usando Stateful beans e funcionam dessa forma, mas esse não quer de jeito nenhum =/
Esses outros rodam no JBoss 4.0.4 e eu to usando o 4.2.2 e nem há chances de muda-lo =/
Até gostaria muito de usar JBoss 5.1 mas tem um outro pacote que não sobe nele de jeito nenhum (precisa mudar um monte de xml).

Mais sugestões?

Exato…
To baixando o 4.2.3 e ver se funciona.
Se for o caso verificarei se funciona com o 4.0.4.
É que com o 5 eu teria que adaptar uns pacotes mto antigos e eu nem sei por onde começar. Tem dicas? fiquei um dia inteiro pesquisando e fazendo testes e nem por reza brava o ear subia no Jboss 5.

Abraços!