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认为 main 方法终止后只剩下守护线程。它继续中断那些剩余的线程,这会给出您看到的异常。它必须这样做,因为这是在不实际关闭它的情况下伪造 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 回答