exemplo usando Connection Pool  XML
Índice dos Fóruns » Assuntos gerais (Off-topic)
Autor Mensagem
rbarioni
GUJ Master
[Avatar]

Membro desde: 02/09/2002 10:49:11
Mensagens: 1317
Localização: Campinas
Offline

Fala galera...

alguem ae teria um exemplinho simples de como usar o DBCP da jakarta??
dei uma olhada nos exemplos lah do site dele, mas tem uns 3 exemplos lah e nao sei qual deles o melhor/ideal p/ usar...

valew

"Ozzy Osbourne pode ter inventado o heavy-metal, mas com certeza, Metallica o aprimorou."
[Email] [MSN] [ICQ]
maresp
Virtual Machine Man
[Avatar]

Membro desde: 28/05/2003 16:27:10
Mensagens: 553
Localização: Indaiatuba/SP
Offline

Vc tá utilizando jdbc puro?
[Yahoo!] [ICQ]
rbarioni
GUJ Master
[Avatar]

Membro desde: 02/09/2002 10:49:11
Mensagens: 1317
Localização: Campinas
Offline

eh...apenas JDBC p/ conectar no banco...

"Ozzy Osbourne pode ter inventado o heavy-metal, mas com certeza, Metallica o aprimorou."
[Email] [MSN] [ICQ]
Régis Steigleder
JavaBaby

Membro desde: 19/03/2003 15:29:38
Mensagens: 99
Localização: Porto Alegre - RS
Offline

Este aqui eu peguei lá mesmo.

Inclua isto no web.xml


isto no context.xml


agora no server.xml, colocando a url correta e aclasse correta do drive.

Esta parte do server.xml o proprio tomcat pode fazer pra você. Entre no admin do tomcat e crie um data source lá passando a url e o drive. Usei a versão 5.028.

cria uma classe para criar as conexões.


e usa ela assim:



Antes que você pense que há muito código, isto é o mínimo que precisa.

Espero ter ajudado, abraço.

Régis Steigleder
[Email] [MSN] [ICQ]
Luca
Moderador
[Avatar]

Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline

Olá

Uma dica: para entender o DBCP é preciso entender também do jakarta-commons-pool. Baixe este cara e veja a API. Depois veja como configurar um DataSource com JNDI no tomcat. Os ResourceParams do server.xml são aqueles que fazem sentido com seu pool (no caso, dbcp e pool).

[]s
Luca

Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."


CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/
[Email] [WWW]
maresp
Virtual Machine Man
[Avatar]

Membro desde: 28/05/2003 16:27:10
Mensagens: 553
Localização: Indaiatuba/SP
Offline

Bem, todo mundo já respondeu... mas vale a pena dar uma olhadinha aqui se tiver dúvidas.
[Yahoo!] [ICQ]
rbarioni
GUJ Master
[Avatar]

Membro desde: 02/09/2002 10:49:11
Mensagens: 1317
Localização: Campinas
Offline

valew pelas dicas, turma...

mas to usando o WAS como AppServer, nao tomcat...

mas valew..

"Ozzy Osbourne pode ter inventado o heavy-metal, mas com certeza, Metallica o aprimorou."
[Email] [MSN] [ICQ]
wendell almeida silva
Debugger

Membro desde: 20/01/2004 11:47:57
Mensagens: 52
Localização: SP
Offline

Estou usando o exemplo mais simples que peguei no próprio site do projeto.
Não usei nenhuma configuração xml. Está funcionando bem.


import javax.sql.DataSource;
import java.sql.*;
import org.apache.commons.dbcp.BasicDataSource;
import java.util.Properties;
import java.io.*;
import javax.servlet.ServletContext;

