Pool de conexões por página?

18 respostas
W

Salve!

Gostaria de saber se devo utilizar um pool de conexões com o banco para cada página jsp acessada ou um pool para toda a navegação do site. Se for para toda a navegação como eu crio um objeto que possa ser utilizado por todas as páginas jsp? Posso utilizar session?

18 Respostas

Rafael_Steil

Use um pool para tudo… nao faz sentido ter pool de conexoes por pagina…

Rafael

richardpeder

Vc cria uma classe ConnectionPool e vai instanciando ela conforme sua necessidade!

ate mais…

Rafael_Steil

“richardpeder”:
Vc cria uma classe ConnectionPool e vai instanciando ela conforme sua necessidade!

ate mais…

Voce nao vai instanciando o pool, mas sim pegando e devolvendo objetos para o pool. Voce soh ira ter um unico objeto ConnectionPool em memoria.

Rafael

richardpeder

pode ser!

Acho que expressei errado o que eu queria dizer… :oops: :slight_smile: :wink:

ate mais…

cancao

JNDI Datasource HOW-TO

A melhor maneira de usar um pool no Tomcat.

Até.

Rafael_Steil

“cancao”:
JNDI Datasource HOW-TO

A melhor maneira de usar um pool no Tomcat.

Até.

Depende do teu conceito de “melhor maneira”… Eu pessoalmente prefiro algo simples como

ConnectionPool.init();
...
Connection conn = ConnectionPool.getConnection();
...
ConnectionPool.releaseConnection(conn);

:wink:

Rafael
ps: claro, depois de fazeer as varias configuracoes do datasource, fica mais simples

W

“Rafael Steil”:
“richardpeder”:
Vc cria uma classe ConnectionPool e vai instanciando ela conforme sua necessidade!

ate mais…

Voce nao vai instanciando o pool, mas sim pegando e devolvendo objetos para o pool. Voce soh ira ter um unico objeto ConnectionPool em memoria.

Rafael

Como faço para ter um unico objeto ConnectionPool para todas as paginas jsp?

Rafael_Steil

Use um Singleton… Se nao souber o que eh um singleton, use o Pesquisar aqui do GUJ… ha varios topicos sobre o assunto…

E, por favor, nao faca um connection pool vc mesmo. Ha muitas boas solucoes ja prontas e eficientes por ai. Uma outra pesquisada no GUJ e vc tera respostas sobre Connection Pool tambem.

Rafael

cv1

Sim, inclusive os bilhoes de topicos que eu ja escrevi aqui dizendo que Singleton não presta. :evil:

[size=“7”]um dia eu ainda vou encher o rafael de porrada por causa disso…[/size]

Rafael_Steil

“cv”:
Sim, inclusive os bilhoes de topicos que eu ja escrevi aqui dizendo que Singleton não presta. :evil:

Ok…

entao nao use um singleton. use “static” onde bem entender e chame da *#Q&$ que quiser.

Rafael

cancao

“Rafael Steil”:
Depende do teu conceito de “melhor maneira”… Eu pessoalmente prefiro algo simples como

ConnectionPool.init(); ... Connection conn = ConnectionPool.getConnection(); ... ConnectionPool.releaseConnection(conn);


Pois é, mas vc teve que implementar esse “algo mais simples”, certo?! Melhor maneira para mim é ler a boa doc do Tomcat sobre o assunto e usar o DBCP já pronto!

O que vc usa no lugar do Singleton?

Até.

Rafael_Steil

Nao se usa singleton…

Criar instancias de objetos nas vm’s mais novas eh muito rapido, entao ter um objeto na forma de singleton pode ser mais lento que instanciar o objeto do zero, caso voce sincronize as chamadas.

Ha ainda o lance teorico de padroes de projeto, e ai entra o caso de usar metodos especificos declarados como static ao inves da classe inteira ser acessada atraves de getInstance()'s…

O louds postou isso uma vez:
http://www.prabhums.org/knowledgebase/index.html?page=pages/Java%20Technology/Patterns/design_pattern_monostate.htm

Rafael

louds

Se a tua configuração suportar um servidor de nomes/diretorio, via JNDI, é uma excelente maneira de resolver o problema do object lookup.

cv1

O problema de fazer lookup de objetos eh que vc quebra a inversao de controle. Usando um pouquinho de injecao de dependencias da pra deixar o codigo bem mais bonitinho, e sem factory e singleton esparramado pra todo lado :wink:

louds

Bom, injeção de dependencia tem seus problemas cv, como a obrigatoriedade de que TODOS objetos que possam vir a ter uma dependencia passem pelo container ou tenham acesso a ele para fazer lookup. Vou adorar se voce me mostrar o contrario; qual seria a forma elegante que evite o uso de singletons (p/ fast-lookup) ou um serviço de lookup e permita o uso ad hoc de serviços/componentes?

W

“Rafael Steil”:
Nao se usa singleton…

Criar instancias de objetos nas vm’s mais novas eh muito rapido, entao ter um objeto na forma de singleton pode ser mais lento que instanciar o objeto do zero, caso voce sincronize as chamadas.

Ha ainda o lance teorico de padroes de projeto, e ai entra o caso de usar metodos especificos declarados como static ao inves da classe inteira ser acessada atraves de getInstance()'s…

O louds postou isso uma vez:
http://www.prabhums.org/knowledgebase/index.html?page=pages/Java%20Technology/Patterns/design_pattern_monostate.htm

Rafael

Vc poderia me dar um exemplo com jsp. Não entendi muito bem a demonstração do site.

gerdec

sou novo no forum
tenho um problema com o pool de conexão do tomcat e gostaria que se possivel me dessem uma ajuda é o seguinte

dá esse erro no tomcat

An error occurred at line: 1 in the jsp file: /index.jsp
The method getConnection() is undefined for the type DataSource

web-inf/web.xml

meu web.xml

<resource-ref> 
<description>DB2 conetion</description> 
<res-ref-name>jdbc/bdxxx</res-ref-name> 
<res-type>javax.sql.DataSource</res-type> 
<res-auth>Container</res-auth> 
</resource-ref>

meu context

meta-inf/context

<?xml version="1.0" encoding="UTF-8"?>
<Context>

<Resource
      auth="Container"
      driverClassName="COM.ibm.db2.jdbc.app.DB2Driver"
      maxActive="20"
      maxIdle="10"
      maxWait="-1"
      name="jdbc/bdxxx"
      type="javax.sql.DataSource"
      url="jdbc:db2:xxxx"
      username="xxxx"
      password="xxxx"/>

</Context>

minha conexão jsp

try {
    InitialContext ic = new InitialContext();
    dataSource = (DataSource) ic.lookup("java:comp/env/jdbc/bdxxx");
    conexao = dataSource.getConnection();
}
catch (NamingException ex) {
    // DataSource não foi encontrada no JNDI;
    out.println("Ocorreu erro no pool de conexões:<br>" + ex.getMessage());
}

tomcat 5.5.25
jdk 1.6.0

Kenobi

Bom, injeção de dependencia tem seus problemas cv, como a obrigatoriedade de que TODOS objetos que possam vir a ter uma dependencia passem pelo container ou tenham acesso a ele para fazer lookup. Vou adorar se voce me mostrar o contrario; qual seria a forma elegante que evite o uso de singletons (p/ fast-lookup) ou um serviço de lookup e permita o uso ad hoc de serviços/componentes?

Se você tiver fazendo usando a estrutura do EJB3 sim, entretanto se utilizar guice, spring entre outros; os objetos não precisam passar pelo container. Aliás, você pode fazer IoC de qualquer coisa, até vaquinhas verdes :stuck_out_tongue:

Criado 6 de março de 2004
Ultima resposta 23 de nov. de 2007
Respostas 18
Participantes 8