2017-09-06 21 views
0

私は、jarファイルのresourcesディレクトリにあるfat-jarにHSQLDBを埋め込みました。スクリプトがDBにアクセスしようとすると、.lckファイルの欠如に関するエラーが発生します。しかし、jarファイル内のDBは常に読み取り専用モードでアクセスされるという印象を受けました。HSQLDB Jar投げ込み埋め込み

Caused by: org.hsqldb.HsqlException: Database lock acquisition failure: lockFile: [email protected][file =/mnt/c/ctakes/SparkCtakes/jar:file:/mnt/c/ctakes/SparkCtakes/lib/ctakes-assembly-4.0.1.jar!/resources/org/apache/ctakes/dictionary/lookup/fast/sno_rx_16ab/sno_rx_16ab.lck, exists=false, locked=false, valid=false, ] method: openRAF reason: java.io.FileNotFoundException: /mnt/c/ctakes/SparkCtakes/jar:file:/mnt/c/ctakes/SparkCtakes/lib/ctakes-assembly-4.0.1.jar!/resources/org/apache/ctakes/dictionary/lookup/fast/sno_rx_16ab/sno_rx_16ab.lck (No such file or directory) 
     at org.hsqldb.error.Error.error(Unknown Source) 
     at org.hsqldb.error.Error.error(Unknown Source) 
     at org.hsqldb.persist.LockFile.newLockFileLock(Unknown Source) 
     at org.hsqldb.persist.Logger.acquireLock(Unknown Source) 
     at org.hsqldb.persist.Logger.open(Unknown Source) 
     at org.hsqldb.Database.reopen(Unknown Source) 
     at org.hsqldb.Database.open(Unknown Source) 
     at org.hsqldb.DatabaseManager.getDatabase(Unknown Source) 
     at org.hsqldb.DatabaseManager.newSession(Unknown Source) 
     ... 112 more 

私は、データベースのリソースを含む、この脂肪jarファイルを作成しています方法はsrc/main/scala/resources内のリソースフォルダを配置してから、すべてをパッケージ化するsbt-assemblyを使用することです。

+0

接続URLに '読み取り専用= true'を追加します。 – fredt

+0

文字列を 'jdbc:hsqldb:file:resources/org/apache/ctakes/dictionary/lookup/fast/sno_rx_16ab/sno_rx_16ab; hsqldb.lock_file = false; readonly = true'に変更しましたが、私はまだ同じエラーに遭遇しています。 – mongolol

答えて

0

読み取り専用データベースがJarファイルにある場合、データベースにアクセスするURLはres:タイプのURLである必要があります。

ジャーのトップレベルのディレクトリはorgで、URLは次のようになりますと仮定すると:

jdbc:hsqldb:res:/org/apache/ctakes/dictionary/look‌​up/fast/sno_rx_16ab/‌​sno_rx_16ab 
+0

あなたの答えから先に進んで、データベースの '.properties'ファイルに入り、そこに' readonly = true'と入力することで、それを動作させることができました。 – mongolol