Search in sources :

Example 1 with PGConnectionPoolDataSource

use of org.postgresql.ds.PGConnectionPoolDataSource in project airlift by airlift.

the class PostgreSqlDataSource method createConnectionInternal.

@Override
protected PooledConnection createConnectionInternal() throws SQLException {
    // attempt to get a connection from the current datasource if we have one
    SQLException lastException = null;
    if (dataSource != null) {
        try {
            return dataSource.getPooledConnection();
        } catch (SQLException e) {
            lastException = e;
        }
    }
    // drop reference to current datasource
    dataSource = null;
    // attempt to create a connection to each PostgreSQL server (except for the one that we know is bad)
    for (ServiceDescriptor serviceDescriptor : serviceSelector.selectAllServices()) {
        // skip the current server since it is having problems
        if (serviceDescriptor.getId().equals(currentServer)) {
            continue;
        }
        // skip bogus announcements
        String jdbcUrl = serviceDescriptor.getProperties().get("jdbc");
        if (jdbcUrl == null) {
            continue;
        }
        try {
            PGConnectionPoolDataSource dataSource = new PGConnectionPoolDataSource();
            dataSource.setUrl(jdbcUrl);
            dataSource.setDefaultRowFetchSize(defaultFetchSize);
            int timeout = Ints.saturatedCast(MILLISECONDS.toSeconds(getMaxConnectionWaitMillis()));
            dataSource.setConnectTimeout(timeout);
            dataSource.setLoginTimeout(timeout);
            dataSource.setSocketTimeout(timeout);
            PooledConnection connection = dataSource.getPooledConnection();
            // that worked so save the datasource and server id
            this.dataSource = dataSource;
            this.currentServer = serviceDescriptor.getId();
            return connection;
        } catch (SQLException e) {
            lastException = e;
        }
    }
    // no servers found, clear the current server id since we no longer have a server at all
    currentServer = null;
    // throw the last exception we got
    if (lastException != null) {
        throw lastException;
    }
    throw new SQLException(format("No PostgreSQL servers of type '%s' available in pool '%s'", serviceSelector.getType(), serviceSelector.getPool()));
}
Also used : PooledConnection(javax.sql.PooledConnection) SQLException(java.sql.SQLException) ServiceDescriptor(io.airlift.discovery.client.ServiceDescriptor) PGConnectionPoolDataSource(org.postgresql.ds.PGConnectionPoolDataSource)

Example 2 with PGConnectionPoolDataSource

use of org.postgresql.ds.PGConnectionPoolDataSource in project narayana by jbosstm.

the class PerformanceTestCommitMarkableResource method testCommitMarkableResource.

