Nao consigo injetar um EJB3.1 em um jsf2.0! HELP! [RESOLVIDO]
14 respostas
F
fausto
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.
F
fausto
vc pode me mostrar qual a estrutura "padrao"de um ear?
pelo q entendi seria assim:
projeto.ear ejb.jar(ejb-jar.xml é opcional) /lib persistence.jar(JPA) ejb-client.jar(interfaces do ejb) outros jars quaisquer projWeb.war(com web.xml) /META-INF persistence.xml
esta correto?
rod
Fiz um exemplo no meu blog usando EJB injeto em servlet e esta tudo funcionando. Veja se te ajuda em algo.
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.
F
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?
rod
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?
Voce esta usando o glassfish v3 web profile ou o full?
F
fausto
Sabe que nao sei :lol: estou usando o que veio com o netbeans, apesar de rodar pelo eclipse.
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)
Não funciona… Já tentei sem parametros, usando o lookup e o name, mas nada ainda…
O que pode ser? o EJB e JSF estao todos no mesmo EAR
F
fausto
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.
Andre_Brito
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).
Como você resolveu?
F
fausto
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.
M
marceloscunha
fausto, estou como o mesmo problema você teve!
vc pode postar o seu web.xml e aplication.xml ?!
F
fausto
[email removido:
]fausto, estou como o mesmo problema você teve!
vc pode postar o seu web.xml e aplication.xml ?!
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
<?xml version='1.0' encoding='UTF-8'?><web-appversion="3.0"xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><display-name>FaceletsTutorial</display-name><description>NumberGuessGame</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>FacesServlet</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>FacesServlet</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></web-app>