On 6/2/05, Daniel John Debrunner <[EMAIL PROTECTED]> wrote:
�ystein Gr�vlen wrote:
> When developing a test for Derby-230, I was made aware of that we
> should not use the DriverManager directly, but instead use
> startJBMS(). However, I see some test (e.g.,
> store/backupRestore1.java) that uses the DriverManager when shutting
> down the database and when doing restore. I am currently working on a
> test for Derby-298 that needs to do the same. Is it OK to do it this
> way? What restriction does it impose on which environment the test
> can be run in?
J2ME does not suport DriverManager. This is because the JDBC JSR169
subset only supports javax.sql.DataSource as the connection mechanism.
I currently have the test suite running under J2ME with about a 50% pass
rate. Many of those failures are due to use of DriverManager, which I
will look at fixing in one way or another.
So at the momeent I would request anyone to minimize use of
DriverManager, but if it is needed then use it.
Dan.
Before, I mentioned that in RunTest, when running with -Duseprocess=false, a call is made to DriverManager:
try
{
java.sql.DriverManager.getConnection("jdbc:derby:;shutdown=true");
}
catch (java.sql.SQLException e)
{
// ignore the errors, they are expected.
}
{
java.sql.DriverManager.getConnection("jdbc:derby:;shutdown=true");
}
catch (java.sql.SQLException e)
{
// ignore the errors, they are expected.
}
I imagine other tests are doing something similar. Without DriverManager, this of course results in a ClassNotFoundDef error.
I spent some time, after Kathey's suggestion on another branch, to use ...functionTests.util.TestUtil to shutdown the database, and I think this should work as a replacement for using DriverManager.getConnection("jdbc:derby:<db>;shutdown=true"). In the case of RunTest, I'm wary of making big waves, so I am thinking of changing the above section to:
try
{
java.sql.DriverManager.getConnection("jdbc:derby:;shutdown=true");
}
catch (java.sql.SQLException e)
{
// ignore the errors, they are expected.
}
// maybe we're running with a DataSource in J2ME.
// then we get an ClassNotFoundDef error on DriverManager.getConnection
catch (Throwable th)
{
Properties attrs = new Properties();
attrs.setProperty("shutdownDatabase", "shutdown");
try {
DataSource ds = TestUtil.getDataSource(attrs);
ds.getConnection();
} catch (Throwable ith) {
ith.printStackTrace();
}
}
{
java.sql.DriverManager.getConnection("jdbc:derby:;shutdown=true");
}
catch (java.sql.SQLException e)
{
// ignore the errors, they are expected.
}
// maybe we're running with a DataSource in J2ME.
// then we get an ClassNotFoundDef error on DriverManager.getConnection
catch (Throwable th)
{
Properties attrs = new Properties();
attrs.setProperty("shutdownDatabase", "shutdown");
try {
DataSource ds = TestUtil.getDataSource(attrs);
ds.getConnection();
} catch (Throwable ith) {
ith.printStackTrace();
}
}
Any reason why this would not work? Should we remove the DriverManager call altogether & replace with the DataSource call?
Thx,
Myrna
