Eu fiz um projeto para JPA2.0, um para EJB3.1 (acessando o jpa) e um outro projeto JSF2.0 que tenta acessar o EJB usando o @EJB.
Todos os projetos rodam jUnit e estão ok, inclusive quando faco deploy da aplicação(todos dentro do mesmo EAR) no glassfishv3 ele mostra o jndi do meu ejb.
Acontece que ele não injeta (instancia) o ejb dentro do meu managedBean e não dá erro algum, apenas lança um nullpointer quando tento executar um de seus métodos.
Vou chutar alguma coisa aqui… provavelmente estou falando caca. Quando você injeta, ele não é criado até terminar o construtor. A annotation @PostConstruct pode dar uma ajuda (disponível aqui). Sei lá cara, veja o ciclo de vida (com debugger mesmo) desse ManagedBean ou algo do gênero.
acontece que quando esse cEjb é chamado ele está como null. Até tentei passar os valores que sairam no console nos atributos “name” e “lookup” do @EJB mas nada funcionou.
Alguma sugestao?
obs: fora o nullpointer quando tento usar o cEjb nao ocorre nenhum outro erro na aplicacao.
Adicionei o @PostConstruct mas ele não cai dentro do método… Ele deveria ser chamado durante o deploy ou ao ser chamado em algum objeto?
Por ele nao entrar no @PostConstruct dá a entender que não estão funcionando meus ejb, mas durante o deploy seus nomes aparecem, inclusive se adiciono o mappedName=“testeCustomerEJB” ele mostra depois no console o ejb com este nome para jndi.
[quote=fausto]Adicionei o @PostConstruct mas ele não cai dentro do método… Ele deveria ser chamado durante o deploy ou ao ser chamado em algum objeto?
Por ele nao entrar no @PostConstruct dá a entender que não estão funcionando meus ejb, mas durante o deploy seus nomes aparecem, inclusive se adiciono o mappedName=“testeCustomerEJB” ele mostra depois no console o ejb com este nome para jndi.
Alguma sugestão?[/quote]
Voce esta usando o glassfish v3 web profile ou o full?
Sabe que nao sei :lol: estou usando o que veio com o netbeans, apesar de rodar pelo eclipse.
O estranho é que usando:
Context ctx = new InitialContext();
cEjb = (CustomerEJBRemote) ctx.lookup("testeCustomerEJB");
Ele consegue achar o ejb e funciona tudo normal, inclusive chamando o @PostConstrut (inclusive ele só é chamado qdo executo algum metodo do bean e não quando consigo uma referencia a ele)
Consegui fazer funcionar aqui, mas estranhamente ele dá erro quando chamo o ejb no construtor do ManagedBean, existe alguma razão para isto? Se chamo de algum método funciona corretamente.
Acho que tem sim… Só é injetado depois de terminar o construtor (vide o meu primeiro comentário - eu tirei aquilo ou algo parecido com aquilo da documentação do JBoss, na parte de EJB 3).
Acho que foi a descrição dos web.xml e application.xml. O eclipse criou configurando p versões antigas do j2ee. Eu criei um projeto no netbeans testei e vi que funcionava, ai copiei as configuracoes p meu projeto no eclipse.
Estranho q fiz um projeto web no netbeans e ele nem criou o web.xml, mas funciona o jsf! Tipo não tá configurado o servlet e o caminho faces/* já que não existe o web.xml, mas funciona mesmo assim!! Mas isso já é outra coisa. O problema do ejb foi resolvido.
[quote=marceloscunha@gmail.com]fausto, estou como o mesmo problema você teve!
vc pode postar o seu web.xml e aplication.xml ?! [/quote]
Opa Marcelo, resgatou esse tópico hem :lol:
Então, fucei aqui e achei o projeto que estava usando de teste. No final das contas foi decidido não usar ejb nos projetos, então estou a mais de 1 ano sem brincar com ele. Eu sugiro que você tente gerar os projetos pelas últimas versões das IDEs, o netbeans mesmo tem wizards muitos bons para isso. Na época que mexi o jee6 era novidade e por isso tinha alguns problemas para configurar, mas hoje as IDEs devem conseguir. De qualquer forma segue abaixo o web.xml e application.xml
[code]<?xml version='1.0' encoding='UTF-8'?>
<display-name>Facelets Tutorial</display-name>
<description>Number Guess Game</description>
<!-- Change to "Production" when you are ready to deploy -->
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<!-- Faces Servlet -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Faces Servlet Mapping -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<!-- welcome file mapping -->
<welcome-file-list>
<welcome-file>faces/hello.xhtml</welcome-file>
</welcome-file-list>