On 28.05.2010 18:44, Marcin Krol wrote:
Hello everyone,

I'm trying to use Derby here as embedded database in our test automation framework (that deploys itself on the remote endpoint and executes some Java classes to test functionality of the product).

Code:

private void createDerbyConnection() throws ClassNotFoundException, SQLException
{
    Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
    String dburl = "jdbc:derby:DerbyDB;create=true";
    derbyconn = DriverManager.getConnection(dburl);
    derbyconn.setAutoCommit(false);
    derbyst = derbyconn.createStatement();
}


Hi Marcin,

Sorry for this vey vague answer, but could this have to do with classloaders?
Is the framwork you are using doing anything explicit about classloaders?

There is some classloader sensitive code in DriverManager.
Not sure in which context I stumbled over this, but I may have worked around the issue by using the Class.forName() method that takes a ClassLoader argument. Now, if this is the problem and the proposed fix is sound, you just have to figure out which classloader to use when loading the driver class :)


Regards,
--
Kristian


Now, the weird thing is that when the same class is using Derby in standalone program (ran e.g. on Linux) *on the same host*, or in Eclipse on my laptop, it all runs fine - I can connect to the db and operate on it all right.

It's only when I deploy the thing remotely, I get exception "java.sql.SQLException: No suitable driver" on line:

derbyconn = DriverManager.getConnection(dburl);

Note: the EmbeddedDriver jdbc class is most probably loaded fine, which is reinforced by the fact that if I delete derby.jar from classpath I get ClassNotFoundException.

Some people on the net suggested that this exception is being caused by wrong db url, but I can't see what's possibly wrong with my db url. I was under impression that this is correct dburl for embedded derby driver which should be in derby.jar.



Reply via email to