Pessoal, boa tarde. Tenho um Resource configurado para um contexto, realizando um pool de conexões com um banco Oracle 11g. Estou utilizando o seguinte código para obter a conexão:
Object o = new InitialContext().lookup("java:comp/env/jdbc/orcl");
out.println("--- Conexao com DataSource \n");
if( o instanceof DataSource ) {
out.println("Encontrado datasource. Recebendo conexão. \n");
DataSource ds = (DataSource) o;
Connection conexao = ds.getConnection();
out.println("Dados:" + conexao.getMetaData().getDatabaseMajorVersion());
conexao.close();
} else {
out.println("DataSource não foi encontrado\n");
if( o == null ) {
out.println("Busca do contexto retornou null \n");
}
}
Se eu utilizar uma JSP, o código roda com sucesso.
Se eu utilizar o mesmo código dentro de um controller do Spring, eu consigo verificar o seguinte erro no log do Tomcat
Name jdbc is not bound in this Context
org.apache.naming.NamingContext NamingContext.java 153 lookup
org.apache.naming.factory.ResourceLinkFactory ResourceLinkFactory.java 97 getObjectInstance
javax.naming.spi.NamingManager NamingManager.java 304 getObjectInstance
org.apache.naming.NamingContext NamingContext.java 793 lookup
org.apache.naming.NamingContext NamingContext.java 140 lookup
org.apache.naming.NamingContext NamingContext.java 781 lookup
org.apache.naming.NamingContext NamingContext.java 153 lookup
br.com.insoft.pool.ConnectionUtil ConnectionUtil.java 33 getConnection
Por que o resource fica disponível por uma JSP e por um Servlet não?
Deve ter outra coisa errada influenciando ai…pq o codigo do JNDI funciona transparentemente, desde que o o busca seje feito de um objeto sendo executado dentro do container…
Dentro do spring ou dentro de um servlet? To confuso :?
[quote=FernandoFranzini]Deve ter outra coisa errada influenciando ai…pq o codigo do JNDI funciona transparentemente, desde que o o busca seje feito de um objeto sendo executado dentro do container…
Dentro do spring ou dentro de um servlet? To confuso :? [/quote]
Pois é, eu também fiquei confuso…
Foi instalado o Probe naquele servidor, e o teste de conexão dele também funciona. Andei olhando o código e ele também está usando o Spring, a única diferença é que ele configurou por xml e eu usei annotations.
Olhando mais um pouco no log do tomcat, achei outro erro (logo ao subir o servidor):
06/09/2011 08:38:30 oracle.jdbc.driver.OracleDriver registerMBeans
SEVERE: Error while registering Oracle JDBC Diagnosability MBean.
javax.management.MalformedObjectNameException: Invalid character '
' in value part of property
at javax.management.ObjectName.construct(ObjectName.java:529)
at javax.management.ObjectName.<init>(ObjectName.java:1314)
at oracle.jdbc.driver.OracleDriver.registerMBeans(OracleDriver.java:303)
at oracle.jdbc.driver.OracleDriver$1.run(OracleDriver.java:213)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.jdbc.driver.OracleDriver.<clinit>(OracleDriver.java:209)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:242)
at java.sql.DriverManager.getCallerClass(DriverManager.java:442)
at java.sql.DriverManager.getDrivers(DriverManager.java:336)
at org.apache.catalina.loader.WebappClassLoader.clearReferences(WebappClassLoader.java:1578)
at org.apache.catalina.loader.WebappClassLoader.stop(WebappClassLoader.java:1496)
at org.apache.catalina.loader.WebappLoader.stop(WebappLoader.java:734)
at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4398)
at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:893)
at org.apache.catalina.startup.HostConfig.undeployApps(HostConfig.java:1180)
at org.apache.catalina.startup.HostConfig.stop(HostConfig.java:1151)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:313)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1055)
at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1067)
at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:448)
at org.apache.catalina.core.StandardService.stop(StandardService.java:510)
at org.apache.catalina.core.StandardServer.stop(StandardServer.java:734)
at org.apache.catalina.startup.Catalina.stop(Catalina.java:602)
at org.apache.catalina.startup.Catalina.start(Catalina.java:577)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)