Jsp+tomcat+Banco de dados

5 respostas
J

Ola pessoas, toda vez q eu tento fazer a conexao no bd pelo jsp, retorna uma Connection null pra mim, nao sei o q pode ser… Eu coloquei o driver do banco de dados em …/tomcat/common/lib na maquina servidora. Detalhe eh q, eu jah testei a conexao em uma maquina cliente, acessando o bd na maquina servidora pela rede, e tudo correu bem, o problema eh qdo eu utilizo a mesma classe de conexao, mas agora com ele na maquinao servidora e eu tentando acessar pelo tomcat e jsp… Alguma sugestao?

5 Respostas

J

O problema eh q nao estah encontrando o driver para a conexao, nao sei aonde eu devo colocar esse driver, ou se eu tenho q exportar o driver .jar junto com a aplicacao jsp?

E

eae blz???

cara vc jah tentou usar um Pool de conexão pra ver se isso para
fica melhor de gerenciar tb o acesso ao banco de dados
de suas aplicações JSP

dai vc configura o seu arquivo server.xml do tomcat

exemplo de configuração do Pool de conexão
utilizando um banco de dados Oracle
com o drive dentro de common/libs

<Context className="org.apache.catalina.core.StandardContext"
         cachingAllowed="true"                                                                 
         charsetMapperClass="org.apache.catalina.util.CharsetMapper"
         cookies="true" crossContext="true" debug="0"
         

 ** indicando para o Pool qual a aplicação que realizará acessos ao BD** 
         docBase="c:\jakarta-tomcat-4.1.27\webapps\jdbc"
         mapperClass="org.apache.catalina.core.StandardContextMapper"
         path="/jdbc"
         privileged="false"
         reloadable="true" 
         swallowOutput="false"
         useNaming="true"
         wrapperClass="org.apache.catalina.core.StandardWrapper">
<!-- aqui vc configura o nome da Base de dados -->
<Resource name="jdbc/teste" auth="Container"
              type="javax.sql.DataSource"/> 
<!-- aqui vc configura o nome da Base de dados -->
<ResourceParams name="jdbc/teste1">
  <parameter>
    <name>factory</name>
    <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
  </parameter>
  <parameter>
    <name>driverClassName</name>
    <!-- aqui vc define o seu drive de conexão com o banco de dados -->
    <value>oracle.jdbc.driver.OracleDriver</value>
  </parameter>
  <parameter>
    <name>url</name>

    <!-- endereço para conectar | host -->
    <value>jdbc:oracle:oci8:@BD</value>
    <!--  pelo IP , onde ? é um número   
    <value>jdbc:oracle:thin:@???.???.?.??:????:BD</value>
    -->
  </parameter>
  <parameter>
    <name>username</name>
    <value>JSP</value>
  </parameter>
  <parameter>
    <name>password</name>
    <value>JSP</value>
  </parameter>
  <parameter>
    <name>maxActive</name>
    <value>20</value>
  </parameter>
  <parameter>
    <name>maxIdle</name>
    <value>10</value>
  </parameter>
  <parameter>
    <name>maxWait</name>
    <value>-1</value>
  </parameter>
  <parameter>
    <name>removeAbandoned</name>
    <value>true</value>
  </parameter>
  <parameter>
    <name>removeAbandonedTimeout</name>
    <value>60</value>
  </parameter>
  <parameter>
    <name>logAbandoned</name>
    <value>true</value>
  </parameter>
</ResourceParams>

</Context>
E

exemplo de uma classe que realiza os serviços de acesso ao banco de dados utilizando o pool de conexão definido

package RH;

import java.sql.*;
import javax.sql.*;
import javax.naming.*;
import java.util.*;

public class dbPessoa {

   static ResultSet rs = null;
   static Statement stmt = null;
   static Connection cnn = null;

   static Context envContext = null; 

   // ----------------------------------------------------------
   // OBSERVAR ESSE MÉTODO
   static {

     try {
 
       Context initContext = new InitialContext();
       envContext  = (Context)initContext.lookup("java:/comp/env");

     } catch (Exception e) {
         System.out.println (e);
     }

   }
   // ----------------------------------------------------------
   // OBSERVAR ESSE MÉTODO
   static Connection obterConexao () throws Exception {

       System.out.println ("Recuperando conexão do pool...");
       
       DataSource ds = (DataSource)envContext.lookup("jdbc/DU01_teste1");

       return ds.getConnection ();

   }


