eu prefiro tentar aprender como funciona, como implementar, etc, mesmo que eu use alguma coisa pronto…
do mesmo modo que eu achei uma grande vantagem ter tido a matéria estruturas de dados, apesar das colections
eu prefiro tentar aprender como funciona, como implementar, etc, mesmo que eu use alguma coisa pronto…
do mesmo modo que eu achei uma grande vantagem ter tido a matéria estruturas de dados, apesar das colections
Um bom jeito pra fazer isso entao eh ler o codigo das “coisas prontas” antes de assumir que voce sabe de tudo que tem que fazer e sair reinventando a roda. Existe talvez mais de uma dezena de connection pools opensource por aih, entao tenha certeza de estudar bem o codigo deles. Garantido que vc vai aprender muito
Além disso da pra aproveitar esse “estudo de codigo” e ainda colaborar com o projeto, corrigindo bugs, incrementando funcionalidades. No fim das contas aprende e ainda colabora.
]['s
Pessoal, desenterrando essa Trhead
Estou tentando fazer o connection pool seguindo o exemplo do Régis Steigleder, mas com certeza estou fazendo algo errado, pois estou recebendo a seguinte mensagem de erro :
[quote]form.isInd_proc_canc() = false
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class ‘’ for connect URL ‘null’
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:780)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
[/quote]
o meu arquivo Web.xml esta com o seguinte trecho
[quote]<resource-ref>
<description>DESENVOLVIMENTO</description>
<res-ref-name>jdbc/poolDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>[/quote]
o arquivo contect.xml esta igual ao exemplo. Esse arquivo eu criei na mao.
o arquivo server.xml esta assim :
[quote]
<?xml version='1.0' encoding='utf-8'?><Server>
<Listener className=“org.apache.catalina.mbeans.ServerLifecycleListener”/>
<Listener className=“org.apache.catalina.mbeans.GlobalResourcesLifecycleListener”/>
<GlobalNamingResources>
<Environment value=“30” type=“java.lang.Integer” name=“simpleValue”/>
<Resource type=“org.apache.catalina.UserDatabase” description=“User database that can be updated and saved” auth=“Container” name=“UserDatabase”/>
<Resource type=“javax.sql.DataSource” name=“jdbc/poolDB”/>
<ResourceParams name=“UserDatabase”>
<parameter>
<name>factory</name>
<value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
</parameter>
<parameter>
<name>pathname</name>
<value>conf/tomcat-users.xml</value>
</parameter>
</ResourceParams>
<ResourceParams name=“jdbc/poolDB”>
<parameter>
<name>validationQuery</name>
<value> </value>
</parameter>
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>password</name>
<value>masterkey</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:firebirdsql://192.168.0.1:3050/DESENVOLVIMENTO</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.firebirdsql.jdbc.FBDriver</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>4</value>
</parameter>
<parameter>
<name>username</name>
<value>sysdba</value>
</parameter>
</ResourceParams>
</GlobalNamingResources>
<Service name=“Catalina”>
<Connector connectionTimeout=“20000” port=“8080” redirectPort=“8443” disableUploadTimeout=“true” acceptCount=“100” maxThreads=“150” minSpareThreads=“25” maxSpareThreads=“75”>
</Connector>
<Connector port=“8009” redirectPort=“8443” protocolHandlerClassName=“org.apache.jk.server.JkCoyoteHandler” protocol=“AJP/1.3”>
</Connector>
<Engine defaultHost=“localhost” name=“Catalina”>
<Host appBase=“webapps” name=“localhost”>
<Logger className=“org.apache.catalina.logger.FileLogger” suffix=".txt" prefix=“localhost_log.” timestamp=“true”/>
</Host>
<Logger className=“org.apache.catalina.logger.FileLogger” suffix=".txt" prefix=“catalina_log.” timestamp=“true”/>
<Realm className=“org.apache.catalina.realm.UserDatabaseRealm”/>
</Engine>
</Service>
</Server>[/quote]
Alguem pode me dar uma luz?
Obrigado!
Pessoal, apanhei quase 3h antes postar a mensagem e agora consegui resolver.
Agora eu criei o datasource dentro do contexto da aplicação no TomCat e deu certo!
:idea:
Obrigado!
Aproveitando o topico e sem querer mudar de foco, to fazendo uns testes com o pool de conexoes do tomcat, e usando JDBC, percebi que cada vez que eu abro um statement ele abre uma conexao com o banco.
Por exemplo, quando eu crio o pool, ele nao abre nenhuma conexao, quando eu pego uma conexao e abro um statment ele abre uma conexao com o banco. Se eu abrir outro statement, antes de fechar o primeiro fica com 2 conexoes no banco. Percebi que ele abre uma conexao pra cada statement.
Ai vem minhas duvidas. Como vou conseguir controlar a transacao se ele pega duas conexoes? Vi uns exemplos usando uma UserTransaction, mas nao achei isso no tomcat.
Alguem pode me dar uma luz?
PS: Desculpem a falta de acentos
marcelomartins, como voce faz pra saber quantas conexões foram abertas pelo TomCat ?
Vou no gerenciador do banco e verifico quantas conexoes estão abertas, o pool não fecha elas depois que abriu
Ah, e no caso, meu ambiente de testes é usando MSSQL :?
Implementei a minha Connection Pool:
http://pedroabs.wordpress.com/2011/09/27/connection-pool-em-java-pool-de-conexoes/
Eu implementei um exemplo de connection pool e atualmente uso-o na minha aplicação web:
http://pedroabs.wordpress.com/2011/09/27/connection-pool-em-java-pool-de-conexoes/
Olá pessoal.
Postei um fonte sobre o asunto aqui e queria trocar ideias sobre ele. Ver outras sugestões e criticas.
[quote=caiofilipini]Um pool de conexões não controla somente o número de conexões que devem ser estabelecidas. Além disso, ele ainda deve controlar o timeout das conexões, fechamento de conexões inativas por um determinado tempo, etc…
[]'s[/quote]
Estou atento ao que o caiofilipini disse e inclui o timeout.
A ideia é fazer o programa funcionar em singleton jogando um parametro PoolJDBC com as propriedades que eu quero na conexão.
A interface PoolJDBC é onde crio as propriedades da conexão.
ConnectionDB implementa a interface Connection
ConnectionPool é a classe da qual o Teste extende e é responsavel pelo controle do pool de conexões.
Por que seria ruim?
Poderia me falar mais sobre isso?