Ibatis Conexões Abertas

Pessoal, alguém aqui usa ibatis e teve problema de ter várias conexões abertas ?

Como resolvo esse problema ?

p.s. Na config do pool eu coloquei pra ter no máximo 5 conexões abertas, mas o ibatis não está respeitando isso.

:?:

Bem, inicialmente vamos às perguntas clássicas:

1 - Que versão do iBatis você está usando?
2 - Que mecanismo de pool você está usando?
3 - Você está configurando corretamente seu pool?

O iBatis utiliza 10 conexões ativas para o pool como valor padrão, usando o SimpleDataSource (se você não definir nenhum valor).

Você pode ver como exemplo a classe com.ibatis.common.jdbc.SimpleDataSource:

[code]
private static final String PROP_POOL_MAX_ACTIVE_CONN = “Pool.MaximumActiveConnections”;

    poolMaximumActiveConnections =
        props.containsKey(PROP_POOL_MAX_ACTIVE_CONN)
        ? Integer.parseInt((String) props.get(PROP_POOL_MAX_ACTIVE_CONN))
        : 10;[/code]

Verifique se seu arquivo de configurações ou o sql-map-config.xml estão corretos:

 Pool.MaximumActiveConnections=5

ou

 <property name="Pool.MaximumActiveConnections" value="5"/>

Espero ter ajudado. Feliz ano novo.

[]'s

Daniel Augusto

1 - Que versão do iBatis você está usando?
Versão 2.1.5

2 - Que mecanismo de pool você está usando?
To usando o pool dele mesmo, tem outra forma de usar ?

3 - Você está configurando corretamente seu pool?

&lt;transactionManager type="JDBC" &gt;
    &lt;dataSource type="SIMPLE"&gt;
    &lt;property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver"/&gt;
    &lt;property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@192.168.20.29:1524:dbpi"/&gt;
    &lt;property name="JDBC.Username" value="xxxx"/&gt;
    &lt;property name="JDBC.Password" value="xxxx"/&gt; 
    &lt;property name="JDBC.DefaultAutoCommit" value="true" /&gt;
    &lt;property name="Pool.MaximumActiveConnections" value="10"/&gt;
    &lt;property name="Pool.MaximumIdleConnections" value="5"/&gt;
    &lt;property name="Pool.MaximumCheckoutTime" value="120000"/&gt;
    &lt;property name="Pool.TimeToWait" value="500"/&gt;
    &lt;property name="Pool.PingQuery" value="select * from dual"/&gt;
    &lt;property name="Pool.PingEnabled" value="false"/&gt;
    &lt;property name="Pool.PingConnectionsOlderThan" value="1"/&gt;
    &lt;property name="Pool.PingConnectionsNotUsedFor" value="1"/&gt;
    &lt;/dataSource&gt;
  &lt;/transactionManager&gt;

No aguardo de qq ajuda !!!
Obrigado.

Eu não tenho certeza, mas se não me engano eu tive que usar a tag commitRequired=true, para resolver problemas deste tipo:

<transactionManager type="JDBC" commitRequired="true">

mutano.
Mas esse parâmetro não é só no caso de eu estar usando transação ?
Eu não uso transação nesse sistema, só faço selects.

Mas quantas conexões ficam abertas?

Chega a estourar o limite de conexões do banco, no caso 150 :frowning:

Talvez o DataSource type SIMPLE não esteja funcionando corretamente. Já tentou usar DBCP?

Não tentei não, você pode me passar um exemplo de como eu configuro ele ?

Tem na documentação do iBatis… dá uma olhada. Só não esquece de colocar o commons-dbcp no classpath da aplicação ou no servidor web.

Outra coisa que de repente pode ser o seu problema é a query de ping:

select * from dual

Existe esta tabela no seu database? Se não, talvez ela sempre retorne erro e o pool cria outra conexão… mas isso é um chute.

Então, não é problema do ping não pois o ping nem está ativado veja,

&lt;property name="Pool.PingQuery" value="select * from dual"/&gt;
 &lt;property name="Pool.PingEnabled" value="false"/&gt;

Mas vou dar uma olhada na documentação quanto ao uso do DBCP
Pelo menos você já me deu uma luz ! :idea: