scala - Session must be bound error using Squeryl -


update: okay, fixed problem having, i'm still not quite sure doing wrong. in case, wrote following method in ircdb:

def tryit[t](p: => t) = {     class.forname("org.h2.driver") //what's point in this...?      sessionfactory.concretefactory = some(() =>         session.create(java.sql.drivermanager.getconnection("jdbc:h2:~/irc","scalairc",""), new h2adapter))      transaction {         p     } } 

then used so:

 val query = from(ircdb.channels)(c => select(c))  ircdb.tryit {      (r <- query) println("chan: " + r.name)  } 

and works. understanding, believed once session created using sessionfactory, i'd able use transaction { ... } anywhere has proper import. apparently, understanding incorrect.

if has add please do.


so, started using squeryl project i'm working on might oversight on part. so, first code:

i have following imports:

import org.squeryl.primitivetypemode._ import java.sql.timestamp import java.sql.drivermanager import java.util.date import org.squeryl.adapters.h2adapter import org.squeryl.dsl.{onetomany, manytoone, compositekey2} import org.squeryl._ 

i have following table defined:

class channeltable(val id: long, val name : string,                val p_mode : boolean, val s_mode : boolean,                val i_mode : boolean, val t_mode : boolean,                val n_mode : boolean, val m_mode : boolean,                val key : option[string]) extends keyedentity[long] {     def this() = this(0,"", false, false, false, false, false, false, some(""))      lazy val bans:onetomany[channelbantable] = ircdb.channeltochanbans.left(this)     lazy val users = ircdb.channelusers.left(this)     lazy val invites = ircdb.channelinvites.left(this) } 

and following schema defined:

object ircdb extends schema {     val channels = table[channeltable]      on(channels)(c => declare(       c.p_mode defaultsto(false),       c.s_mode defaultsto(false),       c.i_mode defaultsto(false),       c.t_mode defaultsto(false),       c.n_mode defaultsto(false),       c.m_mode defaultsto(false),       c.name is(unique, indexed)     ))      def init {         class.forname("org.h2.driver") //what's point in this...?          sessionfactory.concretefactory = some(() =>           session.create(drivermanager.getconnection("jdbc:h2:~/irc","scalairc",""), new h2adapter))     }     def getallchannels = transaction { from(channels)(c => select(c))} } 

i have been able insert table following @ console:

scala> import db._;import org.squeryl.primitivetypemode._ import db._ import org.squeryl.primitivetypemode._ scala> ircdb.init scala> transaction { ircdb.channels.insert(new channeltable(0,"#chan_name", false, false, false, false, false, false, none)) } res3: db.channeltable = db.channeltable@4 

i can confirm h2 console indeed occur. however, when call ircdb.getallchannels (in both scala console , in code) following error:

java.lang.runtimeexception: no session bound current thread, session must created via session.create  , bound thread via 'work' or 'bindtocurrentthread'     @ scala.predef$.error(predef.scala:58)     @ org.squeryl.session$$anonfun$currentsession$1.apply(session.scala:117)     @ org.squeryl.session$$anonfun$currentsession$1.apply(session.scala:117)     @ scala.option.getorelse(option.scala:59)     @ org.squeryl.session$.currentsession(session.scala:116)     @ org.squeryl.dsl.abstractquery.org$squeryl$dsl$abstractquery$$_dbadapter(abstractquery.scala:136)     @ org.squeryl.dsl.abstractquery$$anon$1.<init>(abstractquery.scala:140)     @ org.squeryl.dsl.abstractquery.iterator(abstractquery.scala:138)     @ scala.collection.iterablelike$class.foreach(iterablelike.scala:79)     @ org.squeryl.dsl.abstractquery.foreach(abstractquery.scala:27)     @ scala.collection.traversablelike$class.map(traversablelike.scala:206)     @ org.squeryl.dsl.abstractquery.map(abstractquery.scala:27)     @ scala.runtime.scalaruntime$.inner$1(scalaruntime.scala:255)     @ scala.runtime.scalaruntime$.stringof(scalaruntime.scala:258)     @ requestresult$line7$object$.<init>(<console>:12)     @ requestresult$line7$object$.<clinit>(<console>)     @ requestresult$line7$object.scala_repl_result(<console>)     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)     @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:39)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:25)     @ java.lang.reflect.method.invoke(method.java:597)     @ scala.tools.nsc.interpreter$request$$anonfun$loadandrun$1$$anonfun$apply$18.apply(interpreter.scala:981)     @ scala.tools.nsc.interpreter$request$$anonfun$loadandrun$1$$anonfun$apply$18.apply(interpreter.scala:981)     @ scala.util.control.exception$catch.apply(exception.scala:79)     @ scala.tools.nsc.interpreter$request$$anonfun$loadandrun$1.apply(interpreter.scala:980)     @ scala.tools.nsc.interpreter$request$$anonfun$loadandrun$1.apply(interpreter.scala:980)     @ scala.util.control.exception$catch.apply(exception.scala:79)     @ scala.tools.nsc.interpreter$request.loadandrun(interpreter.scala:979)     @ scala.tools.nsc.interpreter.loadandrunreq$1(interpreter.scala:578)     @ scala.tools.nsc.interpreter.interpret(interpreter.scala:597)     @ scala.tools.nsc.interpreter.interpret(interpreter.scala:575)     @ scala.tools.nsc.interpreterloop.reallyinterpret$1(interpreterloop.scala:471)     @ scala.tools.nsc.interpreterloop.interpretstartingwith(interpreterloop.scala:514)     @ scala.tools.nsc.interpreterloop.command(interpreterloop.scala:361)     @ scala.tools.nsc.interpreterloop.processline$1(interpreterloop.scala:242)     @ scala.tools.nsc.interpreterloop.repl(interpreterloop.scala:248)     @ scala.tools.nsc.interpreterloop.main(interpreterloop.scala:558)     @ scala.tools.nsc.interpreterloop.main(interpreterloop.scala:609)     @ org.jetbrains.plugins.scala.compiler.rt.consolerunner.main(consolerunner.java:33)     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)     @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:39)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:25)     @ java.lang.reflect.method.invoke(method.java:597)     @ com.intellij.rt.execution.application.appmain.main(appmain.java:115) 