// @org.junit.Ignore
@Test
public void testCommitMarkableResource() throws Exception {
    System.out.println("testCommitMarkableResource: " + new Date());
    ConnectionPoolDataSource dataSource = null;
    DataSource recoveryDataSource = null;
    if (dbType.equals("oracle")) {
        // ORA-01795: maximum number of expressions in a list is 1000
        BeanPopulator.getDefaultInstance(JTAEnvironmentBean.class).setCommitMarkableResourceRecordDeleteBatchSize(1000);
        Class clazz = Class.forName("oracle.jdbc.pool.OracleConnectionPoolDataSource");
        dataSource = (ConnectionPoolDataSource) clazz.newInstance();
        clazz.getMethod("setDriverType", new Class[] { String.class }).invoke(dataSource, new Object[] { "thin" });
        clazz.getMethod("setServerName", new Class[] { String.class }).invoke(dataSource, new Object[] { "tywin.eng.hst.ams2.redhat.com" });
        clazz.getMethod("setNetworkProtocol", new Class[] { String.class }).invoke(dataSource, new Object[] { "tcp" });
        clazz.getMethod("setDatabaseName", new Class[] { String.class }).invoke(dataSource, new Object[] { "orcl" });
        clazz.getMethod("setUser", new Class[] { String.class }).invoke(dataSource, new Object[] { "dtf11" });
        clazz.getMethod("setPassword", new Class[] { String.class }).invoke(dataSource, new Object[] { "dtf11" });
        clazz.getMethod("setPortNumber", new Class[] { int.class }).invoke(dataSource, new Object[] { 1521 });
        recoveryDataSource = (DataSource) dataSource;
    } else if (dbType.equals("sybase")) {
        // wide table support?
        BeanPopulator.getDefaultInstance(JTAEnvironmentBean.class).setCommitMarkableResourceRecordDeleteBatchSize(2000);
        Class clazz = Class.forName("com.sybase.jdbc3.jdbc.SybConnectionPoolDataSource");
        dataSource = (ConnectionPoolDataSource) clazz.newInstance();
        clazz.getMethod("setServerName", new Class[] { String.class }).invoke(dataSource, new Object[] { "192.168.1.5" });
        clazz.getMethod("setDatabaseName", new Class[] { String.class }).invoke(dataSource, new Object[] { "LOCALHOST" });
        clazz.getMethod("setUser", new Class[] { String.class }).invoke(dataSource, new Object[] { "sa" });
        clazz.getMethod("setPassword", new Class[] { String.class }).invoke(dataSource, new Object[] { "sybase" });
        clazz.getMethod("setPortNumber", new Class[] { int.class }).invoke(dataSource, new Object[] { 5000 });
        Class clazz2 = Class.forName("com.sybase.jdbc3.jdbc.SybDataSource");
        recoveryDataSource = (DataSource) clazz2.newInstance();
        clazz2.getMethod("setServerName", new Class[] { String.class }).invoke(recoveryDataSource, new Object[] { "192.168.1.5" });
        clazz2.getMethod("setDatabaseName", new Class[] { String.class }).invoke(recoveryDataSource, new Object[] { "LOCALHOST" });
        clazz2.getMethod("setUser", new Class[] { String.class }).invoke(recoveryDataSource, new Object[] { "sa" });
        clazz2.getMethod("setPassword", new Class[] { String.class }).invoke(recoveryDataSource, new Object[] { "sybase" });
        clazz2.getMethod("setPortNumber", new Class[] { int.class }).invoke(recoveryDataSource, new Object[] { 5000 });
    } else if (dbType.equals("h2")) {
        // Smaller batch size as H2 uses a hashtable in the delete which is
        // inefficent for bytearray clause
        BeanPopulator.getDefaultInstance(JTAEnvironmentBean.class).setCommitMarkableResourceRecordDeleteBatchSize(100);
        dataSource = new JdbcDataSource();
        ((JdbcDataSource) dataSource).setURL("jdbc:h2:mem:JBTMDB;MVCC=TRUE;DB_CLOSE_DELAY=-1");
        recoveryDataSource = ((JdbcDataSource) dataSource);
    } else if (dbType.equals("postgres")) {
        dataSource = new PGConnectionPoolDataSource();
        ((PGConnectionPoolDataSource) dataSource).setPortNumber(5432);
        ((PGConnectionPoolDataSource) dataSource).setUser("dtf11");
        ((PGConnectionPoolDataSource) dataSource).setPassword("dtf11");
        ((PGConnectionPoolDataSource) dataSource).setServerName("tywin.eng.hst.ams2.redhat.com");
        ((PGConnectionPoolDataSource) dataSource).setDatabaseName("jbossts");
        recoveryDataSource = new PGSimpleDataSource();
        ((PGSimpleDataSource) recoveryDataSource).setPortNumber(5432);
        ((PGSimpleDataSource) recoveryDataSource).setUser("dtf11");
        ((PGSimpleDataSource) recoveryDataSource).setPassword("dtf11");
        ((PGSimpleDataSource) recoveryDataSource).setServerName("tywin.eng.hst.ams2.redhat.com");
        ((PGSimpleDataSource) recoveryDataSource).setDatabaseName("jbossts");
    } else if (dbType.equals("mysql")) {
        // com.mysql.jdbc.PacketTooBigException: Packet for query is too
        // large (1318148 > 1048576). You can change this value on the
        // server by setting the max_allowed_packet' variable
        BeanPopulator.getDefaultInstance(JTAEnvironmentBean.class).setCommitMarkableResourceRecordDeleteBatchSize(3500);
        dataSource = new MysqlConnectionPoolDataSource();
        // need paranoid as otherwise it sends a connection change user
        ((MysqlConnectionPoolDataSource) dataSource).setUrl("jdbc:mysql://tywin.eng.hst.ams2.redhat.com:3306/jbossts?user=dtf11&password=dtf11&paranoid=true");
        recoveryDataSource = (DataSource) dataSource;
    } else if (dbType.equals("db2")) {
        Class clazz = Class.forName("com.ibm.db2.jcc.DB2ConnectionPoolDataSource");
        dataSource = (ConnectionPoolDataSource) clazz.newInstance();
        clazz.getMethod("setServerName", new Class[] { String.class }).invoke(dataSource, new Object[] { "tywin.eng.hst.ams2.redhat.com" });
        clazz.getMethod("setDatabaseName", new Class[] { String.class }).invoke(dataSource, new Object[] { "BTDB1" });
        clazz.getMethod("setUser", new Class[] { String.class }).invoke(dataSource, new Object[] { "db2" });
        clazz.getMethod("setPassword", new Class[] { String.class }).invoke(dataSource, new Object[] { "db2" });
        clazz.getMethod("setDriverType", new Class[] { int.class }).invoke(dataSource, new Object[] { 4 });
        clazz.getMethod("setPortNumber", new Class[] { int.class }).invoke(dataSource, new Object[] { 50001 });
        Class clazz2 = Class.forName("com.ibm.db2.jcc.DB2DataSource");
        recoveryDataSource = (DataSource) clazz2.newInstance();
        clazz2.getMethod("setServerName", new Class[] { String.class }).invoke(recoveryDataSource, new Object[] { "tywin.eng.hst.ams2.redhat.com" });
        clazz2.getMethod("setDatabaseName", new Class[] { String.class }).invoke(recoveryDataSource, new Object[] { "BTDB1" });
        clazz2.getMethod("setUser", new Class[] { String.class }).invoke(recoveryDataSource, new Object[] { "db2" });
        clazz2.getMethod("setPassword", new Class[] { String.class }).invoke(recoveryDataSource, new Object[] { "db2" });
        clazz2.getMethod("setDriverType", new Class[] { int.class }).invoke(recoveryDataSource, new Object[] { 4 });
        clazz2.getMethod("setPortNumber", new Class[] { int.class }).invoke(recoveryDataSource, new Object[] { 50001 });
    } else if (dbType.equals("sqlserver")) {
        Class clazz = Class.forName("com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolDataSource");
        dataSource = (ConnectionPoolDataSource) clazz.newInstance();
        clazz.getMethod("setServerName", new Class[] { String.class }).invoke(dataSource, new Object[] { "dev30.mw.lab.eng.bos.redhat.com" });
        clazz.getMethod("setDatabaseName", new Class[] { String.class }).invoke(dataSource, new Object[] { "dballo01" });
        clazz.getMethod("setUser", new Class[] { String.class }).invoke(dataSource, new Object[] { "dballo01" });
        clazz.getMethod("setPassword", new Class[] { String.class }).invoke(dataSource, new Object[] { "dballo01" });
        clazz.getMethod("setSendStringParametersAsUnicode", new Class[] { Boolean.class }).invoke(dataSource, new Object[] { false });
        clazz.getMethod("setPortNumber", new Class[] { int.class }).invoke(dataSource, new Object[] { 3918 });
        recoveryDataSource = (DataSource) dataSource;
    }
    PooledConnection pooledConnection = dataSource.getPooledConnection();
    Utils.createTables(pooledConnection.getConnection());
    doTest(new Handler(dataSource, recoveryDataSource), "_testCommitMarkableResource_" + dbType);
}
Also used : JdbcDataSource(org.h2.jdbcx.JdbcDataSource) PGConnectionPoolDataSource(org.postgresql.ds.PGConnectionPoolDataSource) JTAEnvironmentBean(com.arjuna.ats.jta.common.JTAEnvironmentBean) Date(java.util.Date) PGSimpleDataSource(org.postgresql.ds.PGSimpleDataSource) XADataSource(javax.sql.XADataSource) PGConnectionPoolDataSource(org.postgresql.ds.PGConnectionPoolDataSource) MysqlXADataSource(com.mysql.jdbc.jdbc2.optional.MysqlXADataSource) DataSource(javax.sql.DataSource) JdbcDataSource(org.h2.jdbcx.JdbcDataSource) MysqlConnectionPoolDataSource(com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource) ConnectionPoolDataSource(javax.sql.ConnectionPoolDataSource) PGXADataSource(org.postgresql.xa.PGXADataSource) PGConnectionPoolDataSource(org.postgresql.ds.PGConnectionPoolDataSource) MysqlConnectionPoolDataSource(com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource) ConnectionPoolDataSource(javax.sql.ConnectionPoolDataSource) PooledConnection(javax.sql.PooledConnection) PGSimpleDataSource(org.postgresql.ds.PGSimpleDataSource) MysqlConnectionPoolDataSource(com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource) Test(org.junit.Test)

