0

SBT で Scala を使用して EBean を実行しようとすると、エラーが発生します。

これはコードです (テスト: http://www.avaje.org/ebean/getstarted_props.html#test ):

object Main extends App {
    val sql = "select count(*) as count from dual"
    val row = Ebean.createSqlQuery(sql).findUnique()
    val i = row.getInteger("count")
    println("Got " + i + "  - DataSource good.")
}

これはエラーです:

[info] Loading project definition from /Volumes/etam/lift/hello-ebean/project
[info] Set current project to Main (in build file:/Volumes/etam/lift/hello-ebean/)
[info] Running hello.Main 
2012-06-30 09:36:51 com.avaje.ebeaninternal.server.core.BootupClassPathSearch search
INFO: Classpath search hits in jars[ebean-2.7.7.jar] pkgs[com.avaje.ebeaninternal.server.bean, com.avaje.ebean.meta]  searchTime[51]
2012-06-30 09:36:51 com.avaje.ebeaninternal.server.lib.sql.DataSourcePool initialise
INFO: DataSourcePool [h2] autoCommit[false] transIsolation[READ_COMMITTED] min[1] max[25]
2012-06-30 09:36:51 com.avaje.ebeaninternal.server.core.DefaultServerFactory setDatabasePlatform
INFO: DatabasePlatform name:h2 platform:h2
2012-06-30 09:36:51 com.avaje.ebeaninternal.server.subclass.SubClassManager$1 run
INFO: SubClassFactory parent ClassLoader [sbt.classpath.ClasspathUtilities$$anon$1]
2012-06-30 09:36:51 com.avaje.ebeaninternal.server.deploy.DeployOrmXml findAllOrmXml
INFO: Deployment xml [orm.xml]  loaded.
2012-06-30 09:36:51 com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager logStatus
INFO: Entities enhanced[0] subclassed[0]
runScript
executing 1 of 2 SET REFERENTIAL_INTEGRITY FALSE
executing 2 of 2 SET REFERENTIAL_INTEGRITY TRUE
... end of script
runScript
... end of script
2012-06-30 09:36:51 com.avaje.ebeaninternal.server.transaction.log.FileTransactionLoggerWrapper initialiseLogger
INFO: Transaction logs in: logs
Got 0  - DataSource good.
2012-06-30 09:36:51 com.avaje.ebeaninternal.server.lib.BackgroundThread$Runner run
SEVERE: null
java.lang.InterruptedException: sleep interrupted
    at java.lang.Thread.sleep(Native Method)
    at com.avaje.ebeaninternal.server.lib.BackgroundThread$Runner.run(BackgroundThread.java:168)
    at java.lang.Thread.run(Thread.java:680)
2012-06-30 09:36:51 com.avaje.ebeaninternal.server.transaction.log.FileTransactionLogger run
INFO: Interrupted TxnLogBufferWriter
java.lang.InterruptedException: sleep interrupted
    at java.lang.Thread.sleep(Native Method)
    at com.avaje.ebeaninternal.server.transaction.log.FileTransactionLogger.run(FileTransactionLogger.java:206)
    at java.lang.Thread.run(Thread.java:680)
[success] Total time: 1 s, completed 2012-06-30 09:36:51

プロジェクトの何が問題になっていますか?

GIT リポジトリ: https://github.com/odwrotnie/hello-ebean ; メインクラス: https://github.com/odwrotnie/hello-ebean/blob/master/main/src/main/scala/hello/main.scala ; 設定: https://github.com/odwrotnie/hello-ebean/blob/master/main/src/main/resources/ebean.properties .

前もってありがとう、イータム。

4

1 に答える 1

2

デフォルトでrunは、sbt 自体と同じ jvm でアプリケーションを実行して、ターンアラウンド タイムを短縮します。この場合、runメイン メソッドが終了した後、デーモン スレッドだけが残っていると見なされます。残りのスレッドを中断し、表示される例外を発生させます。これは、実際にシャットダウンせずに jvm シャットダウンを偽造するために実行できる最善の方法であるため、このようにする必要があります。

これらの例外はそれほど有害ではないように見えますが、フォークされた jvm でアプリケーションを実行することでそれらを取り除くことができます。これを有効にするには、ビルド設定に以下を追加します

fork in run := true

sbt が同じ jvm でプロジェクト コードを実行する方法については、こちらで説明しています: http://www.scala-sbt.org/release/docs/Detailed-Topics/Running-Project-Code.html

フォークはここで説明されています: http://www.scala-sbt.org/release/docs/Detailed-Topics/Forking.html

于 2012-06-30T21:34:32.630 に答える