Lookup de EJB3 no Glassfish

4 respostas
D

Pessoal,

Tenho um EAR com um módulo EJB3 e um módulo WEB.

No módulo EJB, criei um simples EJB da seguinte forma:

EJB1Local.java:

package services;
import javax.ejb.Local;

@Local
public interface EJB1Local {

	public String getOi(String nome);
	
}

EJB1Bean.java:

package services;

import javax.ejb.Stateless;

/**
 * Session Bean implementation class EJB1
 */
@Stateless(mappedName="ejb/EJB1Bean", name="EJB1Bean")
public class EJB1 implements EJB1Local {

    /**
     * Default constructor. 
     */
    public EJB1() {
        // TODO Auto-generated constructor stub
    }

    public String getOi(String nome){
    	return "oi " + nome;
    }
    
}

Não criei um ejb-jar.xml ou sub-ejb-jar.xml.

No módulo WEB, do mesmo EAR, estou tentando fazer um lookup deste EJB, mas não consigo de maneira nenhuma.

Alguém sabe se há como eu descobrir quais são as entradas JNDI disponíveis no meu Glassfish para identificar o jndiName deste EJB ou mesmo ver se ele foi implantado corretamente?

Já procurei no Admin Console do Glassfish e vi que o EAR está implantado e os módulos EJB e WEB estão dentro dele, mas em lugar algum achei uma lista dos jndiName`s disponíveis.

Alguém sabe?

Obrigado

4 Respostas

G

Eu já havia respondido isso hoje mesmo nesse link…

http://www.guj.com.br/posts/preList/142928/770661.java#770661

D

garcia-jj:
Eu já havia respondido isso hoje mesmo nesse link…

http://www.guj.com.br/posts/preList/142928/770661.java#770661

Segundo este link, o meu exemplo se encaixaria no item 3 da pergunta “How are Global JNDI names assigned to Session / Entity beans?”:

Porém, se eu tento o seguinte, de algum servlet do meu módulo WEB, que está no mesmo EAR deste EJB:

Context context = new InitialContext();
Object reference = context.lookup("ejb/EJB1Bean");
// ou
Object reference = context.lookup("EJB1Bean");
// ou
Object reference = context.lookup("NomeDoEar/ejb/EJB1Bean");
// ou
Object reference = context.lookup("NomeDoEar/EJB1Bean");

Todos (tentando um de cada vez, claro) lançam uma NameNotFoundException.

Alguma sugestão?

D

Estava testando agora e percebi que trocando a interface de Local para Remote, o lookup funciona sem problemas…

Não é possívek fazer isto com a interface local?

G

Diego, realmente nunca usei lookup local no glassfish. Todos meus beans que preciso usar locais são feitos via injeção de dependencias. Qualquer bean que possua ciclo de vida controlado pelo container pode usar injeçao (vide servlets, filter, session beans, mdbs).

@EJB(name="fooejbref", beanInterface=FooLocal.class)

Conforme a documentação se você quer fazer lookup de beans locais é necessário usar a árvore local:

context.lookup("java:comp/env/ejb/my.package.myclass");

https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html#POJOLocalEJB

Faça um teste e me dê um feedback. Abraços

Criado 29 de outubro de 2009
Ultima resposta 30 de out. de 2009
Respostas 4
Participantes 2