   // ------------------------------------------------------------
   // OBSERVAR ESSE MÉTODO
   static void liberarConexao (Connection cnn) throws Exception {

     // Devolve para o Pool.
     cnn.close ();
  
   } 

   // ------------------------------------------------------------ 

   // os métodos abaixo são apenas uma exemplificação de acesso ao BD
   public static Collection getColecaoPessoas () throws Exception {

       try {

         cnn = obterConexao ();

         String sql = "SELECT * FROM tbPessoa"; 
       
         stmt = cnn.createStatement ();

         rs = stmt.executeQuery (sql); 

         // Irá armazenar uma coleção de pessoas.

         Collection colPessoa = new Vector ();      
      
         while (rs.next ()) {
           Pessoa pessoa = new Pessoa ();
           pessoa.setId (new Integer (rs.getString ("ID")).intValue ());
           pessoa.setIdade (new Integer (rs.getString ("IDADE")).intValue ());
           pessoa.setNome (rs.getString ("NOME"));
           colPessoa.add (pessoa);           
         }  

         return colPessoa;         

       } finally {
          try {rs.close ();} catch (Exception e) {};
          try {stmt.close ();} catch (Exception e) {};
          liberarConexao (cnn);
       } 
       
       
   }

   // ------------------------------------------------------------ 

   public static Pessoa getPessoaPorId (int id)  throws Exception {

       try {

         cnn = obterConexao ();

         String sql = "SELECT * FROM tbPessoa WHERE id = " + id; 
       
         stmt = cnn.createStatement ();

         rs = stmt.executeQuery (sql); 

         // Irá armazenar as informações de uma pessoa.

         Pessoa pessoa = null;
      
         while (rs.next ()) {
           pessoa = new Pessoa ();           
           pessoa.setId (new Integer (rs.getString ("ID")).intValue ());
           pessoa.setIdade (new Integer (rs.getString ("IDADE")).intValue ());
           pessoa.setNome (rs.getString ("NOME"));
         }

         return pessoa;         

       } finally {
          try {rs.close ();} catch (Exception e) {};
          try {stmt.close ();} catch (Exception e) {};
          liberarConexao (cnn);
       } 

   }

   // ------------------------------------------------------------ 

   public static void criarPessoa (Pessoa pessoa) throws Exception {

      try {   

        cnn = obterConexao ();

        String sql = "";

        sql = sql + "INSERT INTO tbPessoa VALUES (";
        sql = sql + pessoa.getId () + ", ";
        sql = sql + "'" + pessoa.getNome () + "',";
        sql = sql + pessoa.getIdade () + ")";  
                
        stmt = cnn.createStatement ();
 
        stmt.execute (sql); 
        
       } finally {
          try {stmt.close ();} catch (Exception e) {};          
          liberarConexao (cnn);
       } 

   }

   // ------------------------------------------------------------   

   public static void alterarPessoa (Pessoa pessoa) throws Exception {
     // Executa um update da pessoa.
   }

}
E

no seu arquivo da aplicação web.xml vc indica que a sua aplicação irá usar o pool de conexão que vc configurou no tomcat

< w e b - a p p >
...
  < r e s o u r c e - r e f >
    < d e s c r i p t i o n >Exemplo de acesso via Datasource< / d e s c r i p t i o n >
    < ! - -  n o m e  d a  b a s e  d e  d a d o s  - - >
    < r e s - r e f - n a m e >jdbc/teste1< / r e s - r e f - n a m e >
    < r e s - t y p e >javax.sql.DataSource< / r e s - t y p e >
    < r e s - a u t h >Container< / r e s - a u t h >
  < / r e s o ur c e - r e f >
...
< / w e b - a p p >

:arrow: com isso vc define que a sua aplicação irá usar o pool que vc definiu no tomcat

acima dentro das tags eu tive que separar com um espaço pra conseguir postar o código :cry:

espero ter ajudado em algo :wink:

ps.: desculpa pelo número de post, naum consegui mandar em 1 soh

[]'s
Erko Bridee

J

ae valew… vo testar o pool de conexoes sim… minha aplicacao vai precisar…

Criado 10 de setembro de 2004
Ultima resposta 14 de set. de 2004
Respostas 5
Participantes 2