java.lang.ClassNotFoundException: scala.runtime.AbstractFunction1$mcVI$sp ???

432 views
Skip to first unread message

Chas

unread,
Aug 31, 2010, 6:42:06 PM8/31/10
to Squeryl
Am playing around with Squeryl in Circumflex. Followed the
documentation on site (mixed with a few tricks I picked up from Greg)
and came up with the code below, which gets me the errors that follow.
Apparently, there is some problem with an abstract function, but I've
no clue what that function might be. Can anyone spot it? I've compared
this to working code and can't see any significant difference; I've
read the docs completely and perused the scaladocs; I've searched for
this error on Google. Nada.


import org.squeryl.customtypes.CustomTypesMode._
import org.squeryl.customtypes._
import org.squeryl._
import org.squeryl.dsl._
import org.squeryl.adapters.{PostgreSqlAdapter, H2Adapter}

import java.util.UUID

import java.sql.{SQLException, DatabaseMetaData, ResultSet}


object Monitor extends Schema {

val values = table[ScaleValue]("values")

// override def drop = super.drop
}

trait Domain[A] {
self: CustomType =>

def label: String
def validate(a: A): Unit
def value: A

validate(value)
}

class ValueDenomination(v: Int) extends IntField(v) with Domain[Int] {
def validate(a: Int) = assert(a > -1, "scale value must be non-
negative -- found " + a)
def label = "denomination"
}

class ValueLabel(v: String) extends StringField(v) with Domain[String]
{
def validate(s: String) = assert(s.length > 1, "scale value label
must be at least two characters -- found " + s)
def label = "label"
}

class ScaleValue(val uuid: UUID, val denomination: ValueDenomination,
val label: ValueLabel) extends KeyedEntity[UUID] {
val id: UUID = uuid
}

abstract class MonitSession() {
var _PSQLSession : Option[Session] = None
def acquirePSQLSession() = {
_PSQLSession match {
case Some( session ) => session
case None => {
Class.forName( "org.postgresql.Driver" );
// Class.forName( "org.h2.Driver" );
val session = Session.create(
// java.sql.DriverManager.getConnection( "jdbc:h2:~/monitor/
test", "sa", "" ),
java.sql.DriverManager.getConnection( "jdbc:postgresql://
localhost:5432/monitor", "admin", "" ),
new PostgreSqlAdapter
)
_PSQLSession = Some( session )
session
}
}
}
}

object MonitSession extends MonitSession() {}

object MoniTest extends MonitSession() {
import Monitor._

def initSchema = {
println("-> In MoniTest.initSchema")
// Monitor.drop
Monitor.create
}

def test {
val session: Session = acquirePSQLSession()
println("-> In MoniTest.test")
session.setLogger(println(_))

try {
println("-> Calling MoniTest.initSchema")
initSchema
println("-> Calling MoniTest.populateStore")
populateStore
println("-> Calling MoniTest.testStore")
testStore
} catch {
case e =>
println("Oh, noes! " + e.getMessage)
println("Oh, noes! " + e.getCause)
e.printStackTrace
}
}

def populateStore {
println("-> In MoniTest.populateStore")
values.insert(
List(
new ScaleValue(
UUID.randomUUID,
new ValueDenomination(1),
new ValueLabel("Needs Work")
),
new ScaleValue(
UUID.randomUUID,
new ValueDenomination(2),
new ValueLabel("Good")
),
new ScaleValue(
UUID.randomUUID,
new ValueDenomination(3),
new ValueLabel("Great!")
)
)
)
}

def testStore {
println("-> In MoniTest.testStore")

val vals = from(values)(v => select(v))

for( v <- vals ){ println( "Yo! " + v.denomination.toString + ": "
+ v.label)}
}
}

Stdout after calling MoniTest.test twice:

[INFO] Started Jetty Server
[INFO] Starting scanner at interval of 5 seconds.
-> In MoniTest.test
-> Calling MoniTest.initSchema
-> In MoniTest.initSchema
Oh, noes! scala/runtime/AbstractFunction1$mcVI$sp
Oh, noes! java.lang.ClassNotFoundException:
scala.runtime.AbstractFunction1$mcVI$sp
java.lang.NoClassDefFoundError: scala/runtime/AbstractFunction1$mcVI
$sp
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:
141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at
org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:
392)
at
org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:
363)
at
org.squeryl.internals.PosoMetaData._tryToCreateParamArray(PosoMetaData.scala:
166)
at org.squeryl.internals.PosoMetaData$$anonfun$_const
$1.apply(PosoMetaData.scala:143)
at org.squeryl.internals.PosoMetaData$$anonfun$_const
$1.apply(PosoMetaData.scala:142)
at scala.collection.IndexedSeqOptimized
$class.foreach(IndexedSeqOptimized.scala:35)
at scala.collection.mutable.ArrayOps.foreach(ArrayOps.scala:35)
at org.squeryl.internals.PosoMetaData._const(PosoMetaData.scala:142)
at org.squeryl.internals.PosoMetaData.<init>(PosoMetaData.scala:38)
at org.squeryl.View.<init>(View.scala:35)
at org.squeryl.Table.<init>(Table.scala:27)
at org.squeryl.Schema$class.table(Schema.scala:238)
at com.munat.monit.schema.Monitor$.table(Schema.scala:14)
at com.munat.monit.schema.Monitor$.<init>(Schema.scala:16)
at com.munat.monit.schema.Monitor$.<clinit>(Schema.scala)
at com.munat.monit.schema.MoniTest$.initSchema(Schema.scala:73)
at com.munat.monit.schema.MoniTest$.test(Schema.scala:83)
at com.munat.monit.rest.ValuesRouter$$anonfun
$1.apply(ValuesRouter.scala:12)
at com.munat.monit.rest.ValuesRouter$$anonfun
$1.apply(ValuesRouter.scala:11)
at ru.circumflex.core.RequestRouter$Route.dispatch(router.scala:38)
at ru.circumflex.core.RequestRouter$Route.update(router.scala:47)
at com.munat.monit.rest.ValuesRouter.<init>(ValuesRouter.scala:11)
at com.munat.monit.rest.Main.<init>(main.scala:25)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:
39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:
27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at ru.circumflex.core.CircumflexFilter.doFilter(filter.scala:138)
at ru.circumflex.core.AbstractCircumflexFilter.doFilter(filter.scala:
72)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1148)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
387)
at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:
216)
at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
181)
at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
417)
at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:
230)
at
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:
114)
at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
534)
at org.mortbay.jetty.HttpConnection
$RequestHandler.headerComplete(HttpConnection.java:864)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:
409)
at org.mortbay.thread.QueuedThreadPool
$PoolThread.run(QueuedThreadPool.java:520)
Caused by: java.lang.ClassNotFoundException:
scala.runtime.AbstractFunction1$mcVI$sp
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at
org.codehaus.classworlds.RealmClassLoader.loadClassDirect(RealmClassLoader.java:
195)
at
org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:
255)
at
org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:
274)
at
org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:
214)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at
org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:
401)
at
org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:
363)
... 55 more
-> In MoniTest.test
-> Calling MoniTest.initSchema
-> In MoniTest.initSchema
Oh, noes! Could not initialize class com.munat.monit.schema.Monitor$
Oh, noes! null
java.lang.NoClassDefFoundError: Could not initialize class
com.munat.monit.schema.Monitor$
at com.munat.monit.schema.MoniTest$.initSchema(Schema.scala:73)
at com.munat.monit.schema.MoniTest$.test(Schema.scala:83)
at com.munat.monit.rest.ValuesRouter$$anonfun
$1.apply(ValuesRouter.scala:12)
at com.munat.monit.rest.ValuesRouter$$anonfun
$1.apply(ValuesRouter.scala:11)
at ru.circumflex.core.RequestRouter$Route.dispatch(router.scala:38)
at ru.circumflex.core.RequestRouter$Route.update(router.scala:47)
at com.munat.monit.rest.ValuesRouter.<init>(ValuesRouter.scala:11)
at com.munat.monit.rest.Main.<init>(main.scala:25)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:
39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:
27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at ru.circumflex.core.CircumflexFilter.doFilter(filter.scala:138)
at ru.circumflex.core.AbstractCircumflexFilter.doFilter(filter.scala:
72)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1148)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
387)
at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:
216)
at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
181)
at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
417)
at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:
230)
at
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:
114)
at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
534)
at org.mortbay.jetty.HttpConnection
$RequestHandler.headerComplete(HttpConnection.java:864)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:
409)
at org.mortbay.thread.QueuedThreadPool
$PoolThread.run(QueuedThreadPool.java:520)

