Pool de Conexões com o Tomcat

5 respostas
Jedi_FeniX

Estou tendo um problema em criar um pool de conexões com o Tomcat, abaixo seguem o context.xml, web.xml e a classe de teste.
Sendo que eu coloquei o driver jdbc no $CATALINA_HOME/lib e a minha estrutura de pasta está assim:

  • TestePoll
    • META-INF
      • context.xml
        -WEB-INF
      • classes
        • test
          TestPool.class
      • web.xml
    • src
      • test
        • TestPool.java
    • index.jsp

O problema é este, quando vou compilar a TestPool

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
        at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at test.TestPool.main(Unknown Source)

Context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/TestPool" reloadable="true" crossContext="true">
        <Resource
                auth="Container" 
                name="jdbc/test_pool"
                type="javax.sql.DataSource"
                url="jdbc:postgresql://10.2.5.1:5432/test"
                driverClassName="org.postgresql.Driver"
                username="postgres"
                password="postgres"
                maxActive="50"
                maxIdle="25"
        />
</Context>

Web.xml:

<resource-ref>
                <res-ref-name>jdbc/test_pool</res-ref-name>
                <res-type>javax.sql.DataSource</res-type>
                <res-auth>Container</res-auth>
        </resource-ref>

TestPool.java

package test;

import control.Client;

import model.ClientDAO;

import java.util.Iterator;
import java.util.ArrayList;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import javax.naming.InitialContext;
import javax.naming.NamingException;


public class TestPool{

        public static void main(String args[]){
                try{
                        InitialContext context = new InitialContext();
                        DataSource dataSource = (DataSource)context.lookup("java:comp/env/jdbc/test_pool");
                        ClientDAO clientDAO = new ClientDAO(dataSource.getConnection());
                        ArrayList<Client> elements = clientDAO.selectAll();
                        Iterator<Client> iterator = elements.iterator();
                        while(iterator.hasNext()){
                                System.out.println("Queue ID: " + iterator.next().getId());
                        }
                } catch(SQLException e){
                        e.printStackTrace();
                  } catch(NamingException e1){
                        e1.printStackTrace();
                    }

        }
}

Preciso configurar mais alguma coisa? Tem algo errado nos arquivos?
Eu estou usando o Tomcat 6 e a JVM 6

5 Respostas

Pedrosa

O que esta usando para desenvolver?, mas basicamente vc precisa adicionar o driver do postgres no classpath da sua aplicação.

Jedi_FeniX

O driver JDBC já está no $CATALINA_HOME/lib.
E para desenvolver não uso nada…heheh
Programo no vi

Pedrosa

Cara vc ta criando um método main em uma aplicação web, dessa forma não vai achar o driver mesmo tando no lib do tomcat, teste esse poll em um servlet.

E considere seriamente a opção de usar o Eclipse ou outra IDE Java esse vi é o do Mac?

Jedi_FeniX

Valeu cara funcionou, garotiei legal :smiley: .
O vi é o editor do linux.

Jedi_FeniX

Não tem como eu colocar essa chamada em classe que não é uma servlet? Ou posso chamar esta servlet de uma classe “norma”?

Criado 14 de maio de 2008
Ultima resposta 14 de mai. de 2008
Respostas 5
Participantes 2