Example 3 with PGConnectionPoolDataSource

use of org.postgresql.ds.PGConnectionPoolDataSource in project siesta by cadenzauk.

the class PostgresConfig method dataSource.

@Bean
public DataSource dataSource() throws SQLException {
    PGConnectionPoolDataSource pool = new PGConnectionPoolDataSource();
    pool.setUser("siesta");
    pool.setDatabaseName("postgres");
    return new PooledDataSource(pool);
}
Also used : PGConnectionPoolDataSource(org.postgresql.ds.PGConnectionPoolDataSource) PooledDataSource(com.cadenzauk.core.sql.testutil.PooledDataSource) Bean(org.springframework.context.annotation.Bean)

Aggregations

PGConnectionPoolDataSource (org.postgresql.ds.PGConnectionPoolDataSource)3 PooledConnection (javax.sql.PooledConnection)2 JTAEnvironmentBean (com.arjuna.ats.jta.common.JTAEnvironmentBean)1 PooledDataSource (com.cadenzauk.core.sql.testutil.PooledDataSource)1 MysqlConnectionPoolDataSource (com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource)1 MysqlXADataSource (com.mysql.jdbc.jdbc2.optional.MysqlXADataSource)1 ServiceDescriptor (io.airlift.discovery.client.ServiceDescriptor)1 SQLException (java.sql.SQLException)1 Date (java.util.Date)1 ConnectionPoolDataSource (javax.sql.ConnectionPoolDataSource)1 DataSource (javax.sql.DataSource)1 XADataSource (javax.sql.XADataSource)1 JdbcDataSource (org.h2.jdbcx.JdbcDataSource)1 Test (org.junit.Test)1 PGSimpleDataSource (org.postgresql.ds.PGSimpleDataSource)1 PGXADataSource (org.postgresql.xa.PGXADataSource)1 Bean (org.springframework.context.annotation.Bean)1