Loja Virtual completa - WebService Category - Erro - Caused by: javax.naming.NamingException: Error retrieving java:comp/BeanManager

Java

23/03/2011

Pessoal,
Estou na aula do WebService category e ocorre o seguinte erro ao rodar a aplicação:
GRAVE: javax.naming.NamingException: Lookup failed for 'java:comp/BeanManager' in SerialContext  [Root exception is javax.naming.NamingException: Error retrieving java:comp/BeanManager [Root exception is java.lang.IllegalStateException: Cannot resolve bean manager]]        at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:442)        at javax.naming.InitialContext.lookup(InitialContext.java:392)        at javax.naming.InitialContext.lookup(InitialContext.java:392)        at br.com.CDI.ManualCDILookup.getBeanManager(ManualCDILookup.java:34)        at br.com.CDI.ManualCDILookup.getFacadeWithJNDI(ManualCDILookup.java:23)        at br.com.ws.CatedoryRestWS.<init>(CatedoryRestWS.java:43)        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)        at java.lang.Class.newInstance0(Class.java:355)        at java.lang.Class.newInstance(Class.java:308)        at com.sun.jersey.server.spi.component.ResourceComponentConstructor._construct(ResourceComponentConstructor.java:170)        at com.sun.jersey.server.spi.component.ResourceComponentConstructor.construct(ResourceComponentConstructor.java:159)        at com.sun.jersey.server.impl.resource.PerRequestFactory$PerRequest._getInstance(PerRequestFactory.java:179)        at com.sun.jersey.server.impl.resource.PerRequestFactory$AbstractPerRequest.getInstance(PerRequestFactory.java:141)        at com.sun.jersey.server.impl.application.WebApplicationContext.getResource(WebApplicationContext.java:181)        at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:66)        at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:133)        at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:71)        at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:990)        at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:941)        at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:932)        at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:384)        at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:451)        at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:632)        at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)        at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)        at java.lang.Thread.run(Thread.java:662)Caused by: javax.naming.NamingException: Error retrieving java:comp/BeanManager [Root exception is java.lang.IllegalStateException: Cannot resolve bean manager]        at org.glassfish.weld.BeanManagerNamingProxy.handle(BeanManagerNamingProxy.java:131)        at com.sun.enterprise.naming.impl.NamedNamingObjectManager.tryNamedProxies(NamedNamingObjectManager.java:84)        at com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:153)        at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:428)        ... 50 moreCaused by: java.lang.IllegalStateException: Cannot resolve bean manager        at org.glassfish.weld.BeanManagerNamingProxy.handle(BeanManagerNamingProxy.java:121)        ... 53 more


Segue o código que faz o lookp:
public abstract class ManualCDILookup {
    public <T> T getFacadeWithJNDI(Class<T> classToFind) {        BeanManager bm = getBeanManager();        Bean<T> bean = (Bean<T>) bm.getBeans(classToFind).iterator().next();        CreationalContext<T> ctx = bm.createCreationalContext(bean);        T dao = (T) bm.getReference(bean, classToFind, ctx); // this could be inlined, but intentionally left this way        return dao;    }
    public BeanManager getBeanManager()    {        try{            InitialContext initialContext = new InitialContext();            return (BeanManager) initialContext.lookup("java:comp/BeanManager");        }        catch (NamingException e) {            e.printStackTrace();            return null;        }    }
}
Valeu Pessoal,
Noésio Souza

Noésio Souza

Curtidas 0

Respostas

Dyego Carmo

Dyego Carmo

23/03/2011

Eu disponibilizei o codigo fonte desta aplicacao em meu devspace ,
De uma baixada e verifique o que pode estar diferente ;)
Abracos !
GOSTEI 0
Noésio Souza

Noésio Souza

23/03/2011

Olá Dyego,
Parabéns por esse trabalho que você está fazendo, com certeza está beneficiando várias pessoas que pretendem entrar no Mundo JAVA.

Cara simplismente o lookup não funciona.
Cheguei a criar até um projeto (bem mais simples) só pra rodar o lookup e mesmo assim não funcionou.
Alguns livros que andei lendo diz que
Essa exceção ocorre qundo a classe InitialContext não tem propriedades-padrão para o provedor de serviços JNDI, e as propriedades do servidor JNDI não foram configuradas explicitamente.
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
E
Essa exceção ocorre quando o caminho de classes denifido para o programa JNDI não inclui as classes do servidor JNDI.
javax.naming.NamingException: Lookup failed for 'java:comp/BeanManager' in SerialContext  [Root exception is javax.naming.NamingException: Error retrieving java:comp/BeanManager [Root exception is java.lang.IllegalStateException: Cannot resolve bean manager]]

