Que pool utilizar?

16 respostas
TedLoprao

E aí pessoal, que pool de conexões é melhor utilizar, o da jakarta, o quem vem junto com o java ou outro???

Alguém já testou essas e outras opções e pode me passar qual foi a impressão???

16 Respostas

douglasfs

“TedLoprao”:
E aí pessoal, que pool de conexões é melhor utilizar, o da jakarta, o quem vem junto com o java ou outro???

Alguém já testou essas e outras opções e pode me passar qual foi a impressão???

Eu já utilizei o pool de conexões do jakarta e do Sun ONE Application Server 7, fique com o pool do Jakarta que é free, o S1AS você tem que pagar.
Digo que estou satisfeito com o pool Jakarta em meu projeto de faculdade (que é para WEB) e minha impressão (que nada é certeza :stuck_out_tongue: ) é que é bom/rápido/escalável

B

Eu estou utilizando o Oracle com DB, por isso já estou aproveitando uma implementação de pool que a própria Oracle oferece. Mas pelo que ouvi falar o DBCP da Jakarta é muito bom…

Gustavo Guilherme BacK

R

Gostaria de saber em que parte do site do jakarta eu acho esse pool, qualo nome do projeto…

tentei achar mais não consegui…

abraços,

Renato.

douglasfs

Só lembrando que o pool de conexões do Sun ONE Application Server 7 é embutido dentro dele e não pode ser utilizado fora dele (no que eu conheço).
Eu acho que cada Application Server tem o seu próprio pool de conexões, já vi a Bani comentando que utilizava o do Websphere.

R

eu tenho aki o WebSphere App Server…

como faco p/ acessar o Pool de conexoes dele??

ele eh mais robusto do q o Sun One e o tomcat??
tava pensando em migrar p/ ele…

o q acham??

valew

douglasfs

“renatodemiguel”:
Gostaria de saber em que parte do site do jakarta eu acho esse pool, qualo nome do projeto…

tentei achar mais não consegui…

abraços,

Renato.

http://jakarta.apache.org/commons/dbcp/

Só lembrando que se você tem o Tomcat, esse pool vem junto com ele, tem até manual para configuração do mesmo.

A

Olá Douglas estou usando o Pool do Livro Core e Servlets mas queria

utilizar o do Jakarta. Você pode dar um exemplo mais claro do que o do site.

ou seja uma classe pegando a conexão do pool e devolvendo a mesma e

etc…???

valeu

S

Isto aqui deve te ajudar…

http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jndi-datasource-examples-howto.html

douglasfs

“André JVM”:
Olá Douglas estou usando o Pool do Livro Core e Servlets mas queria

utilizar o do Jakarta. Você pode dar um exemplo mais claro do que o do site.

ou seja uma classe pegando a conexão do pool e devolvendo a mesma e

etc…???

valeu

O exemplo em : http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jndi-datasource-examples-howto.html já serve, vou lhe explicar :

Esse trecho :

DataSource ds = 
            (DataSource)ctx.lookup(
               "java:comp/env/jdbc/TestDB");

Recupera um DataSource (uma interface), que é uma fonte de dados, na verdade ele retorna um PoolingDataSource (a classe concreta que implementa a interface DataSource)

Agora esse trecho:

Connection conn = ds.getConnection();

Está recuperando uma conexão já exitente no pool (ou criando) no caso ele devolve um PoolableConnection (que implementa a interface Connection).

Agora esse trecho :

conn.close();

Está devolvendo uma conexão ao pool

Não esqueça que o Connection é uma interface, pelo pouco que estive estudando o código fonte do pool jakarta, a classe concreta utilizada no exemplo é o PoolableConnection (que é uma herança da classe DelegatingConnection que implementa a interface Connection)

Veja o que acontece quando chamamos o método close() (classe PoolableConnection)

public void close()
        throws SQLException
    {
        try
        {
            _pool.returnObject(this);
        }
        catch(SQLException e)
        {
            throw e;
        }
        catch(RuntimeException e)
        {
            throw e;
        }
        catch(Exception e)
        {
            throw new SQLException(e.toString());
        }
    }

Sacou ??? a conexão não é fechada, ela é devolvida ao pool utilizando o método returnObject

Era essa sua dúvida ???

wbsouza

Só como lembrete para quem já usa o tomcat, as versões mais novas já vem com o Pool embutido

[]s, Welington B. Souza

A
DataSource ds = 
            (DataSource)ctx.lookup( 
               "java:comp/env/jdbc/TestDB");

essa parte não entendi muito bem…! esse objeto “ctx” é instanciado por qual classe? e essa url tem quer configurar em algum lugar???

valeu pela resposta…

P.S.: Esse Pool que vem no tomcat é o DHCP??? quer dizer que não precisa baixar o DHCP separado???

A

desculpe é DBCP.

A
InitialContext initCtx = new InitialContext();
DataSource ds = (DataSource) initCtx.lookup("java:comp/env/my-datasource");

ou seja, quando inicializo o codigo acima só preciso chamar

Connection conn = ds.getConnection();

quantas vezes for preciso, não é?? ou preciso toda vez inicializar o “DataSource”??? o “java:comp/env” é default ???

douglasfs

“André JVM”:
DataSource ds = (DataSource)ctx.lookup( "java:comp/env/jdbc/TestDB");

essa parte não entendi muito bem…! esse objeto “ctx” é instanciado por qual classe? e essa url tem quer configurar em algum lugar???

valeu pela resposta…

P.S.: Esse Pool que vem no tomcat é o DHCP??? quer dizer que não precisa baixar o DHCP separado???

O ctx é o Context ( Context ctx = new InitialContext() ), que é utilizado para executar as operações de naming

A URL é configurada no web.xml dentro do seu webapp, repare no exemplo dado em : http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jndi-datasource-examples-howto.html

<?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app PUBLIC
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <description>MySQL Test App</description>
  <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/TestDB</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>
</web-app>

O resource-ref é uma referência para um recurso, o código abaixo configurado dentro do server.xml (dentro da pasta conf)

<Resource name="jdbc/TestDB"
               auth="Container"
               type="javax.sql.DataSource"/>

  <ResourceParams name="jdbc/TestDB">
    <parameter>
      <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>
  ...
  ...
  ...

Sim esse pool que vem no Tomcat é o DBCP (utilizado no Struts 1.1), nesse caso você não precisa baixa-lo

douglasfs
"André JVM":
InitialContext initCtx = new InitialContext();
DataSource ds = (DataSource) initCtx.lookup("java:comp/env/my-datasource");
ou seja, quando inicializo o codigo acima só preciso chamar
Connection conn = ds.getConnection();

quantas vezes for preciso, não é?? ou preciso toda vez inicializar o "DataSource"??? o "java:comp/env" é default ????

Bem, primeiro você deve obter um DataSource para pegar um Connection, para evitar toda hora de fazer um lookup, eu criei um cachezinho (utilizei um HashMap) para armazenar o DataSource na primeira vez que ele for chamado, na segunda vez que eu precisar de um DataSource eu recupero um já existente no HashMap, evitando lookups desnecessários.
Sim o "java:comp/env" é default

A

Caro Douglas,

fico muito agradecido pelas explicações…, essa tarde mudei toda minha

aplicação para usar o Pool do Jakarta graças a sua explicação.

muito grato,

valeu…

Criado 18 de julho de 2003
Ultima resposta 19 de jul. de 2003
Respostas 16
Participantes 8