Funciona normalmente, porém quando tento acessar esse SessionBean a partir do TomCat com o mesmo código e utilizando as bibliotecas do JBoss, Ocorre um “java.lang.NoSuchMethodException: javax.ejb.EJBObject.getPrimaryKey()” , o que significa que o lookup está tentando pegar um Ejb do tipo EntityBean e não um SessionBean.
O que eu pergunto é : Porque o TomCat encara esse Session Bean como um Entity bean ?
Existe alguma forma de informar o TomCat antes de realizar o lookup() que o objeto que ele irá buscar é um Session Bean ?
Eu sei que o tomcat não é um servidor de aplicao. Eu não to tentando fazer deploy do ejb no tom cat. Eu to tentando acessar remotamente um objeto Sessionbean localizado na máquina virtual iniciada pelo JBoss() por meio daquela implementação.
Já conseguir localizar o jndi do jboss que representa esse objeto remoto, mas o problema é que ele por definição(talvez) encara um ejb como do tipo EntityBean, e é um SessionBean. Daí na hora do lookup ele chama o método getPrimaryKey() do Entity Bean , e como o Session bean não apresenta esse método dá
Hum, você quer acessar da camada Web um Entity Bean ou um SessionBean? Verifique o JNDI que vc esta passando para o lookup…
Funciona se estiver rodando no JBoss?
Cara, eu tive sérios problemas ao tentar acessar os EJBS quando utilizei dois servidores.
Módulo WEB no Tomcat standalone
Módulo EJB no JBoss standalone
E não consegui NEM A PAU.
Estou esperando terminar o semestre pra correr atrás dessas informações… mas eu acho que aqui… você não vai encontrar ajuda. Ao passo que na época que eu precisei, não apareceu ninguém.
Hashtable environment = new Hashtable();
environment.put(Context.INITIAL_CONTEXT_FACTORY, “org.jnp.interfaces.NamingContextFactory”);
environment.put(Context.URL_PKG_PREFIXES, “org.jboss.naming:org.jnp.interfaces”);
environment.put(Context.PROVIDER_URL, “jnp://10.10.30.36:1099”);
Context ctx = new InitialContext(environment);
Object o = ctx.lookup(jndi);
InstanciaSessionHome home = (InstanciaSessionHome )PortableRemoteObject.narrow(o, br.gov.etc.fachada.InstanciaSessionHome.class);
instancia = home.create();
Com esse codigo vc pode acessar qualquer jdni presente no JBoss. Se no souber o nome do jndi voc pode usar o metodo :
NamingContext teste = (NamingContext) ctx.lookup(’’/’’):
teste.list(’’/’’); (Voce executa esse codigo com inspect!)