Apache Derby

フリーのDBMSです。
ファイルサーバーにDBだけおいて共有できるDBを
探していて、いろいろ調べてます。

組み込みモードと、サーバーモードがあるみたい。

組み込みモードでは、1つのVMからしか接続できないです。
サーバーモードでは、複数のVMから接続できますが、
サーバーを起動しておく必要があります。
#まああたりまえですね。

つまり、複数のユーザーでサーバを立てずに、DBを共有するという用途には使用できないようです。
とはいえ、同時に読み書きできないだけで、そんなにクリティカルかつトランザクション量の多くないものであれば、全然利用できるかも知れません。

ちなみに、別のVMが使用してる状態で、接続しようとすると以下のような例外が出ました。


java.sql.SQLException: Failed to start database 'derbyDB', see the next exception for details.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection30.(Unknown Source)
at org.apache.derby.jdbc.Driver30.getNewEmbedConnection(Unknown Source)
at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at embedded.Sample1.main(Sample1.java:33)
Caused by: java.sql.SQLException: Another instance of Derby may have already booted the database D:\

・・・・

ファイルレベルで排他をかけてるんですね。