clojure and embedded derby

2009-02-17 Thread BrianS

Has anyone had experience creating clojure applications that use the
embedded derby database driver? I am having an issue where I am unable
to get the derby embedded database to shut down properly from within
clojure.

More specifically, whenever a java app accesses a derby embedded
database, it creates a lock file to prevent other apps from accessing
the db and corrupting it. This file should be removed in a proper
shutdown of a derby database, but so far, even though I appear to have
gotten the derby database engine to shutdown from within clojure with
(java.sql.DriverManager/getConnection "jdbc:derby:;shutdown=true"),
the lock file still remains, and no app can access the derby database
until the db.lck file is deleted manually.

I assumed this file would be deleted automagically during database
shutdown, but is this actually something my app should do manually
after shutting down its derby database? Thanks in advance for any
assistance, I appreciate that this is only marginally a clojure issue.

Brian
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~--~~~~--~~--~--~---



Re: clojure and embedded derby

2009-02-17 Thread Stuart Sierra

Is your Clojure app running in a REPL?  I've run into situations where
it seems like the Derby lock file doesn't go away until the Clojure
process terminates.

-Stuart Sierra


On Feb 17, 10:28 am, BrianS  wrote:
> Has anyone had experience creating clojure applications that use the
> embedded derby database driver? I am having an issue where I am unable
> to get the derby embedded database to shut down properly from within
> clojure.
>
> More specifically, whenever a java app accesses a derby embedded
> database, it creates a lock file to prevent other apps from accessing
> the db and corrupting it. This file should be removed in a proper
> shutdown of a derby database, but so far, even though I appear to have
> gotten the derby database engine to shutdown from within clojure with
> (java.sql.DriverManager/getConnection "jdbc:derby:;shutdown=true"),
> the lock file still remains, and no app can access the derby database
> until the db.lck file is deleted manually.
>
> I assumed this file would be deleted automagically during database
> shutdown, but is this actually something my app should do manually
> after shutting down its derby database? Thanks in advance for any
> assistance, I appreciate that this is only marginally a clojure issue.
>
> Brian
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~--~~~~--~~--~--~---



Re: clojure and embedded derby

2009-02-17 Thread Jeff Valk

I've seen the same thing with embedded Derby while using SLIME. From within the 
REPL I was always able to reconnect to the same database, so it didn't really 
impact me. Outside the REPL I didn't notice a problem.

If it holds you up, here's one observation you might investigate. Calling 
(.close conn) doesn't remove the lock file, however causing a new connection to 
fail does. It seems the embedded Derby driver may have some locking clean-up 
logic in its connect call. Perhaps browsing the Derby source might show how to 
invoke the real "release lock" method.

- Jeff

On Tuesday 17 February 2009 12:57, Stuart Sierra wrote:
> 
> Is your Clojure app running in a REPL?  I've run into situations where
> it seems like the Derby lock file doesn't go away until the Clojure
> process terminates.
> 
> -Stuart Sierra
> 
> 
> On Feb 17, 10:28 am, BrianS  wrote:
> > Has anyone had experience creating clojure applications that use the
> > embedded derby database driver? I am having an issue where I am unable
> > to get the derby embedded database to shut down properly from within
> > clojure.
> >
> > More specifically, whenever a java app accesses a derby embedded
> > database, it creates a lock file to prevent other apps from accessing
> > the db and corrupting it. This file should be removed in a proper
> > shutdown of a derby database, but so far, even though I appear to have
> > gotten the derby database engine to shutdown from within clojure with
> > (java.sql.DriverManager/getConnection "jdbc:derby:;shutdown=true"),
> > the lock file still remains, and no app can access the derby database
> > until the db.lck file is deleted manually.
> >
> > I assumed this file would be deleted automagically during database
> > shutdown, but is this actually something my app should do manually
> > after shutting down its derby database? Thanks in advance for any
> > assistance, I appreciate that this is only marginally a clojure issue.
> >
> > Brian

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~--~~~~--~~--~--~---



Re: clojure and embedded derby

2009-02-18 Thread BrianS

Stuart,
Yes, it is running in a REPL right now, but I have gone to the
extent of unloading NetBeans (and I assume clojure) fully (no java
processes running), and still the lock file remains. But it does not
prevent me from reloading my clojure project in NetBeans and re-
connecting. However, NetBeans database browsing service cannot log
onto the same database, until the lock file is removed.

Jeff,  I guess it surprises me that closing the connection doesn't
remove the lock file, but maybe that has something to do with JDBC
connection pooling?? Don't know for sure, that WAS a good idea to
peruse the derby source code in the connection logic. Derby
documentation recommends shutting down embedded server's in java (and
therefore clojure) programs before the app exits, although early
experiments in that do not appear to affect this lock file.

Thanks for the advice and experience all,
Brian

