0

I am trying to run EBean with Scala on SBT and I get an error.

This is the code (a test from: 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.")
}

This is the error:

[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

What is wrong with the project?

GIT repository: https://github.com/odwrotnie/hello-ebean; main class: https://github.com/odwrotnie/hello-ebean/blob/master/main/src/main/scala/hello/main.scala; config: https://github.com/odwrotnie/hello-ebean/blob/master/main/src/main/resources/ebean.properties.

Thanks in advance, Etam.

Etam
  • 4,553
  • 10
  • 40
  • 60

1 Answers1

2

By default, run executes the application in the same jvm as sbt itself for faster turnaround time. In this case, run thinks there are only daemon threads left after the main method terminates. It proceeds to interrupt those remaining threads, which gives the exceptions you see. It has to do it this way because this is the best it can do to fake a jvm shutdown without actually shutting it down.

Those exceptions don't look too harmful, but you can get rid of them by running the application in a forked jvm. To enable this, add the following to your build settings

fork in run := true

How sbt runs project code in the same jvm is described here: http://www.scala-sbt.org/release/docs/Detailed-Topics/Running-Project-Code.html

Forking is described here: http://www.scala-sbt.org/release/docs/Detailed-Topics/Forking.html

Mark Harrah
  • 6,999
  • 1
  • 26
  • 31