Solucionado (ver solução)
Solucionado
(ver solução)
13
respostas

Implementar o Poll de conexão Oracle

Eae galera, queria saber como eu poderia implementar o poll com o banco Oracle 11g

obrigado

13 respostas

Oi Gabriel, tudo bem ?

Achei isso aqui na documentação do site da Oracle, vê se te ajuda :

http://docs.oracle.com/cd/E68505_01/wls/WLACH/pagehelp/JDBCjdbcdatasourcesjdbcdatasourceconfigconnectionpooltitle.html#attributes

Tudo bem matheus e voce ?

então eu ja tinha visto isso cheguei ao seguinte codigo

package br.portalRadex.conexao;

import java.sql.Connection;
import java.sql.SQLException;

import oracle.jdbc.pool.OracleConnectionPoolDataSource;

public class Conexao {

    private OracleConnectionPoolDataSource oracleDataSource;

    public Conexao() throws SQLException {
        oracleDataSource = new OracleConnectionPoolDataSource();
        oracleDataSource.setURL("jdbc:oracle:thin:@192.168.0.17:1521:mega");
        oracleDataSource.setUser("mega");
        oracleDataSource.setPassword("megamega");

    }

    public static Connection getConnection() throws SQLException, ClassNotFoundException {
        return Conexao.getConnection();

    }

}

e a classe de teste:

package br.portalRadex.teste;

import java.sql.Connection;
import java.sql.SQLException;

import br.portalRadex.conexao.Conexao;

public class TestaConexao {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {

        Connection con =  new Conexao().getConnection();
        System.out.println("Conexão aberta com sucesso!!!");

        con.close();
    }
}

quando executo simplesmente nao acontece nada, percebo pelo gerenciados de tarefas que aJVMassume um processamento bem alto e no console nao aparece erro algum, apenas na aba debugque me apresentado <not responding>.

vou dar outra lida na documentação obrigado

Gabriel, parece que tem algum problema de login/senha/host. Se voce tenta via terminal do sqlplus funciona para esse ip/login/senha? Pois seu codigo esta correto

Paulo acredito que não pois primeiro eu fiz pela forma normal pelo DriveManager:

package br.portalRadex.conexao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Conexao {

    public static Connection getConnection() throws SQLException, ClassNotFoundException {
         Class.forName("oracle.jdbc.driver.OracleDriver");

         return DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.17:1521:mega","mega","megamega");


    }

}

e funciona normalmente, ja li e reli a documentação mas nao consigo fazer a conexão. Quanto a conexão no SqlPlus funciona normalmente user: mega senha: megamega ip: esta na minha maquina mesmo localhost.

Obrigado pela resposta Paulo.

solução!

Gabriel, estranho mesmo.

Esse seu ip ai não é dinamico e nao teria mudado? Estranho a outra forma ficar lockada e nao responder absolutamente nada. Se voce forçar e colocar dados errados, como um IP que nao existe, o pool age da mesma forma?

Paulo boa tarde,

estava fazendo isso o comportamento se repetia, então decidi esperar pois havia um processamento alto, passou duas horas quase e veio o erro:

Exception in thread "main" java.lang.StackOverflowError at br.portalRadex.conexao.Conexao.getConnection(Conexao.java:30)

se repete muitas vezes

package br.portalRadex.conexao;

import java.sql.Connection;
import java.sql.SQLException;

import oracle.jdbc.pool.OracleDataSource;

public class Conexao {

    private OracleDataSource oracleDataSource;

    public Conexao(){
        try {
            oracleDataSource = new OracleDataSource();
            oracleDataSource.setURL("jdbc:oracle:thin:@192.168.1.36:1521:MEGA");
            oracleDataSource.setUser("mega");
            oracleDataSource.setPassword("megamega");

        } catch (SQLException e) {

            e.printStackTrace();
        }

    }

    public static Connection getConnection() throws SQLException, ClassNotFoundException {
        //Class.forName("oracle.jdbc.driver.OracleDriver");

        //return DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.36:1521:MEGA","mega","megamega");
        return Conexao.getConnection();

    }

}

Pelo que entendi ele da erro o erro no retorno é isso ?``` return Conexao.getConnection();

``` sabe qual erro é esse?

obrigado paulo.

Paulo conseguir resolver substitui a linha que dava erro:

Connection con = oracleDataSource.getConnection();
        return con;

obrigado pela atenção

Agora que reparei. Sim, o erro está aí pois tem uma recursao infinita! Voce esta chamando o getConnection da propria classe!

voce deve fazer return oracleDataSource.getConnection()

achamos ao mesmo tempo :). que bom!

isso mesmo por isso da demora e do processamento alto, falta de atenção, valeu paulo

Também estou implementando um pool de conexões com o oracle 11g, gostaria de saber a diferença entre utilizar o dirver JDBC OCI ou utilizar o JDBC Thin?

Obrigado.

o OCI usa apis nativas do sistema. pode ser que não haja versão para alguns sistemas operacionais. o thin é o que chamamos tipo 4: puramente escrito em java. eu ficaria sempre com o thin

Ok, Obrigado!