Thomas Kelder wrote:
Stanley Bradbury wrote:
Hi Thomas -

I looked into this further after I discovered inconsistencies in our
documentation and it making the change I suggested will not correct
your problem (though I still believe that Static properties need to be
set prior to loading the driver).  I am looking into this further but
it looks like a bug so far.  Thank you for reporting this and
supplying the easy to use test case.  I will let you know what I find.

Stan

This appears to be a bug, possibly a regression.  When I converted your
DB to10.0 everything worked fine even when I did NOT set the properties
for tempDirectory and error.file (hmmm..).  When I switched to using the
10.1  or 10.2 jars and accessed the very same database the 40XD1 ERROR
happened.

Since this is your discovery it is only right that you should file (e.g.
get credit for) the JIRA bug report.  The instructions for doing this
are at:
  http://db.apache.org/derby/DerbyBugGuidelines.html
 there is a document linked to this page that steps you through the
process with screenshots.

Please attach your DB and java program, include the link to this email
thread (http://article.gmane.org/gmane.comp.apache.db.derby.user/6123)
and make note of the findings that this does happen using version 10.0.

As I mentioned earlier - our documentation of tempDirectory is
inconsistent and I will be filing a doc bug for that.  The PROPERTIES
table in the Tuning guide lists this as a Dynamic property whereas the
descriptive text of the property says it is Static - my guess is that it
is static but someone will have to look into the code to tell for sure.

Hi Stan,

Thanks for your support, I filed a bug on JIRA as you advised:
https://issues.apache.org/jira/browse/DERBY-2354

Considering the static properties, do you know a way to set a static
property from within the java program before loading the driver (so
without using the derby.properties file or a command-line option)? The
only option I could find in the documentation to set the properties
programatically was to use a Properties object when calling
DriverManager.getConnection, but this requires the driver to be loaded
first.

Thanks,
Thomas

Hi Thomas -

This is how I modified your program for my tests.   Base on the example at:
http://db.apache.org/derby/docs/10.2/tuning/ctunsetprop38343.html

HTH

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class DerbyTest2 {

   public static void main(String[] args) {
       File dbFile = new File("testdb.zip");

       Properties sprop = System.getProperties();
       sprop.put("derby.storage.tempDirectory", "C:\\temp");
       sprop.put("derby.stream.error.file", "C:\\temp\\derby.log");

try {
           Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
       } catch (ClassNotFoundException e) {
           System.out.println("Derby driver not found!");
           e.printStackTrace();
       }
String url = "jdbc:derby:jar:(" + dbFile.toString() + ")database"; try { Connection con = DriverManager.getConnection(url);
           Statement s = con.createStatement();
           s.executeQuery("SELECT DISTINCT groupId FROM expression");
} catch (SQLException e) {
           e.printStackTrace();
       }
   }

}


Reply via email to