public class Dbpc {
private static Dbpc instance = null;
private DataSource ds;
private Connection con;
private String driver;
private String url;
private String login;
private String password;
private int maxConnections;
private long maxWait;

/** Creates a new instance of Dbpc */
public Dbpc() {
Properties props = new Properties();
try {

InputStream fis = this.getClass().getClassLoader().getResourceAsStream("db.properties");
props.load(fis);
fis.close();
}
catch(FileNotFoundException f) {
System.out.println("File not found in Dbcp --> constructor.
" + f.getMessage());
f.printStackTrace();
}
catch(IOException ioex){
System.out.println("Error I/O in Dbpc --> constructor.
" + ioex.getMessage());
ioex.printStackTrace();
}
catch(Exception e) {
System.out.println("Error in Dbpc --> constructor.
" + e.getMessage());
e.printStackTrace();
}

//recuperando configuracoes de acesso ao db
driver = props.getProperty("driver");
url = props.getProperty("url");
login = props.getProperty("login");
password = props.getProperty("password");
maxConnections = (new Integer(props.getProperty("maxConnections"))).intValue();
maxWait = (new Long(props.getProperty("maxWait"))).longValue();
ds = setupDataSource();
}

public static Dbpc getInstance() {
if(instance == null) {
instance = new Dbpc();
}
return instance;
}

public Connection getConn() throws SQLException {
return ds.getConnection();
}

private DataSource setupDataSource() {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName(driver);
ds.setUsername(login);

ds.setPassword(password);
ds.setUrl(url);
ds.setMaxActive(maxConnections);
ds.setMaxWait(maxWait);
ds.setDefaultAutoCommit(true);
return ds;
}

public void printDataSourceStats() throws SQLException {
BasicDataSource bds = (BasicDataSource) ds;
System.out.println("NumActive: " + bds.getNumActive());
System.out.println("NumIdle: " + bds.getNumIdle());
}

/*shutdown DataSource*/
public void shutdown() throws SQLException {
BasicDataSource bds = (BasicDataSource) ds;
bds.close();
}
}

[]'s

Wendell
[ICQ]
Luca
Moderador
[Avatar]

Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline

Olá

Wendel, ótimo exemplo. Mas ficaria mais legal com identação entre Code e /Code. Veja dicas em: http://www.guj.com.br/forum/viewtopic.php?t=16594

[]s
Luca

Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."


CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/
[Email] [WWW]
rbarioni
GUJ Master
[Avatar]

Membro desde: 02/09/2002 10:49:11
Mensagens: 1317
Localização: Campinas
Offline

valew pelas dicas pessoal...

mas eh o seguinte...o proprio WAS jah tem como implementar o Pool no servidor...
como banco, vou usar o DB2 e no pacote JDBC dele vi umas classes tb p/ fazer Pool...

ai fica a duvida...fazer ou nao no codigo o Pooling?? sera melhor deixar o servidor tratar disso??

"Ozzy Osbourne pode ter inventado o heavy-metal, mas com certeza, Metallica o aprimorou."
[Email] [MSN] [ICQ]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Em servidores de aplicações (como o WAS, o Sun Java System, o JBoss etc.) normalmente a gente só obtém uma conexão a partir de um java.sql.DataSource, e a implementação de DataSource é que faz o connection pooling. Para devolver a conexão ao pool de conexões, basta fechá-la corretamente.
A única coisa chata é que a Connection que o DataSource retorna é aquela Connection bastante genérica; se você precisa usar algum recurso do banco de dados que não está exposto via JDBC puro, você precisa fazer umas mágicas.
Por exemplo, teve uma vez que tive de passar BLOBs como parâmetros para stored procedures no Oracle e também ARRAYs e objetos Oracle, e isso só consegui fazer direitinho (incluindo o problema da limitação de tamanho de BLOBs...) usando oracle.jdbc.internal.OracleConnection e outras rotinas no pacote oracle.jdbc; então tive que fazer uma pequena mágica - normalmente o objeto Connection retornado pelo DataSource é um wrapping da conexão "nativa" para o banco. Então tive de checar se o objeto Connection retornado pelo DataSource era um org.jboss.resource.adapter.jdbc.WrappedConnection (no caso do JBoss), e se fosse, ele tem um método getUnderlyingConnection, que retorna a conexão como um objeto oracle.jdbc.internal.OracleConnection.
[WWW]
Rubem Azenha
GUJ Master
[Avatar]

Membro desde: 28/06/2004 00:10:43
Mensagens: 1933
Localização: São Paulo, SP
Offline

só de usar Singleton com DAO ja não cria um pool por assim dizer?



Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning
[WWW]
Lucas Teixeira
Java Ninja
[Avatar]

Membro desde: 11/12/2003 10:47:22
Mensagens: 269
Localização: São Paulo - SP
Offline

microfilo wrote:só de usar Singleton com DAO ja não cria um pool por assim dizer?


Hum... eu acho que o conceito de um pool de conexões vai muito além de um "acessa-o-banco-e-manda-pra-ca". Um pool vai estar gerenciando não só o request de conexões, mas também a quantidade de conexões ativas, a configuração do DataSource, e dentro de cada uma destas, muitas outras configurações.

Em nosso projeto, estamos usando o c3p0 que está dando conta do recado muito bem. Sua configuração é trivial e ele faz tudo de maneira muito transparente. Acho que é uma boa saida.

Rubens Microfilo, o conceito de Singleton não está descartado, afinal o pool deve ser único

(:

Lucas F. A. Teixeira .·.
lucastex no gmail com
lucastex.com/twitter
[Email] [MSN]
Rubem Azenha
GUJ Master
[Avatar]

Membro desde: 28/06/2004 00:10:43
Mensagens: 1933
Localização: São Paulo, SP
Offline

hum

legal

digamos que eu esteje usando DAO e singleton

digamos que eu queira limitar o numero de conexão ha 17 conexões simultaneas

o que vcs acham dessa solução



seria uma coisa assim?

PS: Meu nome é RubeM (primogênito de Jacó), não RubeNS(piloto de F1)



Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning
[WWW]
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

Singleton = ruim. Use um pool de verdade.
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
 
Índice dos Fóruns » Assuntos gerais (Off-topic)
Ir para:   
Powered by JForum 2.1.8 © JForum Team