Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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!