2016-07-13 12 views
0

自動サーバーモードでH2を実行しているので、複数のプロセスからアクセスできます。しかし、TOMEEがすでにそれを使用しているときは、コマンドラインからorg.h2.tools.Scriptを実行することができません。 TOMEEをシャットダウンすると、org.h2.tools.Scriptが正常に動作します。 H2:ここ AUTOSERVERモードのコマンドラインからorg.h2.tools.Scriptを実行できません

は私が
のjava -cp h2-1.4.188.jar org.h2.tools.Script -url」JDBCを使用していますcommnadある〜/テスト; FILE_LOCK = FILE; AUTO_SERVER = TRUE "-user SA -password SA -script test.sql内

例外Tomcatがアップ

Exception in thread "main" org.h2.jdbc.JdbcSQLException: IO Exception: "java.io.FileNotFoundException: /var/lib/test.sql (Permission denied)"; SQL statement: 
SCRIPT TO '/var/lib/test.sql' [90028-188] 
     at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) 
     at org.h2.message.DbException.get(DbException.java:168) 
     at org.h2.message.DbException.convertIOException(DbException.java:328) 
     at org.h2.command.dml.ScriptBase.openOutput(ScriptBase.java:146) 
     at org.h2.command.dml.ScriptCommand.query(ScriptCommand.java:159) 
     at org.h2.command.CommandContainer.query(CommandContainer.java:90) 
     at org.h2.command.Command.executeQuery(Command.java:197) 
     at org.h2.server.TcpServerThread.process(TcpServerThread.java:320) 
     at org.h2.server.TcpServerThread.run(TcpServerThread.java:159) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: java.io.FileNotFoundException: /var/lib/test.sql (Permission denied) 
     at java.io.FileOutputStream.open0(Native Method) 
     at java.io.FileOutputStream.open(FileOutputStream.java:270) 
     at java.io.FileOutputStream.<init>(FileOutputStream.java:213) 
     at java.io.FileOutputStream.<init>(FileOutputStream.java:101) 
     at org.h2.store.fs.FilePathDisk.newOutputStream(FilePathDisk.java:290) 
     at org.h2.store.fs.FileUtils.newOutputStream(FileUtils.java:233) 
     at org.h2.command.dml.ScriptBase.openOutput(ScriptBase.java:144) 
     ... 6 more 

     at org.h2.engine.SessionRemote.done(SessionRemote.java:624) 
     at org.h2.command.CommandRemote.executeQuery(CommandRemote.java:158) 
     at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:179) 
     at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:158) 
     at org.h2.tools.Script.process(Script.java:141) 
     at org.h2.tools.Script.process(Script.java:120) 
     at org.h2.tools.Script.runTool(Script.java:101) 
     at org.h2.tools.Script.main(Script.java:46) 

私はFileNotFoundExceptionをを参照してください理由はわからないとき、私はコマンドを発行したときに私が得ます。 TOMEEが実行されていないときにこれが消えることを忘れないでください。

アイデア?私はドッカーのコンテナにいます。 TOMEEとScriptの間にURLが一致することを確認しました。

答えて

0

これはなぜ起こっているのか分かりました。スクリプトコマンドがrootとして実行されている間、TOMEEプロセスは「テスト」ユーザーとして実行されています。 TOMEEはH2 DBに最初にアクセスするので、 'test'ユーザは/ var/lib /に書き込む権限を持っているはずです。しかし、/ var/libフォルダにはrootユーザの権限があるので、テストユーザはそのユーザに書き込むことはできません。

関連する問題