Thanks!

Chas.

Maxime Lévesque

unread,
Aug 31, 2010, 7:53:48 PM8/31/10
to squ...@googlegroups.com

This looks like a classpath problem,
I suggest you try running your code outside of Jetty and see if you still get the error.
Also, make sure that you have the correct Scala version, and of course that your
Jetty class loader has it.

Max

Chas

unread,
Aug 31, 2010, 8:34:18 PM8/31/10
to Squeryl
Hmm. Maybe. I tried using scala:console and now I get:

java.lang.RuntimeException: no session is bound to current thread, a
session must be created via Session.create
and bound to the thread via 'work' or 'bindToCurrentThread'

I hate classpath problems.

Thanks for the heads up!

Chas.

Chas

unread,
Aug 31, 2010, 9:34:36 PM8/31/10
to Squeryl
Ha, ha! I are stupid. It helps if after you create the session, you
*actually use it*. To save others the embarrassment, instead of this:

def test {
val session: Session = acquirePSQLSession()
session.setLogger(println(_))
try {
initSchema
populateStore
testStore
} catch {
case e => e.printStackTrace
}
}

How about this:

def test {
val session: Session = acquirePSQLSession()
using( session ) {
session.setLogger(println(_))
try {
initSchema
populateStore
testStore
} catch {
case e => e.printStackTrace
}
}
}

Doh!

Thanks for the help.

Chas.
Reply all
Reply to author
Forward
0 new messages