Hi All:
I inherited some code that is using the Apache commons-dbcp Connection
pools in an OSGi bundle. This code works fine with Eclipse/Equinox OSGi
version 3.4.3 (R34x_v20081215), commons-dbcp 1.2.2 and the postgres
jdbc3 8.3.603 bundles from springsource.org.
I wanted to modernize, maybe this was my first mistake!
When I use the new version of Felix or Equinox OSGi Cores with the new
postgresql JDBC3 or JDBC4 bundles along with the latest version of
commons-dbcp (1.4.1), I am getting a classloading issue. I have done
numerous searches and found that the commons-dbcp code should have a fix
DBCP-214 <http://issues.apache.org/jira/browse/DBCP-214>, but it still
seems to fail.
I wrote a simple test in an activator that first does a basic
class.forName() and DriverManager.getConnection(), this works fine, but
when I add in BasicDataSource() and setup the connection with
BasicDataSource.getConnection(), I get the ClassNotFoundException. See
the code example below.
Thanks in Advance for any help, suggestions, ...
Sau!
|// This one fails with an exception
public void dsTest() {
BasicDataSource bds= new BasicDataSource();
ClassLoader cl;
try {
logger.debug("ContextClassLoader: {}",
Thread.currentThread().getContextClassLoader().toString());
cl= this.getClass().getClassLoader();
logger.debug("ClassLoader: {}", cl);
if (bds.getDriverClassLoader() != null) {
logger.debug(bds.getDriverClassLoader().toString());
}
// The failure is the same with and with the setDriverClassLoader() line
bds.setDriverClassLoader(cl);
bds.setDriverClassName("org.postgresql.Driver");
bds.setUrl("jdbc:postgresql://127.0.0.1/dbname");
bds.setUsername("user");
bds.setPassword("pword");
Class.forName("org.postgresql.Driver").newInstance();
conn= bds.getConnection();
Statement st= conn.createStatement();
ResultSet rs= st.executeQuery("SELECT COUNT(*) FROM table");
conn.close();
logger.debug("Closed DataSource Test");
} catch (Exception ex) {
ex.printStackTrace();
logger.debug("Exception: {}", ex.getMessage());
}
}
// This one works
public void managerTest() {
ClassLoader cl;
try {
cl= this.getClass().getClassLoader();
logger.debug("ClassLoader: {}", cl);
Class.forName("org.postgresql.Driver").newInstance();
String url= "jdbc:postgresql://127.0.0.1/dbname";
conn= DriverManager.getConnection(url, "user", "pword");
Statement st= conn.createStatement();
ResultSet rs= st.executeQuery("SELECT COUNT(*) FROM table");
conn.close();
logger.debug("Closed Manger Test");
} catch (Exception ex) {
ex.printStackTrace();
logger.debug("Exception: {}", ex.getMessage());
}
}
|
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]