import java.lang.reflect.Method;
import java.sql.Connection;
import com.mchange.v2.c3p0.C3P0ProxyConnection;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class ConnectionPool {
private ComboPooledDataSource pooled;
private static class ConnectionPoolHolder {
private final static ConnectionPool instance= new ConnectionPool();
}
public static ConnectionPool getInstance() {
return ConnectionPoolHolder.instance;
}
private ConnectionPool() {
try {
Class.forName( "org.postgresql.Driver" );
pooled = new ComboPooledDataSource();
pooled.setDriverClass( "org.postgis.DriverWrapper");
pooled.setJdbcUrl( "jdbc:postgresql_postGIS://localhost/database" );
pooled.setUser("postgres");
pooled.setPassword("postgres");
} catch (Exception e) {
e.printStackTrace();
}
}
public Connection getConnection() {
Connection con = null;
try {
con = pooled.getConnection();
C3P0ProxyConnection castCon = (C3P0ProxyConnection) con;
//((org.postgresql.PGConnection) con).addDataType("geometry",org.postgis.PGgeometry.class) ;
//((org.postgresql.PGConnection) con).addDataType("box3d",org.postgis.PGbox3d.class);
// Do the same
Method m = org.postgresql.PGConnection.class.getMethod("addDataType", new Class[]{String.class, Class.class});
Object[] args = new Object[] {"geometry",org.postgis.PGgeometry.class};
castCon.rawConnectionOperation(m, C3P0ProxyConnection.RAW_CONNECTION, args);
Object[] args2 = new Object[] {"box3d",org.postgis.PGbox3d.class};
castCon.rawConnectionOperation(m, C3P0ProxyConnection.RAW_CONNECTION, args2);
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
public static void closeConnection(Connection o)
{
try
{ if (o != null) o.close();}
catch (Exception e)
{ e.printStackTrace();}
}
}
Оно бы не стоило внимания, если бы C3PO давал напрямую работать с Connection, привести его тип к org.postgresql.PGConnection и добавить нужные типы методами PGConnection. Но C3PO дает прокси, у которого есть метод rawConnectionOperation, которому можно передать определение Method PGConnection и нужные аргументы.
Комментариев нет:
Отправить комментарий