Tomcat 6, JSTL e Oracle 10g: funciona e não funciona

Configurei um pool de conexão no Tomcat apontando para o banco de dados Oracle, conforme descrito a seguir.

1) copiei o arquivo ojdbc14.jar para CATALINA_HOME/lib;
2) adicionei o pool no arquivo CATALINA_HOME/conf/context.conf

<Resource name="jdbc/myoracleDB" auth="Container" type="javax.sql.DataSource"
               maxActive="10" maxIdle="3" maxWait="5000"
               username="usuario" password="senha" driverClassName="oracle.jdbc.OracleDriver"
               url="jdbc:oracle:thin:@oracleserver1:1521:orcl"/>

3) Na aplicação de exemplos do próprio Tomcat (/examples) adicionei o pool no web.xml:

<resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/myoracleDB</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
</resource-ref>

4) Adicionei uma página JSP de teste na aplicação de exemplos (/examples) do próprio Tomcat:

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<sql:query var="rs" dataSource="jdbc/myoracleDB">
 SELECT 
   Trunc(Trunc(SYSDATE,'MONTH')-1,'MONTH') inicio_mes 
 FROM 
   dual
</sql:query>
<html>
  <head>
    <title>DB Test</title>
  </head>
  <body>

  <h2>Results</h2>
  
<c:forEach var="row" items="${rs.rows}">
    Inicio do mes: ${row.inicio_mes}<br/>
&lt;/c:forEach&gt;

  &lt;/body&gt;
&lt;/html&gt;

Até aqui funcionou, sem problemas!

Refiz os passos acima para outra aplicação minha e não funcionou!
Acusa o seguinte erro:

javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: 
 "java.sql.SQLException: No suitable driver found for jdbc/myoracleDS"

Googlando um pouco, achei a seguinte sugestão: adicionar à CATALINA_HOME/lib os commons DBCP, Pool e Collection.
Segui a sugestão, mas sem sucesso.

Alguma luz no fim do túnel?

Não sou um expert, estou apenas iniciando em Java, mas
ACHO que vc não está criando pool de conexões como vc falou…

Siga esse exemplo (não é web, mas é bem fácil
pra adaptar):

Qual versão do compilador Java que vc tá usando?
Se for 6, sugiro que vc troque o ojdbc14.jar pelo
ojdbc6.jar, disponível pra download no site da Oracle.

  javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid:   
  "java.sql.SQLException: No suitable driver found for jdbc/myoracleDS"  

parece que o driver de conexao não esta no CLASSPATH.

[]´s

Qual versão do driver do Oracle 10g você está usando?
Veja esta nota.

Se o driver for de versão anterior a 10.3, deve-se usar outra classe de conexão: oracle.jdbc.driver.OracleDriver

[quote=MiltonBastos]Não sou um expert, estou apenas iniciando em Java, mas
ACHO que vc não está criando pool de conexões como vc falou…

Siga esse exemplo (não é web, mas é bem fácil
pra adaptar):

Qual versão do compilador Java que vc tá usando?
Se for 6, sugiro que vc troque o ojdbc14.jar pelo
ojdbc6.jar, disponível pra download no site da Oracle.

[/quote]

JAVA
java version “1.6.0_01”
Java™ SE Runtime Environment (build 1.6.0_01-b06)
Java HotSpot™ Client VM (build 1.6.0_01-b06, mixed mode, sharing)

ojdbc6.jar
Oracle 11.1.0.6.0-Production+ JDBC 4.0 compiled with JDK6

A aplicação da página teste (item 4) continua funcionando.
A minha aplicação continua SEM funcionar.

Mas valeu pela dica, pois estava dando erro no ojdbc14.jar quando eu tentava obter a versão.

Muito obrigado pela ajuda, mas o grande problema era uma pecinha entre o teclado e a cadeira.

Na aplicação de exemplo:

&lt;sql:query var="rs" dataSource="jdbc/myoracleDB"&gt;  
SELECT   
   Trunc(Trunc(SYSDATE,'MONTH')-1,'MONTH') inicio_mes   
FROM   
   dual  
&lt;/sql:query&gt;

Na minha aplicação:

&lt;sql:query var="rs" dataSource="jdbc/myoracleDS"&gt;  
SELECT   
   Trunc(Trunc(SYSDATE,'MONTH')-1,'MONTH') inicio_mes   
FROM   
   dual  
&lt;/sql:query&gt;

O erro CRASSO: myoracleDB é diferente de myoracelDS.

Peço desculpas pela tomada de tempo dos que colaboraram com o tópico.
Mas tudo tem o lado bom: quem tiver problemas (que não tenham essa origem), que este tópico sirva de apoio.

Abraços,

Poxa, me desculpe, bobeei…
eu reparei mesmo que havia essa diferença,
mas também fiquei na dúvida se vc não estava
“referenciando” coisas diferentes…

quando você usa datasources, você tem que colocar os libs do teu driver na pasta lib do teu server :slight_smile:

Eu coloquei os libs do driver JDBC no classpath do Tomcat (CATALINA_HOME/lib), pois eu estou apenas JSTL e dependo da datasource do webserver.

Mas a sua dica é válida para quem trabalha com JDBC ou Hibernate, por exemplo.

Vlw!