On Feb 17, 2:59 pm, Jeff Valk  wrote:
> I've seen the same thing with embedded Derby while using SLIME. From within 
> the REPL I was always able to reconnect to the same database, so it didn't 
> really impact me. Outside the REPL I didn't notice a problem.
>
> If it holds you up, here's one observation you might investigate. Calling 
> (.close conn) doesn't remove the lock file, however causing a new connection 
> to fail does. It seems the embedded Derby driver may have some locking 
> clean-up logic in its connect call. Perhaps browsing the Derby source might 
> show how to invoke the real "release lock" method.
>
> - Jeff
>
> On Tuesday 17 February 2009 12:57, Stuart Sierra wrote:
>
>
>
> > Is your Clojure app running in a REPL?  I've run into situations where
> > it seems like the Derby lock file doesn't go away until the Clojure
> > process terminates.
>
> > -Stuart Sierra
>
> > On Feb 17, 10:28 am, BrianS  wrote:
> > > Has anyone had experience creating clojure applications that use the
> > > embedded derby database driver? I am having an issue where I am unable
> > > to get the derby embedded database to shut down properly from within
> > > clojure.
>
> > > More specifically, whenever a java app accesses a derby embedded
> > > database, it creates a lock file to prevent other apps from accessing
> > > the db and corrupting it. This file should be removed in a proper
> > > shutdown of a derby database, but so far, even though I appear to have
> > > gotten the derby database engine to shutdown from within clojure with
> > > (java.sql.DriverManager/getConnection "jdbc:derby:;shutdown=true"),
> > > the lock file still remains, and no app can access the derby database
> > > until the db.lck file is deleted manually.
>
> > > I assumed this file would be deleted automagically during database
> > > shutdown, but is this actually something my app should do manually
> > > after shutting down its derby database? Thanks in advance for any
> > > assistance, I appreciate that this is only marginally a clojure issue.
>
> > > Brian
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~--~~~~--~~--~--~---



Re: clojure and embedded derby

2009-02-19 Thread BrianS

First of all, I was able to shutdown derby within clojure, to remove
the lock files. I execute this code:
(defn shutdown-derby [dbspec]
  (try
(java.sql.DriverManager/getConnection (str "jdbc:derby:" (:subname
dbspec) ";shutdown=true"))
(catch java.sql.SQLException sqle
  (if (= "08006" (.getSQLState sqle))
(prn "Exiting Derby shutdown SQLException - 08006")
(throw sqle)
and the derby databases are shutdown and lock files removed. dbspec is
the db struct found in clojure.contrib.sql, although it really just
needs to be
a map with the database name (in jdbc syntax format) as a value to
the :subname key. It should be noted that java system garbage
collection (or app exit) needs
to be done before you can re-establish a connection with the derby db
in embedded mode.

On the second note, I was able to connect via my clojure REPL in
embedded mode and the NetBeans database browser in client mode
simultaneously.
I start up my app in enclojure or execute some type of code in the
REPL to start up the derby database in embedded mode. Then I execute
the following code:
(defn start-network-server [port]
  (let [nsc (NetworkServerControl. (java.net.InetAddress/getByName
"localhost") port)]
(.start nsc nil)))
as in: (start-network-server 1527)
I use port 1527 and then I can connect to the same database in
Netbeans database browser using this jdbc connection string:
jdbc:derby://localhost:1527/MyDB

HTH fellow dewbies,
Brian

On Feb 18, 9:18 am, BrianS  wrote:
> Stuart,
>     Yes, it is running in a REPL right now, but I have gone to the
> extent of unloading NetBeans (and I assume clojure) fully (no java
> processes running), and still the lock file remains. But it does not
> prevent me from reloading my clojure project in NetBeans and re-
> connecting. However, NetBeans database browsing service cannot log
> onto the same database, until the lock file is removed.
>
> Jeff,  I guess it surprises me that closing the connection doesn't
> remove the lock file, but maybe that has something to do with JDBC
> connection pooling?? Don't know for sure, that WAS a good idea to
> peruse the derby source code in the connection logic. Derby
> documentation recommends shutting down embedded server's in java (and
> therefore clojure) programs before the app exits, although early
> experiments in that do not appear to affect this lock file.
>
> Thanks for the advice and experience all,
> Brian
>
> On Feb 17, 2:59 pm, Jeff Valk  wrote:
>
> > I've seen the same thing with embedded Derby while using SLIME. From within 
> > the REPL I was always able to reconnect to the same database, so it didn't 
> > really impact me. Outside the REPL I didn't notice a problem.
>
> > If it holds you up, here's one observation you might investigate. Calling 
> > (.close conn) doesn't remove the lock file, however causing a new 
> > connection to fail does. It seems the embedded Derby driver may have some 
> > locking clean-up logic in its connect call. Perhaps browsing the Derby 
> > source might show how to invoke the real "release lock" method.
>
> > - Jeff
>
> > On Tuesday 17 February 2009 12:57, Stuart Sierra wrote:
>
> > > Is your Clojure app running in a REPL?  I've run into situations where
> > > it seems like the Derby lock file doesn't go away until the Clojure
> > > process terminates.
>
> > > -Stuart Sierra
>
> > > On Feb 17, 10:28 am, BrianS  wrote:
> > > > Has anyone had experience creating clojure applications that use the
> > > > embedded derby database driver? I am having an issue where I am unable
> > > > to get the derby embedded database to shut down properly from within
> > > > clojure.
>
> > > > More specifically, whenever a java app accesses a derby embedded
> > > > database, it creates a lock file to prevent other apps from accessing
> > > > the db and corrupting it. This file should be removed in a proper
> > > > shutdown of a derby database, but so far, even though I appear to have
> > > > gotten the derby database engine to shutdown from within clojure with
> > > > (java.sql.DriverManager/getConnection "jdbc:derby:;shutdown=true"),
> > > > the lock file still remains, and no app can access the derby database
> > > > until the db.lck file is deleted manually.
>
> > > > I assumed this file would be deleted automagically during database
> > > > shutdown, but is this actually something my app should do manually
> > > > after shutting down its derby database? Thanks in advance for any
> > > > assistance, I appreciate that this is only marginally a clojure issue.
>
> > > > Brian
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~--~~~~--~~--~--~--

Re: clojure and embedded derby

2009-02-20 Thread BrianS

One last question about clojure and derby:  once I store a character
large object type (CLOB), does anyone know of a best-practices way of
converting it back into string from a resultset-seq for use in clojure
processing? Thanks in advance for any help in this area.

Brian
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~--~~~~--~~--~--~---