i don't understand why getting error if able insert rows table doing same way. if try execute transaction { from(ircdb.channels)(c => select(c)) } @ console same error.


edit: i've added full stack trace. also, rewrote getallchannels function this:

def getallchannels = transaction {    val ret = from(channels)(c => select(c))   println("sql: " + ret)   ret } 

i still receive error, print query out first -- thought may useful:

sql: 'queryexpressionnode[root:1a0d111]:rsm='resultsetmapper:fdf48d()--     'fieldselectelement:channeltable1_name         org.squeryl.dsl.ast.fieldselectelement$$anon$3     'fieldselectelement:channeltable1_i_mode         org.squeryl.dsl.ast.fieldselectelement$$anon$3     'fieldselectelement:channeltable1_s_mode         org.squeryl.dsl.ast.fieldselectelement$$anon$3     'fieldselectelement:channeltable1_key         org.squeryl.dsl.ast.fieldselectelement$$anon$3     'fieldselectelement:channeltable1_n_mode         org.squeryl.dsl.ast.fieldselectelement$$anon$3     'fieldselectelement:channeltable1_m_mode         org.squeryl.dsl.ast.fieldselectelement$$anon$3     'fieldselectelement:channeltable1_id         org.squeryl.dsl.ast.fieldselectelement$$anon$3     'fieldselectelement:channeltable1_t_mode         org.squeryl.dsl.ast.fieldselectelement$$anon$3     'fieldselectelement:channeltable1_p_mode         org.squeryl.dsl.ast.fieldselectelement$$anon$3     'viewexpressionnode[sample:channeltable[16e3f87]]:rsm='resultsetmapper:442b95($(1->channeltable.name:java.lang.string),$(2->channeltable.i_mode:java.lang.boolean),$(3->channeltable.s_mode:java.lang.boolean),$(4->channeltable.key:option[java.lang.string]),$(5->channeltable.n_mode:java.lang.boolean),$(6->channeltable.m_mode:java.lang.boolean),$(7->channeltable.id:java.lang.long),$(8->channeltable.t_mode:java.lang.boolean),$(9->channeltable.p_mode:java.lang.boolean))--*  select   channeltable1.name channeltable1_name,   channeltable1.i_mode channeltable1_i_mode,   channeltable1.s_mode channeltable1_s_mode,   channeltable1.key channeltable1_key,   channeltable1.n_mode channeltable1_n_mode,   channeltable1.m_mode channeltable1_m_mode,   channeltable1.id channeltable1_id,   channeltable1.t_mode channeltable1_t_mode,   channeltable1.p_mode channeltable1_p_mode   channeltable channeltable1 java.lang.runtimeexception: no session bound current thread, session must created via session.create  , bound thread via 'work' or 'bindtocurrentthread'     @ scala.predef$.error(predef.scala:58)     @ org.squeryl.session$$anonfun$currentsession$1.apply(session.scala:117)     @ org.squeryl.session$$anonfun$currentsession$1.apply(session.scala:117)     @ scala.option.getorelse(option.scala:59)     @ org.squeryl.session$.currentsession(session.scala:116)     @ org.squeryl.dsl.abstractquery.org$squeryl$dsl$abstractquery$$_dbadapter(abstractquery.scala:136)     @ org.squeryl.dsl.abstractquery$$anon$1.<init>(abstractquery.scala:140)     @ org.squeryl.dsl.abstractquery.iterator(abstractquery.scala:138)     @ scala.collection.iterablelike$class.foreach(iterablelike.scala:79)     @ org.squeryl.... 

here's suspect, method :

def getallchannels = transaction { from(channels)(c => select(c))}

is returning unevaluated query, i.e. return type of

from(channels)(c => select(c))

is query[channeltable] method returns, transaction ended, console tries print it, triggers evaluation :

at org.squeryl.dsl.abstractquery.map(abstractquery.scala:27)         @ scala.runtime.scalaruntime$.inner$1(scalaruntime.scala:255) @ scala.runtime.scalaruntime$.stringof(scalaruntime.scala:258) @ requestresult$line7$object$.<init>(<console>:12) @ requestresult$line7$object$.<clinit>(<console>) @ requestresult$line7$object.scala_repl_result(<console>) 

since transaction ended, message getting.

try :

 def getallchannels = transaction {    val q = from(channels)(c => select(c))   for(z <- q) {     println(z)   } } 

Comments

Popular posts from this blog

php - What is the difference between $_SERVER['PATH_INFO'] and $_SERVER['ORIG_PATH_INFO']? -

fortran - Function return type mismatch -

queue - mq_receive: message too long -