On 18.02.2012 15:45, Karl Weber wrote:
Hi,I am using Derby DB in an embedded environment. I am shutting down the DB and the system using the following two methods (I have ommitted all try-catch- finally stuff, logging etc.) Shutting down the DB, where fDS is an EmbeddedDataSource40: public void shutdownDB() { fDS.setShutdownDatabase("shutdown"); fDS.getConnection().close(); } Shutting down the system: public void shutdownDerby() { DriverManager.getConnection("jdbc:derby:;shutdown=true"); } This works, if it is done on the thread that is shutting down my OSGi component, which encapsulates Derby, i.e. the deactivate-method called by the OSGi framework. This does, however, _not_ work, if it is put in a separate thread in the deactivate-method, as in new Thread(new Runnable() { @Override public void run() { shutdownBD(); shutdownDerby(); } }).start(); In this case, the Runnable stops at the statement fDS.getConnection().close();
Hi, When you say stops, do you mean the thread is blocking/hanging? If so, can you obtain a stack trace? Regards, -- Kristian
No Throwable is thrown. Nevertheless, the DB does not seem to be stopped correctly, as in the latter case (only) I find the two files dbex.lck and db.lck in the DB folder. Right before this "last" statement is called, I have around 12 threads running, so the thread running the Runnable will most probably not be the last thread in the JVM, if that matters. For some reason I would like to shutdown things asynchroneously. What do I miss here? I am using Derby 10.8.2.2. /Karl
