Saber todos os nomes JNDI disponíveis no Contexto atual

Galera,

Gostaria de saber se existe uma maneira de pegar todos os nomes disponíveis no JNDI no Contexto atual.
Imagino algo como:

getServletContext().getJndiNames();

E o retorno como:

java:comp/env/BeanManager
java:comp/env/jdbc
etc…

Obrigado!!

Tenta…

ctx.list("");

Por coincidência estou estudando EJB 3.1 neste exato momento, me perguntando pq o cara da apostila consegue acessar o objeto remoto dele e eu não…

Daí pesquisei e achei um codigozinho fácil:

É exatamente o que procurava.
Galera fiz o seguinte:

new InitialContext().list("java:comp/env/") 
// me retornou o BeanManager (do CDI Weld).

E então:

new InitialContext().lookup("java:comp/env/BeanManager");

No JBoss funcionou perfeitamente.
No Tomcat 7 me retornou o erro abaixo. Como o código de listagem me retornou o BeanManager, não teria que funcionar??

javax.naming.NamingException: Cannot create resource instance
    at org.apache.naming.factory.ResourceEnvFactory.getObjectInstance(ResourceEnvFactory.java:117)
	at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:843)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:168)
	at org.apache.naming.SelectorContext.lookup(SelectorContext.java:158)
	at javax.naming.InitialContext.lookup(Unknown Source)
	at com.teste.controller.TesteCDI3.doGet(TesteCDI3.java:31)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at com.teste.ServletObjectsRequestFilter.doFilter(ServletObjectsRequestFilter.java:39)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

[quote=CodeDeveloper]É exatamente o que procurava.
Galera fiz o seguinte:

new InitialContext().list("java:comp/env/") 
// me retornou o BeanManager (do CDI Weld).

E então:

new InitialContext().lookup("java:comp/env/BeanManager");

No JBoss funcionou perfeitamente.
No Tomcat 7 me retornou o erro abaixo. Como o código de listagem me retornou o BeanManager, não teria que funcionar??
[/quote]

Não, o Tomcat 7 não suporta CDI nativamente como o JBoss. Por isso deu o erro.

[quote=Ataxexe]
Não, o Tomcat 7 não suporta CDI nativamente como o JBoss. Por isso deu o erro.[/quote]

Mesmo que ele esteja configurado corretamente para implementar o CDI (context.xml, web.xml, jars do weld e etc) não é possível pegar o BeanManager via lookup?
Se não, você teria uma explicação simples para que eu possa entender o porque?

Iria ajudar muito!!
Obrigado.

[quote=CodeDeveloper][quote=Ataxexe]
Não, o Tomcat 7 não suporta CDI nativamente como o JBoss. Por isso deu o erro.[/quote]

Mesmo que ele esteja configurado corretamente para implementar o CDI (context.xml, web.xml, jars do weld e etc) não é possível pegar o BeanManager via lookup?
Se não, você teria uma explicação simples para que eu possa entender o porque?

Iria ajudar muito!!
Obrigado.[/quote]

O JNDI do Tomcat é read-only, então, você precisa configurar algumas coisas pra conseguir fazer o lookup do BeanManager.

Dê uma olhada na documentação:

http://docs.jboss.org/weld/reference/1.0.0/en-US/html/environments.html#d0e4998

Ataxexe,

Agora consegui. O problema é que o context.xml estava na raiz da aplicação, e não no WEB-INF/classes como deveria.

Agradeço a ajuda de todos!