Suresh Thalamati wrote:


I tried the following steps to create a simple readonly DB on file system it seems to work fine for me.

1) shutdown the DB with no pending transaction (this step is same for jars also), to avoid rollbacks during recovery on a readonly system. 2) disable(deny) write permission for all the files/directories under databases directory for the user id. that is starting the DB. 3) derby store seems to recognize that database is read only if is it unable to create/modify files under database directory. 4) start each JVM that access the database with property derby.storage.tempDirectory (D"derby.storage.tempDirectory=c:/temp/x2") to specify different temp directory for each instance , for the queries to create temporary files in different directories.

My guess is , you are not disabling the write permissions correctly for the database directory on the OS. Otherwise it would not be able to boot in the in the write mode at all, because it needs to crearte lock files, and log files ..etc to do anything.

You're right.

My problem here is, as my own user, I'm setting the directory to read-only, but under Windows that doesn't stop apps from writing to the directory (whereas under Linux, for example, it would... unless that app went and set the directory writeable somehow again.) But... unfortunately, we want to support this scenario where one user creates some data, then sets their own data into read-only so that others can look at it. So I'll have to come up with some other workaround.

I think my workaround might need to be some kind of classloader trick.

If I load the database from the classpath, even if the actual data is on the filesystem, Derby should still open in read-only mode. The trick is going to be making a custom ClassLoader pointing to the parent directory of the database, and then somehow getting Derby to use that classpath instead of its normal one. I guess if I load Derby from that same ClassLoader, then it should work. Maybe there is another way though.

I guess another really horrible way to do it would be to add every filesystem root to the classpath. It would be a bit heavy-handed, but I guess it would work as a last resort. :-)

Daniel

--
Daniel Noll

NUIX Pty Ltd
Level 8, 143 York Street, Sydney 2000
Phone: (02) 9283 9010
Fax:   (02) 9283 9020

This message is intended only for the named recipient. If you are not
the intended recipient you are notified that disclosing, copying,
distributing or taking any action in reliance on the contents of this
message or attachment is strictly prohibited.

Reply via email to