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!!
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!