【问题标题】:EBean with Scala on SBT (InterruptedException: sleep interrupted)SBT 上带有 Scala 的 EBean(InterruptedException:睡眠中断)
【发布时间】:2012-07-01 14:40:43
【问题描述】:

我尝试在 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.

提前致谢, 埃塔姆。

【问题讨论】:

    标签: scala exception sbt ebean interrupted-exception


    【解决方案1】:

    默认情况下,run 在与 sbt 本身相同的 jvm 中执行应用程序,以加快周转时间。在这种情况下,run 认为 main 方法终止后只剩下守护线程。它继续中断那些剩余的线程,这会给出您看到的异常。它必须这样做,因为这是在不实际关闭 jvm 的情况下伪造 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

    【讨论】:

      猜你喜欢
      • 2014-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      • 2012-12-03
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      相关资源
      最近更新 更多