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]

Reply via email to