********************************************************************************************Resumindo : 
*********************************Criei o bean :*********************************************
package ejb;
import javax.ejb.Stateless;
/** * * @author USERNOT */@Statelesspublic class MeuBean {        // Add business logic below. (Right-click in editor and choose    // "Insert Code > Add Business Method") }
****************************Criei o ManualCDILookup******************************************
package CDI;
import javax.enterprise.context.spi.CreationalContext;import javax.enterprise.inject.spi.Bean;import javax.enterprise.inject.spi.BeanManager;import javax.naming.InitialContext;import javax.naming.NamingException;

/** * * @author USERNOT */public abstract class ManualCDILookup {
    public <T> T getFacadeWithJNDI(Class<T> classToFind) {        BeanManager bm = getBeanManager();        Bean<T> bean = (Bean<T>) bm.getBeans(classToFind).iterator().next();        CreationalContext<T> ctx = bm.createCreationalContext(bean);        T dao = (T) bm.getReference(bean, classToFind, ctx); // this could be inlined, but intentionally left this way        return dao;    }
    public BeanManager getBeanManager()    {        try{            InitialContext initialContext = new InitialContext();            return (BeanManager) initialContext.lookup("java:comp/BeanManager");        }        catch (NamingException e) {            e.printStackTrace();            return null;        }    }
}
************************Estou executando a classe que chama o lookup******************************
package CDI;
import ejb.MeuBean;import javax.inject.Inject;
/** * * @author USERNOT */public class GetJNDI extends ManualCDILookup{
    @Inject    private MeuBean bean;
    public void getJNDI(){        bean = getFacadeWithJNDI(MeuBean.class);    }
}
**********************E simplesmente dá erro*******************************************************
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)        at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)        at javax.naming.InitialContext.lookup(InitialContext.java:392)        at CDI.ManualCDILookup.getBeanManager(ManualCDILookup.java:33)        at CDI.ManualCDILookup.getFacadeWithJNDI(ManualCDILookup.java:22)        at CDI.GetJNDI.getJNDI(GetJNDI.java:21)        at CDI.MainLookup.main(MainLookup.java:20)Exception in thread "main" java.lang.NullPointerException        at CDI.ManualCDILookup.getFacadeWithJNDI(ManualCDILookup.java:23)        at CDI.GetJNDI.getJNDI(GetJNDI.java:21)        at CDI.MainLookup.main(MainLookup.java:20)Java Result: 1CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

************************Detalhe****************************************************************
O que eu encontrei de diferente entre o seu fonte e o que estou criando é um Beans.xml, que criei depois e mesmo assim não funcionou.

A versão do NetBeans que estou utilizando é a 6.9.1, / GlassFish 3 
*******************E a pergunta que fica é!****************************************************
O que está faltando configurar?

Obrigado!
 
GOSTEI 0
Davi Costa

Davi Costa

23/03/2011

Posta  aqui o beans.xml... p ver se n tem como ajudar.

att Davi
GOSTEI 0
Noésio Souza

Noésio Souza

23/03/2011

Segue o xml...
beans.xml
<?xml version="1.0" encoding="UTF-8"?><beans 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/beans_1_0.xsd"></beans>

Valeu! Davi
 
GOSTEI 0
Dyego Carmo

Dyego Carmo

23/03/2011

Isto ocorre nos testes ou com app em execucao ?
GOSTEI 0
Noésio Souza

Noésio Souza

23/03/2011

E ai Dyego, blz!
Não sei se você esta se referindo aos testes unitários com jUnit, se for neles, tá tudo ok, aquele mini container roda legal, sem problemas.Na aplicação (Deployment) não funciona.E no exemplo acima estou criando um public static void main, também não funciona.
No que percebi tem alguma configuração implicita que está faltando.
No livro PADRÕES DE PROJETO EJB -"Floyd Marrinescu" onde fala sobre Padrões de interação EJB do lado do cliente, tem alguns exemplos, mas utiliza outros servidores, no que entendi a configuração é diferente, e percebi que normalmente é utilizado um xml para JNDI.
Quando eu estava na aula WebService Category, já não funcionou, então optei em dar andamento nas aulas em quanto fazia algumas pesquisas para resolver o problema, mas quando chegou na aula de cadastro de produto quando tem que fazer um convert e o lookup é manual, nesse momento travou as quatro rodas e até agora não destravou...
Valeu.
GOSTEI 0
Dyego Carmo

Dyego Carmo

23/03/2011

Tentou pegar o codigo fonte ? Esta na aula 96 !!!

Valeu !

GOSTEI 0
Noésio Souza

Noésio Souza

23/03/2011

Olá Diego,
Eu peguei o código fonte, porém o que estou procurando é uma resposta "Por que não consigo fazer o lookp manual?" partindo de um projeto onde estou construindo desde o inicio, isto é, ter o código fonte pronto se torna simples, o problema é na hora de dar manutenção.
Obrigado!
GOSTEI 0
POSTAR